summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorGitHub Action <action@github.com>2023-12-15 01:24:12 +0000
committerGitHub Action <action@github.com>2023-12-15 01:24:12 +0000
commitd1052ddfbe2431eb5d6c1d41301cdf2ad049b6de (patch)
treefe0d8d0136127dcafa1e3dc3dd4cf4a31725a22e
parentc15103048d22c8e3171c8965b8cf15ca99494086 (diff)
downloadinfini-d1052ddfbe2431eb5d6c1d41301cdf2ad049b6de.tar.gz
infini-d1052ddfbe2431eb5d6c1d41301cdf2ad049b6de.zip
Deployed daa378d6 to dev with MkDocs 1.5.3 and mike 2.0.0
-rw-r--r--dev/404.html22
-rw-r--r--dev/API/index.html22
-rw-r--r--dev/CLI/index.html24
-rw-r--r--dev/Core/index.html24
-rw-r--r--dev/Help/PythonSkill/index.html22
-rw-r--r--dev/Help/TermList/index.html22
-rw-r--r--dev/Help/emoji/index.html22
-rw-r--r--dev/RulePackage/Write/prepare/index.html22
-rw-r--r--dev/RulePackage/Write/python/index.html22
-rw-r--r--dev/RulePackage/Write/write/index.html22
-rw-r--r--dev/RulePackage/getStart/attribute/index.html22
-rw-r--r--dev/RulePackage/getStart/class/index.html22
-rw-r--r--dev/RulePackage/getStart/getDeeper/Module/index.html22
-rw-r--r--dev/RulePackage/getStart/getDeeper/Package/index.html22
-rw-r--r--dev/RulePackage/getStart/getDeeper/object/index.html22
-rw-r--r--dev/RulePackage/getStart/method/index.html22
-rw-r--r--dev/RulePackage/intro/index.html24
-rw-r--r--dev/RulePackage/skill/fstring/index.html22
-rw-r--r--dev/RulePackage/skill/index.html22
-rw-r--r--dev/Standard/Term/DefaultDice/_counts/index.html22
-rw-r--r--dev/Standard/Term/DefaultDice/_sides/index.html22
-rw-r--r--dev/Standard/Term/DefaultDice/index.html22
-rw-r--r--dev/Standard/Term/PlayerCard/index.html22
-rw-r--r--dev/Standard/Term/check/ability/index.html22
-rw-r--r--dev/Standard/Term/check/index.html22
-rw-r--r--dev/Standard/Term/duration/campaign/index.html22
-rw-r--r--dev/Standard/Term/duration/index.html22
-rw-r--r--dev/Standard/Term/duration/module/index.html22
-rw-r--r--dev/Standard/Term/duration/sene/index.html22
-rw-r--r--dev/Standard/Term/scenario/index.html22
-rw-r--r--dev/Standard/Term/setting/index.html22
-rw-r--r--dev/Standard/what-is-rule-package/index.html24
-rw-r--r--dev/Standard/what-is-standard/index.html22
-rw-r--r--dev/Standard/why-rule-package/index.html22
-rw-r--r--dev/assets/javascripts/components/_/index.ts104
-rw-r--r--dev/assets/javascripts/components/iconsearch/_/index.ts94
-rw-r--r--dev/assets/javascripts/components/iconsearch/index.ts25
-rw-r--r--dev/assets/javascripts/components/iconsearch/query/index.ts96
-rw-r--r--dev/assets/javascripts/components/iconsearch/result/index.ts237
-rw-r--r--dev/assets/javascripts/components/index.ts25
-rw-r--r--dev/assets/javascripts/components/sponsorship/index.ts149
-rw-r--r--dev/assets/javascripts/custom.9c11c319.min.js (renamed from dev/src/material/overrides/assets/javascripts/custom.9c11c319.min.js)0
-rw-r--r--dev/assets/javascripts/custom.9c11c319.min.js.map (renamed from dev/src/material/overrides/assets/javascripts/custom.9c11c319.min.js.map)0
-rw-r--r--dev/assets/javascripts/custom.ts55
-rw-r--r--dev/assets/javascripts/iconsearch_index.json (renamed from dev/src/material/overrides/assets/javascripts/iconsearch_index.json)0
-rw-r--r--dev/assets/javascripts/integrations/analytics/index.ts42
-rw-r--r--dev/assets/javascripts/integrations/index.ts23
-rw-r--r--dev/assets/javascripts/templates/iconsearch/index.tsx95
-rw-r--r--dev/assets/javascripts/templates/index.ts24
-rw-r--r--dev/assets/javascripts/templates/sponsorship/index.tsx67
-rw-r--r--dev/assets/stylesheets/custom.00c04c01.min.css (renamed from dev/src/material/overrides/assets/stylesheets/custom.00c04c01.min.css)0
-rw-r--r--dev/assets/stylesheets/custom.00c04c01.min.css.map (renamed from dev/src/material/overrides/assets/stylesheets/custom.00c04c01.min.css.map)0
-rw-r--r--dev/assets/stylesheets/custom.scss44
-rw-r--r--dev/assets/stylesheets/custom/_typeset.scss294
-rw-r--r--dev/assets/stylesheets/custom/layout/_banner.scss66
-rw-r--r--dev/assets/stylesheets/custom/layout/_hero.scss123
-rw-r--r--dev/assets/stylesheets/custom/layout/_iconsearch.scss136
-rw-r--r--dev/assets/stylesheets/custom/layout/_sponsorship.scss128
-rw-r--r--dev/blog/2023/10/07/rule-基类已经支持泛型了/index.html26
-rw-r--r--dev/blog/archive/2023/index.html22
-rw-r--r--dev/blog/category/rules/index.html22
-rw-r--r--dev/blog/index.html22
-rw-r--r--dev/changelog/index.html22
-rw-r--r--dev/index.html72
-rw-r--r--dev/sitemap.xml.gzbin127 -> 127 bytes
-rw-r--r--dev/src/material/__init__.py21
-rw-r--r--dev/src/material/extensions/__init__.py19
-rw-r--r--dev/src/material/extensions/emoji.py98
-rw-r--r--dev/src/material/overrides/home.html26
-rw-r--r--dev/src/material/overrides/hooks/shortcodes.py283
-rw-r--r--dev/src/material/overrides/hooks/translations.html32
-rw-r--r--dev/src/material/overrides/hooks/translations.py193
-rw-r--r--dev/src/material/overrides/main.html17
-rw-r--r--dev/src/material/plugins/__init__.py19
-rw-r--r--dev/src/material/plugins/blog/__init__.py19
-rw-r--r--dev/src/material/plugins/blog/author.py38
-rw-r--r--dev/src/material/plugins/blog/config.py88
-rw-r--r--dev/src/material/plugins/blog/plugin.py884
-rw-r--r--dev/src/material/plugins/blog/readtime/__init__.py51
-rw-r--r--dev/src/material/plugins/blog/readtime/parser.py45
-rw-r--r--dev/src/material/plugins/blog/structure/__init__.py292
-rw-r--r--dev/src/material/plugins/blog/structure/config.py37
-rw-r--r--dev/src/material/plugins/blog/structure/markdown.py58
-rw-r--r--dev/src/material/plugins/blog/structure/options.py87
-rw-r--r--dev/src/material/plugins/blog/templates/__init__.py42
-rw-r--r--dev/src/material/plugins/group/__init__.py19
-rw-r--r--dev/src/material/plugins/group/config.py33
-rw-r--r--dev/src/material/plugins/group/plugin.py151
-rw-r--r--dev/src/material/plugins/info/__init__.py19
-rw-r--r--dev/src/material/plugins/info/config.py35
-rw-r--r--dev/src/material/plugins/info/plugin.py245
-rw-r--r--dev/src/material/plugins/offline/__init__.py19
-rw-r--r--dev/src/material/plugins/offline/config.py30
-rw-r--r--dev/src/material/plugins/offline/plugin.py69
-rw-r--r--dev/src/material/plugins/search/__init__.py19
-rw-r--r--dev/src/material/plugins/search/config.py58
-rw-r--r--dev/src/material/plugins/search/plugin.py580
-rw-r--r--dev/src/material/plugins/social/__init__.py19
-rw-r--r--dev/src/material/plugins/social/config.py48
-rw-r--r--dev/src/material/plugins/social/plugin.py516
-rw-r--r--dev/src/material/plugins/tags/__init__.py27
-rw-r--r--dev/src/material/plugins/tags/config.py38
-rw-r--r--dev/src/material/plugins/tags/plugin.py182
-rw-r--r--dev/src/material/templates/404.html7
-rw-r--r--dev/src/material/templates/__init__.py19
-rw-r--r--dev/src/material/templates/assets/images/favicon.pngbin1870 -> 0 bytes
-rw-r--r--dev/src/material/templates/base.html258
-rw-r--r--dev/src/material/templates/blog-post.html112
-rw-r--r--dev/src/material/templates/blog.html21
-rw-r--r--dev/src/material/templates/main.html4
-rw-r--r--dev/src/material/templates/mkdocs_theme.yml50
-rw-r--r--dev/src/material/templates/partials/actions.html22
-rw-r--r--dev/src/material/templates/partials/alternate.html22
-rw-r--r--dev/src/material/templates/partials/comments.html3
-rw-r--r--dev/src/material/templates/partials/consent.html66
-rw-r--r--dev/src/material/templates/partials/content.html19
-rw-r--r--dev/src/material/templates/partials/copyright.html16
-rw-r--r--dev/src/material/templates/partials/feedback.html42
-rw-r--r--dev/src/material/templates/partials/footer.html56
-rw-r--r--dev/src/material/templates/partials/header.html63
-rw-r--r--dev/src/material/templates/partials/icons.html48
-rw-r--r--dev/src/material/templates/partials/integrations/analytics.html14
-rw-r--r--dev/src/material/templates/partials/integrations/analytics/google.html7
-rw-r--r--dev/src/material/templates/partials/javascripts/announce.html4
-rw-r--r--dev/src/material/templates/partials/javascripts/base.html4
-rw-r--r--dev/src/material/templates/partials/javascripts/consent.html4
-rw-r--r--dev/src/material/templates/partials/javascripts/content.html6
-rw-r--r--dev/src/material/templates/partials/javascripts/outdated.html4
-rw-r--r--dev/src/material/templates/partials/javascripts/palette.html4
-rw-r--r--dev/src/material/templates/partials/language.html6
-rw-r--r--dev/src/material/templates/partials/languages/af.html56
-rw-r--r--dev/src/material/templates/partials/languages/ar.html57
-rw-r--r--dev/src/material/templates/partials/languages/be.html57
-rw-r--r--dev/src/material/templates/partials/languages/bg.html56
-rw-r--r--dev/src/material/templates/partials/languages/bn.html56
-rw-r--r--dev/src/material/templates/partials/languages/ca.html55
-rw-r--r--dev/src/material/templates/partials/languages/cs.html55
-rw-r--r--dev/src/material/templates/partials/languages/da.html56
-rw-r--r--dev/src/material/templates/partials/languages/de.html56
-rw-r--r--dev/src/material/templates/partials/languages/el.html54
-rw-r--r--dev/src/material/templates/partials/languages/en.html59
-rw-r--r--dev/src/material/templates/partials/languages/eo.html29
-rw-r--r--dev/src/material/templates/partials/languages/es.html56
-rw-r--r--dev/src/material/templates/partials/languages/et.html23
-rw-r--r--dev/src/material/templates/partials/languages/eu.html55
-rw-r--r--dev/src/material/templates/partials/languages/fa.html57
-rw-r--r--dev/src/material/templates/partials/languages/fi.html24
-rw-r--r--dev/src/material/templates/partials/languages/fr.html56
-rw-r--r--dev/src/material/templates/partials/languages/gl.html36
-rw-r--r--dev/src/material/templates/partials/languages/he.html57
-rw-r--r--dev/src/material/templates/partials/languages/hi.html56
-rw-r--r--dev/src/material/templates/partials/languages/hr.html55
-rw-r--r--dev/src/material/templates/partials/languages/hu.html56
-rw-r--r--dev/src/material/templates/partials/languages/hy.html56
-rw-r--r--dev/src/material/templates/partials/languages/id.html56
-rw-r--r--dev/src/material/templates/partials/languages/is.html55
-rw-r--r--dev/src/material/templates/partials/languages/it.html56
-rw-r--r--dev/src/material/templates/partials/languages/ja.html58
-rw-r--r--dev/src/material/templates/partials/languages/ka.html29
-rw-r--r--dev/src/material/templates/partials/languages/kn.html55
-rw-r--r--dev/src/material/templates/partials/languages/ko.html56
-rw-r--r--dev/src/material/templates/partials/languages/ku-IQ.html44
-rw-r--r--dev/src/material/templates/partials/languages/lb.html56
-rw-r--r--dev/src/material/templates/partials/languages/lt.html56
-rw-r--r--dev/src/material/templates/partials/languages/lv.html35
-rw-r--r--dev/src/material/templates/partials/languages/mk.html36
-rw-r--r--dev/src/material/templates/partials/languages/mn.html31
-rw-r--r--dev/src/material/templates/partials/languages/ms.html35
-rw-r--r--dev/src/material/templates/partials/languages/my.html29
-rw-r--r--dev/src/material/templates/partials/languages/nb.html56
-rw-r--r--dev/src/material/templates/partials/languages/nl.html56
-rw-r--r--dev/src/material/templates/partials/languages/nn.html42
-rw-r--r--dev/src/material/templates/partials/languages/pl.html56
-rw-r--r--dev/src/material/templates/partials/languages/pt-BR.html56
-rw-r--r--dev/src/material/templates/partials/languages/pt.html56
-rw-r--r--dev/src/material/templates/partials/languages/ro.html56
-rw-r--r--dev/src/material/templates/partials/languages/ru.html56
-rw-r--r--dev/src/material/templates/partials/languages/sa.html55
-rw-r--r--dev/src/material/templates/partials/languages/sh.html50
-rw-r--r--dev/src/material/templates/partials/languages/si.html31
-rw-r--r--dev/src/material/templates/partials/languages/sk.html23
-rw-r--r--dev/src/material/templates/partials/languages/sl.html56
-rw-r--r--dev/src/material/templates/partials/languages/sr.html37
-rw-r--r--dev/src/material/templates/partials/languages/sv.html56
-rw-r--r--dev/src/material/templates/partials/languages/te.html55
-rw-r--r--dev/src/material/templates/partials/languages/th.html56
-rw-r--r--dev/src/material/templates/partials/languages/tl.html37
-rw-r--r--dev/src/material/templates/partials/languages/tr.html56
-rw-r--r--dev/src/material/templates/partials/languages/uk.html55
-rw-r--r--dev/src/material/templates/partials/languages/ur.html57
-rw-r--r--dev/src/material/templates/partials/languages/uz.html56
-rw-r--r--dev/src/material/templates/partials/languages/vi.html56
-rw-r--r--dev/src/material/templates/partials/languages/zh-Hant.html57
-rw-r--r--dev/src/material/templates/partials/languages/zh-TW.html57
-rw-r--r--dev/src/material/templates/partials/languages/zh.html57
-rw-r--r--dev/src/material/templates/partials/logo.html9
-rw-r--r--dev/src/material/templates/partials/nav-item.html134
-rw-r--r--dev/src/material/templates/partials/nav.html30
-rw-r--r--dev/src/material/templates/partials/pagination.html20
-rw-r--r--dev/src/material/templates/partials/palette.html16
-rw-r--r--dev/src/material/templates/partials/post.html60
-rw-r--r--dev/src/material/templates/partials/progress.html4
-rw-r--r--dev/src/material/templates/partials/search.html42
-rw-r--r--dev/src/material/templates/partials/social.html19
-rw-r--r--dev/src/material/templates/partials/source-file.html20
-rw-r--r--dev/src/material/templates/partials/source.html12
-rw-r--r--dev/src/material/templates/partials/tabs-item.html35
-rw-r--r--dev/src/material/templates/partials/tabs.html13
-rw-r--r--dev/src/material/templates/partials/tags.html26
-rw-r--r--dev/src/material/templates/partials/toc-item.html17
-rw-r--r--dev/src/material/templates/partials/toc.html25
-rw-r--r--dev/src/material/templates/partials/top.html8
-rw-r--r--dev/src/material/templates/redirect.html16
-rw-r--r--dev/src/overrides/assets/javascripts/components/_/index.ts104
-rw-r--r--dev/src/overrides/assets/javascripts/components/iconsearch/_/index.ts94
-rw-r--r--dev/src/overrides/assets/javascripts/components/iconsearch/index.ts25
-rw-r--r--dev/src/overrides/assets/javascripts/components/iconsearch/query/index.ts96
-rw-r--r--dev/src/overrides/assets/javascripts/components/iconsearch/result/index.ts237
-rw-r--r--dev/src/overrides/assets/javascripts/components/index.ts25
-rw-r--r--dev/src/overrides/assets/javascripts/components/sponsorship/index.ts149
-rw-r--r--dev/src/overrides/assets/javascripts/custom.9c11c319.min.js18
-rw-r--r--dev/src/overrides/assets/javascripts/custom.9c11c319.min.js.map7
-rw-r--r--dev/src/overrides/assets/javascripts/custom.ts55
-rw-r--r--dev/src/overrides/assets/javascripts/iconsearch_index.json1
-rw-r--r--dev/src/overrides/assets/javascripts/integrations/analytics/index.ts42
-rw-r--r--dev/src/overrides/assets/javascripts/integrations/index.ts23
-rw-r--r--dev/src/overrides/assets/javascripts/templates/iconsearch/index.tsx95
-rw-r--r--dev/src/overrides/assets/javascripts/templates/index.ts24
-rw-r--r--dev/src/overrides/assets/javascripts/templates/sponsorship/index.tsx67
-rw-r--r--dev/src/overrides/assets/stylesheets/custom.00c04c01.min.css572
-rw-r--r--dev/src/overrides/assets/stylesheets/custom.00c04c01.min.css.map15
-rw-r--r--dev/src/overrides/assets/stylesheets/custom.scss44
-rw-r--r--dev/src/overrides/assets/stylesheets/custom/_typeset.scss294
-rw-r--r--dev/src/overrides/assets/stylesheets/custom/layout/_banner.scss66
-rw-r--r--dev/src/overrides/assets/stylesheets/custom/layout/_hero.scss123
-rw-r--r--dev/src/overrides/assets/stylesheets/custom/layout/_iconsearch.scss136
-rw-r--r--dev/src/overrides/assets/stylesheets/custom/layout/_sponsorship.scss128
-rw-r--r--dev/src/overrides/home.html100
-rw-r--r--dev/src/overrides/hooks/translations.html28
-rw-r--r--dev/src/overrides/main.html60
-rw-r--r--dev/src/templates/404.html27
-rw-r--r--dev/src/templates/assets/javascripts/_/index.ts148
-rw-r--r--dev/src/templates/assets/javascripts/browser/document/index.ts48
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/_/index.ts120
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/focus/index.ts81
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/index.ts27
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/offset/_/index.ts86
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/offset/content/index.ts76
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/offset/index.ts24
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/size/_/index.ts151
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/size/content/index.ts67
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/size/index.ts24
-rw-r--r--dev/src/templates/assets/javascripts/browser/element/visibility/index.ts131
-rw-r--r--dev/src/templates/assets/javascripts/browser/index.ts32
-rw-r--r--dev/src/templates/assets/javascripts/browser/keyboard/index.ts148
-rw-r--r--dev/src/templates/assets/javascripts/browser/location/_/index.ts85
-rw-r--r--dev/src/templates/assets/javascripts/browser/location/hash/index.ts104
-rw-r--r--dev/src/templates/assets/javascripts/browser/location/index.ts24
-rw-r--r--dev/src/templates/assets/javascripts/browser/media/index.ts95
-rw-r--r--dev/src/templates/assets/javascripts/browser/request/index.ts141
-rw-r--r--dev/src/templates/assets/javascripts/browser/script/index.ts70
-rw-r--r--dev/src/templates/assets/javascripts/browser/toggle/index.ts102
-rw-r--r--dev/src/templates/assets/javascripts/browser/viewport/_/index.ts69
-rw-r--r--dev/src/templates/assets/javascripts/browser/viewport/at/index.ts84
-rw-r--r--dev/src/templates/assets/javascripts/browser/viewport/index.ts26
-rw-r--r--dev/src/templates/assets/javascripts/browser/viewport/offset/index.ts78
-rw-r--r--dev/src/templates/assets/javascripts/browser/viewport/size/index.ts71
-rw-r--r--dev/src/templates/assets/javascripts/browser/worker/index.ts112
-rw-r--r--dev/src/templates/assets/javascripts/bundle.94c44541.min.js (renamed from dev/src/material/templates/assets/javascripts/bundle.94c44541.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/bundle.94c44541.min.js.map (renamed from dev/src/material/templates/assets/javascripts/bundle.94c44541.min.js.map)0
-rw-r--r--dev/src/templates/assets/javascripts/bundle.ts316
-rw-r--r--dev/src/templates/assets/javascripts/components/_/index.ts138
-rw-r--r--dev/src/templates/assets/javascripts/components/announce/index.ts110
-rw-r--r--dev/src/templates/assets/javascripts/components/consent/index.ts116
-rw-r--r--dev/src/templates/assets/javascripts/components/content/_/index.ts125
-rw-r--r--dev/src/templates/assets/javascripts/components/content/annotation/_/index.ts272
-rw-r--r--dev/src/templates/assets/javascripts/components/content/annotation/block/index.ts88
-rw-r--r--dev/src/templates/assets/javascripts/components/content/annotation/index.ts25
-rw-r--r--dev/src/templates/assets/javascripts/components/content/annotation/list/index.ts209
-rw-r--r--dev/src/templates/assets/javascripts/components/content/code/_/index.ts238
-rw-r--r--dev/src/templates/assets/javascripts/components/content/code/index.ts23
-rw-r--r--dev/src/templates/assets/javascripts/components/content/details/index.ts138
-rw-r--r--dev/src/templates/assets/javascripts/components/content/index.ts28
-rw-r--r--dev/src/templates/assets/javascripts/components/content/mermaid/index.css430
-rw-r--r--dev/src/templates/assets/javascripts/components/content/mermaid/index.ts133
-rw-r--r--dev/src/templates/assets/javascripts/components/content/table/index.ts70
-rw-r--r--dev/src/templates/assets/javascripts/components/content/tabs/index.ts265
-rw-r--r--dev/src/templates/assets/javascripts/components/dialog/index.ts128
-rw-r--r--dev/src/templates/assets/javascripts/components/header/_/index.ts200
-rw-r--r--dev/src/templates/assets/javascripts/components/header/index.ts24
-rw-r--r--dev/src/templates/assets/javascripts/components/header/title/index.ts144
-rw-r--r--dev/src/templates/assets/javascripts/components/index.ts37
-rw-r--r--dev/src/templates/assets/javascripts/components/main/index.ts125
-rw-r--r--dev/src/templates/assets/javascripts/components/palette/index.ts180
-rw-r--r--dev/src/templates/assets/javascripts/components/progress/index.ts87
-rw-r--r--dev/src/templates/assets/javascripts/components/search/_/index.ts239
-rw-r--r--dev/src/templates/assets/javascripts/components/search/highlight/index.ts115
-rw-r--r--dev/src/templates/assets/javascripts/components/search/index.ts28
-rw-r--r--dev/src/templates/assets/javascripts/components/search/query/index.ts206
-rw-r--r--dev/src/templates/assets/javascripts/components/search/result/index.ts197
-rw-r--r--dev/src/templates/assets/javascripts/components/search/share/index.ts135
-rw-r--r--dev/src/templates/assets/javascripts/components/search/suggest/index.ts154
-rw-r--r--dev/src/templates/assets/javascripts/components/sidebar/index.ts227
-rw-r--r--dev/src/templates/assets/javascripts/components/source/_/index.ts142
-rw-r--r--dev/src/templates/assets/javascripts/components/source/facts/_/index.ts88
-rw-r--r--dev/src/templates/assets/javascripts/components/source/facts/github/index.ts103
-rw-r--r--dev/src/templates/assets/javascripts/components/source/facts/gitlab/index.ts61
-rw-r--r--dev/src/templates/assets/javascripts/components/source/facts/index.ts25
-rw-r--r--dev/src/templates/assets/javascripts/components/source/index.ts24
-rw-r--r--dev/src/templates/assets/javascripts/components/tabs/index.ts144
-rw-r--r--dev/src/templates/assets/javascripts/components/toc/index.ts379
-rw-r--r--dev/src/templates/assets/javascripts/components/top/index.ts184
-rw-r--r--dev/src/templates/assets/javascripts/integrations/clipboard/index.ts99
-rw-r--r--dev/src/templates/assets/javascripts/integrations/index.ts27
-rw-r--r--dev/src/templates/assets/javascripts/integrations/instant/index.ts446
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/_/index.ts332
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/config/index.ts115
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/highlighter/index.ts93
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/index.ts27
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/internal/_/index.ts74
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/internal/extract/index.ts107
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/internal/highlight/index.ts162
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/internal/index.ts26
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/internal/tokenize/index.ts136
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/query/_/index.ts172
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/query/index.ts25
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/query/segment/index.ts81
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/query/transform/index.ts99
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/worker/_/index.ts95
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/worker/index.ts24
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/worker/main/index.ts192
-rw-r--r--dev/src/templates/assets/javascripts/integrations/search/worker/message/index.ts112
-rw-r--r--dev/src/templates/assets/javascripts/integrations/sitemap/index.ts107
-rw-r--r--dev/src/templates/assets/javascripts/integrations/version/index.ts186
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.ar.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.ar.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.da.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.da.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.de.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.de.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.du.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.du.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.es.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.es.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.fi.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.fi.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.fr.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.fr.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.he.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.he.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.hi.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.hi.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.hu.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.hu.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.hy.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.hy.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.it.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.it.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.ja.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.ja.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.jp.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.jp.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.kn.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.kn.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.ko.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.ko.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.multi.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.multi.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.nl.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.nl.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.no.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.no.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.pt.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.pt.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.ro.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.ro.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.ru.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.ru.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.sa.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.sa.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.stemmer.support.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.stemmer.support.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.sv.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.sv.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.ta.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.ta.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.te.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.te.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.th.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.th.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.tr.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.tr.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.vi.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.vi.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/min/lunr.zh.min.js (renamed from dev/src/material/templates/assets/javascripts/lunr/min/lunr.zh.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/tinyseg.js (renamed from dev/src/material/templates/assets/javascripts/lunr/tinyseg.js)0
-rw-r--r--dev/src/templates/assets/javascripts/lunr/wordcut.js (renamed from dev/src/material/templates/assets/javascripts/lunr/wordcut.js)0
-rw-r--r--dev/src/templates/assets/javascripts/patches/indeterminate/index.ts85
-rw-r--r--dev/src/templates/assets/javascripts/patches/index.ts25
-rw-r--r--dev/src/templates/assets/javascripts/patches/scrollfix/index.ts100
-rw-r--r--dev/src/templates/assets/javascripts/patches/scrolllock/index.ts89
-rw-r--r--dev/src/templates/assets/javascripts/polyfills/index.ts96
-rw-r--r--dev/src/templates/assets/javascripts/templates/annotation/index.tsx65
-rw-r--r--dev/src/templates/assets/javascripts/templates/clipboard/index.tsx45
-rw-r--r--dev/src/templates/assets/javascripts/templates/index.ts29
-rw-r--r--dev/src/templates/assets/javascripts/templates/search/index.tsx170
-rw-r--r--dev/src/templates/assets/javascripts/templates/source/index.tsx47
-rw-r--r--dev/src/templates/assets/javascripts/templates/tabbed/index.tsx56
-rw-r--r--dev/src/templates/assets/javascripts/templates/table/index.tsx44
-rw-r--r--dev/src/templates/assets/javascripts/templates/tooltip/index.tsx42
-rw-r--r--dev/src/templates/assets/javascripts/templates/version/index.tsx92
-rw-r--r--dev/src/templates/assets/javascripts/utilities/h/index.ts132
-rw-r--r--dev/src/templates/assets/javascripts/utilities/index.ts24
-rw-r--r--dev/src/templates/assets/javascripts/utilities/round/index.ts50
-rw-r--r--dev/src/templates/assets/javascripts/workers/search.f886a092.min.js (renamed from dev/src/material/templates/assets/javascripts/workers/search.f886a092.min.js)0
-rw-r--r--dev/src/templates/assets/javascripts/workers/search.f886a092.min.js.map (renamed from dev/src/material/templates/assets/javascripts/workers/search.f886a092.min.js.map)0
-rw-r--r--dev/src/templates/assets/javascripts/workers/search.ts23
-rw-r--r--dev/src/templates/assets/stylesheets/_config.scss42
-rw-r--r--dev/src/templates/assets/stylesheets/main.bd3936ea.min.css (renamed from dev/src/material/templates/assets/stylesheets/main.bd3936ea.min.css)0
-rw-r--r--dev/src/templates/assets/stylesheets/main.bd3936ea.min.css.map (renamed from dev/src/material/templates/assets/stylesheets/main.bd3936ea.min.css.map)0
-rw-r--r--dev/src/templates/assets/stylesheets/main.scss86
-rw-r--r--dev/src/templates/assets/stylesheets/main/_colors.scss153
-rw-r--r--dev/src/templates/assets/stylesheets/main/_icons.scss37
-rw-r--r--dev/src/templates/assets/stylesheets/main/_modifiers.scss48
-rw-r--r--dev/src/templates/assets/stylesheets/main/_resets.scss118
-rw-r--r--dev/src/templates/assets/stylesheets/main/_typeset.scss603
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_author.scss86
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_banner.scss68
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_base.scss182
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_clipboard.scss102
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_consent.scss127
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_content.scss97
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_dialog.scss65
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_feedback.scss110
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_footer.scss201
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_form.scss83
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_header.scss270
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_meta.scss67
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_nav.scss761
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_pagination.scss85
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_post.scss196
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_progress.scss53
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_search.scss707
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_select.scss115
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_sidebar.scss209
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_source.scss182
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_status.scss73
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_tabs.scss133
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_tag.scss105
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_tooltip.scss292
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_top.scss83
-rw-r--r--dev/src/templates/assets/stylesheets/main/components/_version.scss150
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/markdown/_admonition.scss195
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/markdown/_footnotes.scss146
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/markdown/_toc.scss92
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss52
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_critic.scss76
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_details.scss121
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_emoji.scss43
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_highlight.scss382
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_keys.scss115
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss400
-rw-r--r--dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss78
-rw-r--r--dev/src/templates/assets/stylesheets/main/integrations/_mermaid.scss67
-rw-r--r--dev/src/templates/assets/stylesheets/palette.356b1318.min.css (renamed from dev/src/material/templates/assets/stylesheets/palette.356b1318.min.css)0
-rw-r--r--dev/src/templates/assets/stylesheets/palette.356b1318.min.css.map (renamed from dev/src/material/templates/assets/stylesheets/palette.356b1318.min.css.map)0
-rw-r--r--dev/src/templates/assets/stylesheets/palette.scss40
-rw-r--r--dev/src/templates/assets/stylesheets/palette/_accent.scss61
-rw-r--r--dev/src/templates/assets/stylesheets/palette/_primary.scss203
-rw-r--r--dev/src/templates/assets/stylesheets/palette/_scheme.scss145
-rw-r--r--dev/src/templates/assets/stylesheets/utilities/_break.scss219
-rw-r--r--dev/src/templates/assets/stylesheets/utilities/_convert.scss79
-rw-r--r--dev/src/templates/base.html251
-rw-r--r--dev/src/templates/blog-post.html70
-rw-r--r--dev/src/templates/blog.html33
-rw-r--r--dev/src/templates/main.html25
-rw-r--r--dev/src/templates/partials/actions.html42
-rw-r--r--dev/src/templates/partials/alternate.html37
-rw-r--r--dev/src/templates/partials/comments.html26
-rw-r--r--dev/src/templates/partials/consent.html49
-rw-r--r--dev/src/templates/partials/content.html41
-rw-r--r--dev/src/templates/partials/copyright.html31
-rw-r--r--dev/src/templates/partials/feedback.html45
-rw-r--r--dev/src/templates/partials/footer.html54
-rw-r--r--dev/src/templates/partials/header.html59
-rw-r--r--dev/src/templates/partials/icons.html30
-rw-r--r--dev/src/templates/partials/integrations/analytics.html45
-rw-r--r--dev/src/templates/partials/integrations/analytics/google.html98
-rw-r--r--dev/src/templates/partials/javascripts/announce.html35
-rw-r--r--dev/src/templates/partials/javascripts/base.html52
-rw-r--r--dev/src/templates/partials/javascripts/consent.html65
-rw-r--r--dev/src/templates/partials/javascripts/content.html41
-rw-r--r--dev/src/templates/partials/javascripts/outdated.html33
-rw-r--r--dev/src/templates/partials/javascripts/palette.html33
-rw-r--r--dev/src/templates/partials/language.html28
-rw-r--r--dev/src/templates/partials/languages/af.html26
-rw-r--r--dev/src/templates/partials/languages/ar.html26
-rw-r--r--dev/src/templates/partials/languages/be.html26
-rw-r--r--dev/src/templates/partials/languages/bg.html26
-rw-r--r--dev/src/templates/partials/languages/bn.html26
-rw-r--r--dev/src/templates/partials/languages/ca.html26
-rw-r--r--dev/src/templates/partials/languages/cs.html26
-rw-r--r--dev/src/templates/partials/languages/da.html26
-rw-r--r--dev/src/templates/partials/languages/de.html26
-rw-r--r--dev/src/templates/partials/languages/el.html26
-rw-r--r--dev/src/templates/partials/languages/en.html26
-rw-r--r--dev/src/templates/partials/languages/eo.html26
-rw-r--r--dev/src/templates/partials/languages/es.html26
-rw-r--r--dev/src/templates/partials/languages/et.html26
-rw-r--r--dev/src/templates/partials/languages/eu.html26
-rw-r--r--dev/src/templates/partials/languages/fa.html26
-rw-r--r--dev/src/templates/partials/languages/fi.html26
-rw-r--r--dev/src/templates/partials/languages/fr.html26
-rw-r--r--dev/src/templates/partials/languages/gl.html26
-rw-r--r--dev/src/templates/partials/languages/he.html26
-rw-r--r--dev/src/templates/partials/languages/hi.html26
-rw-r--r--dev/src/templates/partials/languages/hr.html26
-rw-r--r--dev/src/templates/partials/languages/hu.html26
-rw-r--r--dev/src/templates/partials/languages/hy.html26
-rw-r--r--dev/src/templates/partials/languages/id.html26
-rw-r--r--dev/src/templates/partials/languages/is.html26
-rw-r--r--dev/src/templates/partials/languages/it.html26
-rw-r--r--dev/src/templates/partials/languages/ja.html26
-rw-r--r--dev/src/templates/partials/languages/ka.html26
-rw-r--r--dev/src/templates/partials/languages/kn.html26
-rw-r--r--dev/src/templates/partials/languages/ko.html26
-rw-r--r--dev/src/templates/partials/languages/ku-IQ.html26
-rw-r--r--dev/src/templates/partials/languages/lb.html26
-rw-r--r--dev/src/templates/partials/languages/lt.html26
-rw-r--r--dev/src/templates/partials/languages/lv.html26
-rw-r--r--dev/src/templates/partials/languages/mk.html26
-rw-r--r--dev/src/templates/partials/languages/mn.html26
-rw-r--r--dev/src/templates/partials/languages/ms.html26
-rw-r--r--dev/src/templates/partials/languages/my.html26
-rw-r--r--dev/src/templates/partials/languages/nb.html26
-rw-r--r--dev/src/templates/partials/languages/nl.html26
-rw-r--r--dev/src/templates/partials/languages/nn.html26
-rw-r--r--dev/src/templates/partials/languages/pl.html26
-rw-r--r--dev/src/templates/partials/languages/pt-BR.html26
-rw-r--r--dev/src/templates/partials/languages/pt.html26
-rw-r--r--dev/src/templates/partials/languages/ro.html26
-rw-r--r--dev/src/templates/partials/languages/ru.html26
-rw-r--r--dev/src/templates/partials/languages/sa.html26
-rw-r--r--dev/src/templates/partials/languages/sh.html26
-rw-r--r--dev/src/templates/partials/languages/si.html26
-rw-r--r--dev/src/templates/partials/languages/sk.html26
-rw-r--r--dev/src/templates/partials/languages/sl.html26
-rw-r--r--dev/src/templates/partials/languages/sr.html26
-rw-r--r--dev/src/templates/partials/languages/sv.html26
-rw-r--r--dev/src/templates/partials/languages/te.html26
-rw-r--r--dev/src/templates/partials/languages/th.html26
-rw-r--r--dev/src/templates/partials/languages/tl.html26
-rw-r--r--dev/src/templates/partials/languages/tr.html26
-rw-r--r--dev/src/templates/partials/languages/uk.html26
-rw-r--r--dev/src/templates/partials/languages/ur.html26
-rw-r--r--dev/src/templates/partials/languages/uz.html26
-rw-r--r--dev/src/templates/partials/languages/vi.html26
-rw-r--r--dev/src/templates/partials/languages/zh-Hant.html26
-rw-r--r--dev/src/templates/partials/languages/zh-TW.html26
-rw-r--r--dev/src/templates/partials/languages/zh.html26
-rw-r--r--dev/src/templates/partials/logo.html28
-rw-r--r--dev/src/templates/partials/nav-item.html137
-rw-r--r--dev/src/templates/partials/nav.html49
-rw-r--r--dev/src/templates/partials/pagination.html28
-rw-r--r--dev/src/templates/partials/palette.html49
-rw-r--r--dev/src/templates/partials/post.html49
-rw-r--r--dev/src/templates/partials/progress.html26
-rw-r--r--dev/src/templates/partials/search.html83
-rw-r--r--dev/src/templates/partials/social.html37
-rw-r--r--dev/src/templates/partials/source-file.html34
-rw-r--r--dev/src/templates/partials/source.html33
-rw-r--r--dev/src/templates/partials/tabs-item.html42
-rw-r--r--dev/src/templates/partials/tabs.html33
-rw-r--r--dev/src/templates/partials/tags.html32
-rw-r--r--dev/src/templates/partials/toc-item.html28
-rw-r--r--dev/src/templates/partials/toc.html37
-rw-r--r--dev/src/templates/partials/top.html26
-rw-r--r--dev/src/templates/redirect.html39
548 files changed, 1087 insertions, 37622 deletions
diff --git a/dev/404.html b/dev/404.html
index 37f6425a..18930347 100644
--- a/dev/404.html
+++ b/dev/404.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link rel=icon href=/images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>infini 核心文档</title><link rel=stylesheet href=/assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=/assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=/css/timeago.css><link rel=stylesheet href=/assets/_mkdocstrings.css><link rel=stylesheet href=/stylesheets/extra.css><script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=/assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=/. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=/Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=/RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=/Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=/CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=/API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=/Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=/blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=/changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=/Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=/RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=/Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=/Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=/Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=/Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=/Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=/Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=/Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=/Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=/Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=/Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=/CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=/API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=/Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=/Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=/blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1>404 - Not found</h1> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "/", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "/assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=/assets/javascripts/bundle.d7c377c4.min.js></script> <script src=/js/timeago.min.js></script> <script src=/js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=/assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link rel=icon href=/images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>infini 核心文档</title><link rel=stylesheet href=/assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=/assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=/css/timeago.css><link rel=stylesheet href=/assets/_mkdocstrings.css><link rel=stylesheet href=/stylesheets/extra.css><script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=/assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=..// > <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=/. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=/Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=/RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=/Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=/CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=/API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=/Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=/blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=/changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=/Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=/RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=/RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=/Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=/Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=/Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=/Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=/Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=/Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=/Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=/Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=/Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=/Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=/CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=/API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=/Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=/Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=/blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1>404 - Not found</h1> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "/", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "/assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=/assets/javascripts/bundle.d7c377c4.min.js></script> <script src=/js/timeago.min.js></script> <script src=/js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=/assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/API/index.html b/dev/API/index.html
index 6012abf4..e268f614 100644
--- a/dev/API/index.html
+++ b/dev/API/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../CLI/ rel=prev><link href=../Help/TermList/ rel=next><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>API Reference - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> API Reference </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=true> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/API/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/API/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>API Reference</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../CLI/ class="md-footer__link md-footer__link--prev" aria-label="上一页: CLI Reference"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> CLI Reference </div> </div> </a> <a href=../Help/TermList/ class="md-footer__link md-footer__link--next" aria-label="下一页: 术语表一览"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 术语表一览 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../CLI/ rel=prev><link href=../Help/TermList/ rel=next><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>API Reference - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> API Reference </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=true> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/API/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/API/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>API Reference</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../CLI/ class="md-footer__link md-footer__link--prev" aria-label="上一页: CLI Reference"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> CLI Reference </div> </div> </a> <a href=../Help/TermList/ class="md-footer__link md-footer__link--next" aria-label="下一页: 术语表一览"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 术语表一览 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/CLI/index.html b/dev/CLI/index.html
index 5792bbb3..38b7a8f7 100644
--- a/dev/CLI/index.html
+++ b/dev/CLI/index.html
@@ -1,24 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../Standard/Term/PlayerCard/ rel=prev><link href=../API/ rel=next><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>CLI Reference - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> CLI Reference </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=true> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/CLI/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/CLI/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>CLI Reference</h1> <p>```python exec="1" idprefix="" import argparse import re from infini import Cli</p> <p>parser = Cli().parser</p> <p>MONOSPACED = ("pyproject.toml", "pdm.lock", ".pdm-python", ":pre", ":post", ":all")</p> <p>def clean_help(help: str) -&gt; str: # Make dunders monospaced avoiding italic markdown rendering help = re.sub(r"<strong>([\w\d_]+)</strong>", r"<code>__\1__</code>", help) # Make env vars monospaced help = re.sub(r"env var: ([A-Z_]+)", r"env var: <code>\1</code>", help) for monospaced in MONOSPACED: help = re.sub(rf"\s(['\"]?{monospaced}['\"]?)", f"<code>{monospaced}</code>", help) return help</p> <p>def render_parser( parser: argparse.ArgumentParser, title: str, heading_level: int = 2 ) -&gt; str: """Render the parser help documents as a string.""" result = [f"{'#' * heading_level} {title}\n"] if parser.description and title != "infini": result.append("&gt; " + parser.description + "\n")</p> <div class="language-text highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal> 1</span>
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../Standard/Term/PlayerCard/ rel=prev><link href=../API/ rel=next><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>CLI Reference - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> CLI Reference </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=true> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/CLI/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/CLI/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>CLI Reference</h1> <p>```python exec="1" idprefix="" import argparse import re from infini import Cli</p> <p>parser = Cli().parser</p> <p>MONOSPACED = ("pyproject.toml", "pdm.lock", ".pdm-python", ":pre", ":post", ":all")</p> <p>def clean_help(help: str) -&gt; str: # Make dunders monospaced avoiding italic markdown rendering help = re.sub(r"<strong>([\w\d_]+)</strong>", r"<code>__\1__</code>", help) # Make env vars monospaced help = re.sub(r"env var: ([A-Z_]+)", r"env var: <code>\1</code>", help) for monospaced in MONOSPACED: help = re.sub(rf"\s(['\"]?{monospaced}['\"]?)", f"<code>{monospaced}</code>", help) return help</p> <p>def render_parser( parser: argparse.ArgumentParser, title: str, heading_level: int = 2 ) -&gt; str: """Render the parser help documents as a string.""" result = [f"{'#' * heading_level} {title}\n"] if parser.description and title != "infini": result.append("&gt; " + parser.description + "\n")</p> <div class="language-text highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal> 1</span>
<span class=normal> 2</span>
<span class=normal> 3</span>
<span class=normal> 4</span>
@@ -79,4 +59,4 @@
result.append(&quot;&quot;)
return &quot;\n&quot;.join(result)
-</code></pre></div></td></tr></table></div> <p>print(render_parser(parser, "infini")) ```</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../Standard/Term/PlayerCard/ class="md-footer__link md-footer__link--prev" aria-label="上一页: PlayerCard 人物卡"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> PlayerCard 人物卡 </div> </div> </a> <a href=../API/ class="md-footer__link md-footer__link--next" aria-label="下一页: API Reference"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> API Reference </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+</code></pre></div></td></tr></table></div> <p>print(render_parser(parser, "infini")) ```</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../Standard/Term/PlayerCard/ class="md-footer__link md-footer__link--prev" aria-label="上一页: PlayerCard 人物卡"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> PlayerCard 人物卡 </div> </div> </a> <a href=../API/ class="md-footer__link md-footer__link--next" aria-label="下一页: API Reference"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> API Reference </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Core/index.html b/dev/Core/index.html
index 29f8b8e1..ec7663fa 100644
--- a/dev/Core/index.html
+++ b/dev/Core/index.html
@@ -1,24 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link rel=prev href=..><link href=../RulePackage/intro/ rel=next><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>核心概览 - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#getting class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 核心概览 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation hidden> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=true> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#getting class=md-nav__link> <span class=md-ellipsis> 🎁 Getting </span> </a> </li> <li class=md-nav__item> <a href=#license class=md-nav__link> <span class=md-ellipsis> 📄 License </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Core/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Core/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1 align=right>infini'水系核心</h1> <p align=right> <a aria-label="Join the community on GitHub" href=https://github.com/HydroRoll-Team/hydroroll/discussions target=blank> <img alt src="https://img.shields.io/badge/Join%20the%20community-blueviolet.svg?logo=data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/CgoK/woKCv8GBgb/BgYG/woKCv8KCgr/AgIC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BgYG/0ZGRv9MTEz/JiYm/ygoKP9MTEz/RkZG/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9ycnL/Li4u/1xcXP9eXl7/Li4u/3Jycv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP88PDz/cnJy/05OTv9OTk7/UFBQ/05OTv9wcHD/Pj4+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Kioq/3Jycv9cXFz/TExM/05OTv9aWlr/cHBw/yoqKv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Pj4+/zg4OP+AgID/Pj4+/2ZmZv9oaGj/PDw8/4CAgP86Ojr/Pj4+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/ywsLP9iYmL/enp6/zIyMv90dHT/dHR0/zAwMP98fHz/YmJi/ywsLP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9SUlL/PDw8/3Jycv9CQkL/UlJS/1RUVP9CQkL/cnJy/zw8PP9SUlL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VFRU/yIiIv9aWlr/PDw8/zw8PP8+Pj7/PDw8/1hYWP8iIiL/VFRU/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zQ0NP9CQkL/ZmZm/yIiIv9WVlb/WFhY/yIiIv9mZmb/QkJC/zY2Nv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9QUFD/BgYG/0RERP9KSkr/JCQk/yYmJv9KSkr/RERE/wgICP9QUFD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/CgoK/wICAv8KCgr/CgoK/wYGBv8GBgb/CgoK/woKCv8CAgL/CgoK/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==&labelColor=000000&logoWidth=20&logoColor=white"> </a> <a href=https://pypi.org/project/infini> <img src="https://img.shields.io/pypi/v/infini?labelColor=000000"> </a> <a href=https://github.com/HydroRoll-Team/infini/blob/master/LICENSE> <img alt src="https://img.shields.io/pypi/l/infini.svg?labelColor=000000&color="> </a> </p> <h2 id=getting>🎁 Getting<a class=headerlink href=#getting title="Permanent link">⚓</a></h2> <ol> <li>安装库</li> </ol> <p>在命令行输入。</p> <div class="language-shell highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-1>1</a></span>
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link rel=prev href=..><link href=../RulePackage/intro/ rel=next><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>核心概览 - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#getting class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 核心概览 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation hidden> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=true> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#getting class=md-nav__link> <span class=md-ellipsis> 🎁 Getting </span> </a> </li> <li class=md-nav__item> <a href=#license class=md-nav__link> <span class=md-ellipsis> 📄 License </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Core/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Core/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1 align=right>infini'水系核心</h1> <p align=right> <a aria-label="Join the community on GitHub" href=https://github.com/HydroRoll-Team/hydroroll/discussions target=blank> <img alt src="https://img.shields.io/badge/Join%20the%20community-blueviolet.svg?logo=data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/CgoK/woKCv8GBgb/BgYG/woKCv8KCgr/AgIC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BgYG/0ZGRv9MTEz/JiYm/ygoKP9MTEz/RkZG/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9ycnL/Li4u/1xcXP9eXl7/Li4u/3Jycv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP88PDz/cnJy/05OTv9OTk7/UFBQ/05OTv9wcHD/Pj4+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Kioq/3Jycv9cXFz/TExM/05OTv9aWlr/cHBw/yoqKv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Pj4+/zg4OP+AgID/Pj4+/2ZmZv9oaGj/PDw8/4CAgP86Ojr/Pj4+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/ywsLP9iYmL/enp6/zIyMv90dHT/dHR0/zAwMP98fHz/YmJi/ywsLP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9SUlL/PDw8/3Jycv9CQkL/UlJS/1RUVP9CQkL/cnJy/zw8PP9SUlL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VFRU/yIiIv9aWlr/PDw8/zw8PP8+Pj7/PDw8/1hYWP8iIiL/VFRU/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zQ0NP9CQkL/ZmZm/yIiIv9WVlb/WFhY/yIiIv9mZmb/QkJC/zY2Nv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9QUFD/BgYG/0RERP9KSkr/JCQk/yYmJv9KSkr/RERE/wgICP9QUFD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/CgoK/wICAv8KCgr/CgoK/wYGBv8GBgb/CgoK/woKCv8CAgL/CgoK/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==&labelColor=000000&logoWidth=20&logoColor=white"> </a> <a href=https://pypi.org/project/infini> <img src="https://img.shields.io/pypi/v/infini?labelColor=000000"> </a> <a href=https://github.com/HydroRoll-Team/infini/blob/master/LICENSE> <img alt src="https://img.shields.io/pypi/l/infini.svg?labelColor=000000&color="> </a> </p> <h2 id=getting>🎁 Getting<a class=headerlink href=#getting title="Permanent link">⚓</a></h2> <ol> <li>安装库</li> </ol> <p>在命令行输入。</p> <div class="language-shell highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-1>1</a></span>
<span class=normal><a href=#__codelineno-0-2>2</a></span>
<span class=normal><a href=#__codelineno-0-3>3</a></span>
<span class=normal><a href=#__codelineno-0-4>4</a></span>
@@ -39,4 +19,4 @@
</span><span id=__span-2-2><a id=__codelineno-2-2 name=__codelineno-2-2></a>
</span><span id=__span-2-3><a id=__codelineno-2-3 name=__codelineno-2-3></a><span class=k>class</span> <span class=nc>Myrule</span><span class=p>(</span><span class=n>Rule</span><span class=p>):</span>
</span><span id=__span-2-4><a id=__codelineno-2-4 name=__codelineno-2-4></a><span class=w> </span><span class=sd>&quot;&quot;&quot;自设规则包,继承 Rule 基类&quot;&quot;&quot;</span>
-</span></code></pre></div></td></tr></table></div> <ol> <li>合理修改你的 <code>config.toml</code> 配置文件,完成注册!</li> </ol> <h2 id=license>📄 License<a class=headerlink href=#license title="Permanent link">⚓</a></h2> <p><a href=https://github.com/HydroRoll-Team/infini/blob/master/LICENSE>MIT</a> © 2023-PRESENT <a href=https://github.com/HsiangNianian>简律纯</a></p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=.. class="md-footer__link md-footer__link--prev" aria-label="上一页: 主页"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 主页 </div> </div> </a> <a href=../RulePackage/intro/ class="md-footer__link md-footer__link--next" aria-label="下一页: 概述"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 概述 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+</span></code></pre></div></td></tr></table></div> <ol> <li>合理修改你的 <code>config.toml</code> 配置文件,完成注册!</li> </ol> <h2 id=license>📄 License<a class=headerlink href=#license title="Permanent link">⚓</a></h2> <p><a href=https://github.com/HydroRoll-Team/infini/blob/master/LICENSE>MIT</a> © 2023-PRESENT <a href=https://github.com/HsiangNianian>简律纯</a></p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=.. class="md-footer__link md-footer__link--prev" aria-label="上一页: 主页"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 主页 </div> </div> </a> <a href=../RulePackage/intro/ class="md-footer__link md-footer__link--next" aria-label="下一页: 概述"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 概述 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Help/PythonSkill/index.html b/dev/Help/PythonSkill/index.html
index 5cb17d52..c827cc24 100644
--- a/dev/Help/PythonSkill/index.html
+++ b/dev/Help/PythonSkill/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../TermList/ rel=prev><link href=../emoji/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Python 技巧 - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Python 技巧 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7 checked> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=true> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Help/PythonSkill.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Help/PythonSkill.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>Python 技巧</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../TermList/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 术语表一览"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 术语表一览 </div> </div> </a> <a href=../emoji/ class="md-footer__link md-footer__link--next" aria-label="下一页: 图标、图例、注释说明"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 图标、图例、注释说明 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../TermList/ rel=prev><link href=../emoji/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Python 技巧 - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Python 技巧 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7 checked> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=true> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Help/PythonSkill.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Help/PythonSkill.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>Python 技巧</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../TermList/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 术语表一览"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 术语表一览 </div> </div> </a> <a href=../emoji/ class="md-footer__link md-footer__link--next" aria-label="下一页: 图标、图例、注释说明"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 图标、图例、注释说明 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Help/TermList/index.html b/dev/Help/TermList/index.html
index 2448d588..a71d5e29 100644
--- a/dev/Help/TermList/index.html
+++ b/dev/Help/TermList/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../API/ rel=prev><link href=../PythonSkill/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>术语表一览 - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 术语表一览 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7 checked> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=true> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> 术语表一览 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 术语表一览 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 移步正式术语 </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 移步正式术语 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Help/TermList.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Help/TermList.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>术语表一览</h1> <h3 id=_1><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.42L5.83 13H21V7h-2Z"/></svg></span><code>移步正式术语</code><a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../API/ class="md-footer__link md-footer__link--prev" aria-label="上一页: API Reference"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> API Reference </div> </div> </a> <a href=../PythonSkill/ class="md-footer__link md-footer__link--next" aria-label="下一页: Python 技巧"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> Python 技巧 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../API/ rel=prev><link href=../PythonSkill/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>术语表一览 - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 术语表一览 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7 checked> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=true> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> 术语表一览 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 术语表一览 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 移步正式术语 </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 移步正式术语 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Help/TermList.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Help/TermList.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>术语表一览</h1> <h3 id=_1><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.42L5.83 13H21V7h-2Z"/></svg></span><code>移步正式术语</code><a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../API/ class="md-footer__link md-footer__link--prev" aria-label="上一页: API Reference"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> API Reference </div> </div> </a> <a href=../PythonSkill/ class="md-footer__link md-footer__link--next" aria-label="下一页: Python 技巧"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> Python 技巧 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Help/emoji/index.html b/dev/Help/emoji/index.html
index a5bbe422..75fb43a6 100644
--- a/dev/Help/emoji/index.html
+++ b/dev/Help/emoji/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../PythonSkill/ rel=prev><link href=../../blog/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>图标、注释说明 - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 图标、注释说明 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7 checked> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=true> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> 图标、图例、注释说明 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 目录树、侧边栏图标 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 抽象概念 </span> </a> </li> <li class=md-nav__item> <a href=#_3 class=md-nav__link> <span class=md-ellipsis> 注释说明 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 目录树、侧边栏图标 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 抽象概念 </span> </a> </li> <li class=md-nav__item> <a href=#_3 class=md-nav__link> <span class=md-ellipsis> 注释说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Help/emoji.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Help/emoji.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>图标、图例、注释说明</h1> <h3 id=_1>目录树、侧边栏图标<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>这些图标将会出现在页面左侧的 <code>navigation</code> 与文章右侧的 <code>toc</code> 当中。</p> <div class="tabbed-set tabbed-alternate" data-tabs=1:4><input checked=checked id=_1-已被废弃 name=__tabbed_1 type=radio><input id=_1-最近添加 name=__tabbed_1 type=radio><input id=_1-实验功能 name=__tabbed_1 type=radio><input id=_1-扩展特性 name=__tabbed_1 type=radio><div class=tabbed-labels><label for=_1-已被废弃><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3H9m0 5h2v9H9V8m4 0h2v9h-2V8Z"/></svg></span><code>已被废弃</code></label><label for=_1-最近添加><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="m23 12-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68L23 12m-10 5h-2v-2h2v2m0-4h-2V7h2v6Z"/></svg></span><code>最近添加</code></label><label for=_1-实验功能><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M7 2v2h1v14a4 4 0 0 0 4 4 4 4 0 0 0 4-4V4h1V2H7m4 14c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m2-4c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m1-5h-4V4h4v3Z"/></svg></span><code>实验功能</code></label><label for=_1-扩展特性><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M16 7V3h-2v4h-4V3H8v4C7 7 6 8 6 9v5.5L9.5 18v3h5v-3l3.5-3.5V9c0-1-1-2-2-2m0 6.67-2.91 2.92-.42.41h-1.34l-.41-.41L8 13.67V9.09c0-.03.06-.09.09-.09h7.83c.03 0 .08.06.08.09v4.58Z"/></svg></span><code>扩展特性</code></label></div> <div class=tabbed-content> <div class=tabbed-block> <p>在 <code>release</code> 版本中 <mark>不推荐使用</mark> 但是 <mark>仍然有效</mark> 的功能、特性。并且在 <code>latest</code> 版本中已经完全废弃<sup id=fnref:1><a class=footnote-ref href=#fn:1>1</a></sup>。</p> </div> <div class=tabbed-block> <p>在上一个 <code>release</code> 版本作为<a href><code>实验功能</code></a>或作为<a href><code>扩展特性</code></a>但是核心本体并未支持的功能、特性,于 <code>latest</code> 版本被引入。</p> </div> <div class=tabbed-block> <p>存在于当前 <code>dev</code> 版本中但是未在 <code>latest</code> 版本中加入的功能、特性。</p> </div> <div class=tabbed-block> <p>在支持 <code>latest</code> 或 <code>dev</code> 或 <del>特定</del> <code>release</code> 版本的插件扩展中存在此特性的可行性方案。</p> </div> </div> </div> <h3 id=_2>抽象概念<a class=headerlink href=#_2 title="Permanent link">⚓</a></h3> <p>这些图标会出现在文章内容中作为抽象概念的具体表达,用于迁移记忆。 </p> <p>以下是图标应用举例:</p> <ul> <li><strong><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12.076.066 8.883 3.28H3.348v5.434L0 12.01l3.349 3.298v5.39h5.374l3.285 3.236 3.285-3.236h5.43v-5.374L24 12.026l-3.232-3.252V3.321H15.31zm0 .749 2.49 2.506h-1.69v6.441l-.8.805-.81-.815V3.28H9.627zm-8.2 2.991h4.483L6.485 5.692l4.253 4.279v.654H9.94L5.674 6.423l-1.798 1.77zm5.227 0h1.635v5.415l-3.509-3.53zm4.302.043h1.687l1.83 1.842-3.517 3.539zm2.431 0h4.404v4.394l-1.83-1.842-4.241 4.267h-.764v-.69l4.261-4.287zm2.574 3.3 1.83 1.843v1.676h-5.327zm-12.735.013 3.515 3.462H3.876v-1.69zM3.348 9.454v1.697h6.377l.871.858-.782.77H3.35v1.786L.753 12.01zm17.42.068 2.488 2.503-2.533 2.55v-1.796h-6.41l-.75-.754.825-.83h6.38zm-9.502.978.81.815.186-.188.614-.618v.686h.768l-.825.83.75.754h-.719v.808l-.842-.83-.741.73v-.707h-.7l.781-.77-.188-.186-.682-.672h.788zm-7.39 2.807h5.402l-3.603 3.55-1.798-1.772zm6.154 0h.708v.7l-4.404 4.338 1.852 1.824h-4.31v-4.342l1.798 1.77zm3.348 0h.715l4.317 4.343.186-.187 1.599-1.61v4.316h-4.366l1.853-1.825-.188-.185-4.116-4.054zm1.46 0h5.357v1.798l-1.785 1.796zm-2.83.191.842.829v6.37h1.691l-2.532 2.495-2.533-2.495h1.79V14.23zm-1.27 1.251v5.42H8.939l-1.852-1.823zm2.64.097 3.552 3.499-1.853 1.825h-1.7z"/></svg></span>[<code>时代</code>]</strong>: <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>1899</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>2100</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>美好年代</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>WW II</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>2011-2021</code></a></li> <li><strong><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M6.155 12.058c0 .503.095.967.285 1.392.19.424.447.793.771 1.106.324.313.699.56 1.123.738.437.168.895.252 1.375.252.481 0 .934-.084 1.359-.252a3.578 3.578 0 0 0 1.14-.738 3.37 3.37 0 0 0 1.073-2.498 3.371 3.371 0 0 0-1.073-2.498 3.356 3.356 0 0 0-1.14-.721 3.463 3.463 0 0 0-1.359-.269c-.48 0-.938.09-1.374.269-.425.167-.8.408-1.124.72a3.52 3.52 0 0 0-.771 1.107 3.37 3.37 0 0 0-.285 1.392Zm-3.437 0c0-.939.173-1.81.52-2.616a6.524 6.524 0 0 1 1.441-2.13 6.503 6.503 0 0 1 2.197-1.408c.86-.346 1.805-.52 2.833-.52 1.018 0 1.957.174 2.817.52a6.47 6.47 0 0 1 2.213 1.409 6.542 6.542 0 0 1 1.979 4.745c0 .939-.173 1.816-.52 2.632a6.45 6.45 0 0 1-1.459 2.113 6.678 6.678 0 0 1-2.213 1.425c-.86.335-1.8.503-2.817.503-1.028 0-1.973-.168-2.833-.503a6.717 6.717 0 0 1-2.197-1.425 6.572 6.572 0 0 1-1.442-2.113 6.663 6.663 0 0 1-.52-2.632ZM10.144.008a11.86 11.86 0 0 0-7.805 2.569l1.523.857C5.67 2.1 7.955 1.53 10.144 1.625V.007Zm8.09 3.616C16.331 1.625 13.856.388 11.191.102V1.72a10.725 10.725 0 0 1 5.901 3.046l1.142-1.142Zm3.427 7.805c-.095-2.475-1.047-4.95-2.665-7.043l-1.142 1.142c1.332 1.808 2.094 3.807 2.189 5.9h1.618Zm-2.665 8.185c1.618-2.094 2.57-4.568 2.665-7.043h-1.618c-.095 2.094-.857 4.093-2.19 5.901l1.143 1.142Zm-7.805 4.284c2.57-.286 5.14-1.523 7.043-3.522l-1.142-1.142c-1.618 1.713-3.712 2.76-5.901 3.046v1.618Zm-8.852-2.475a11.867 11.867 0 0 0 7.805 2.57v-1.618c-2.19.095-4.378-.476-6.282-1.809l-1.523.857Z"/></svg></span>[<code>风格</code>]</strong>: <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>中世纪</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>科幻</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>悬疑</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>心理恐怖</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>秘密剧情</code></a></li> <li><strong><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm0 .57C18.315.57 23.43 5.685 23.43 12c0 6.31-5.115 11.43-11.43 11.43C5.69 23.43.57 18.314.57 12 .57 5.69 5.69.57 12 .57zm0 .234c-.1 0-.183.06-.218.147l-.492 1.551A9.523 9.523 0 0 0 2.475 12c0 1.48.337 2.885.94 4.136l-1.1 1.206a.241.241 0 0 0-.015.262.246.246 0 0 0 .238.115l1.592-.353a9.52 9.52 0 0 0 7.87 4.16c3.27 0 6.16-1.652 7.874-4.16l1.592.353a.236.236 0 0 0 .23-.123.234.234 0 0 0-.016-.262l-1.1-1.198A9.431 9.431 0 0 0 21.526 12a9.523 9.523 0 0 0-8.815-9.498L12.218.947A.237.237 0 0 0 12 .804zm-.003.25c.024 0 .048.02.056.043l1.02 3.354a1.2 1.2 0 0 0-.48.957c0 .389.19.734.48.952h-.004c.436.326.718.846.718 1.429v1.12l4.326-2.497.476.825-4.802 2.77v.965l.834.48 4.802-2.774.476.825-4.326 2.5.972.56c.508.294.818.798.882 1.338v-.004a1.193 1.193 0 0 0 1.655.953l2.393 2.56c.02.02.02.047.008.07-.016.025-.04.033-.068.029l-3.413-.794a1.193 1.193 0 0 0-1.65-.957l.003-.004c-.5.215-1.091.199-1.6-.095l-.968-.56v4.994h-.952v-5.545l-.834-.48-.833.48v5.545h-.953V15.1l-.972.555c-.508.294-1.1.31-1.6.096l.004.004a1.193 1.193 0 0 0-1.651.957l-3.413.793a.054.054 0 0 1-.063-.028c-.016-.02-.012-.047.008-.067l2.397-2.56c.333.143.73.135 1.067-.064.338-.194.544-.528.588-.889v.004a1.78 1.78 0 0 1 .88-1.337l.97-.56-4.327-2.496.477-.826 4.802 2.774.833-.484v-.964l-4.802-2.77.476-.826 4.326 2.496V7.79c0-.583.282-1.103.719-1.429h-.004c.29-.214.476-.56.476-.952 0-.393-.19-.738-.48-.957l1.02-3.353c.008-.028.031-.044.051-.044zm.004 5.902a.833.833 0 0 0-.833.833v1.67L12 9.94l.833-.48V7.789A.833.833 0 0 0 12 6.956zm0 4.084-.833.48v.964l.833.476.833-.48v-.96zm-2.62 1.516-1.444.833a.833.833 0 0 0-.306 1.14.822.822 0 0 0 .723.412.83.83 0 0 0 .416-.111l1.445-.834v-.96zm5.243 0-.833.48V14l1.445.834a.834.834 0 0 0 .833-1.445z"/></svg></span>[<code>地点</code>]</strong>: <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>卢浮宫</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>凡尔赛</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>君临城</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>火星</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>冬木</code></a></li> </ul> <hr> <ul> <li><strong><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M24 12 12 0 0 12l12 12 12-12zM12 3.197l4.418 4.418c-1.445-.386-2.93-.586-4.418-.586s-2.974.199-4.418.588L12 3.196zM8.069 16.87c1.19-.658 2.534-1.008 3.931-1.008s2.741.35 3.931 1.008L12 20.804 8.069 16.87zm9.509-1.647c-1.697-1.08-3.636-1.622-5.578-1.622s-3.881.542-5.578 1.622l-3.103-3.101C5.822 10.284 8.834 9.29 12 9.29s6.178.994 8.681 2.832l-3.103 3.101z"/></svg></span>[<code>人物背景</code>]</strong>: <code>生于银河纪元11988年,卒于银河纪元12069年。他的卒年后来被确定为基地纪元元年。他是一位年轻有为的数学家,中等个子,长相俊朗。他曾经担任川陀大学数学系主任,是第一帝国克里昂一世皇帝的御前首相,川陀大学心理史学系荣誉教授,心理史学研究计划主持人、银河百科全书执行编辑。他是心理史学创始人之一(另一位是雨果·阿玛瑞尔),同时也是基地创始人。他还被认为是第二基地第一任首席发言者,后来也成了基地的传奇英雄。</code></li> </ul> <h3 id=_3>注释说明<a class=headerlink href=#_3 title="Permanent link">⚓</a></h3> <ul> <li><a href=#><code>重定向至正式术语</code></a>: 常与<span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3H9m0 5h2v9H9V8m4 0h2v9h-2V8Z"/></svg></span>一起为 <abbr title=就是即将或已经弃用的功能、特性页面。>过期页面</abbr> 重定向内容索引。</li> </ul> <div class=footnote> <hr> <ol> <li id=fn:1> <p>具体还要看下一个大版本的文档如何编写。&#160;<a class=footnote-backref href=#fnref:1 title="Jump back to footnote 1 in the text">&#8617;</a></p> </li> </ol> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../PythonSkill/ class="md-footer__link md-footer__link--prev" aria-label="上一页: Python 技巧"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> Python 技巧 </div> </div> </a> <a href=../../blog/ class="md-footer__link md-footer__link--next" aria-label="下一页: Blog"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> Blog </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../PythonSkill/ rel=prev><link href=../../blog/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>图标、注释说明 - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 图标、注释说明 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7 checked> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=true> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> 图标、图例、注释说明 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 目录树、侧边栏图标 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 抽象概念 </span> </a> </li> <li class=md-nav__item> <a href=#_3 class=md-nav__link> <span class=md-ellipsis> 注释说明 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 目录树、侧边栏图标 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 抽象概念 </span> </a> </li> <li class=md-nav__item> <a href=#_3 class=md-nav__link> <span class=md-ellipsis> 注释说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Help/emoji.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Help/emoji.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>图标、图例、注释说明</h1> <h3 id=_1>目录树、侧边栏图标<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>这些图标将会出现在页面左侧的 <code>navigation</code> 与文章右侧的 <code>toc</code> 当中。</p> <div class="tabbed-set tabbed-alternate" data-tabs=1:4><input checked=checked id=_1-已被废弃 name=__tabbed_1 type=radio><input id=_1-最近添加 name=__tabbed_1 type=radio><input id=_1-实验功能 name=__tabbed_1 type=radio><input id=_1-扩展特性 name=__tabbed_1 type=radio><div class=tabbed-labels><label for=_1-已被废弃><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3H9m0 5h2v9H9V8m4 0h2v9h-2V8Z"/></svg></span><code>已被废弃</code></label><label for=_1-最近添加><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="m23 12-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68L23 12m-10 5h-2v-2h2v2m0-4h-2V7h2v6Z"/></svg></span><code>最近添加</code></label><label for=_1-实验功能><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M7 2v2h1v14a4 4 0 0 0 4 4 4 4 0 0 0 4-4V4h1V2H7m4 14c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m2-4c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1m1-5h-4V4h4v3Z"/></svg></span><code>实验功能</code></label><label for=_1-扩展特性><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M16 7V3h-2v4h-4V3H8v4C7 7 6 8 6 9v5.5L9.5 18v3h5v-3l3.5-3.5V9c0-1-1-2-2-2m0 6.67-2.91 2.92-.42.41h-1.34l-.41-.41L8 13.67V9.09c0-.03.06-.09.09-.09h7.83c.03 0 .08.06.08.09v4.58Z"/></svg></span><code>扩展特性</code></label></div> <div class=tabbed-content> <div class=tabbed-block> <p>在 <code>release</code> 版本中 <mark>不推荐使用</mark> 但是 <mark>仍然有效</mark> 的功能、特性。并且在 <code>latest</code> 版本中已经完全废弃<sup id=fnref:1><a class=footnote-ref href=#fn:1>1</a></sup>。</p> </div> <div class=tabbed-block> <p>在上一个 <code>release</code> 版本作为<a href><code>实验功能</code></a>或作为<a href><code>扩展特性</code></a>但是核心本体并未支持的功能、特性,于 <code>latest</code> 版本被引入。</p> </div> <div class=tabbed-block> <p>存在于当前 <code>dev</code> 版本中但是未在 <code>latest</code> 版本中加入的功能、特性。</p> </div> <div class=tabbed-block> <p>在支持 <code>latest</code> 或 <code>dev</code> 或 <del>特定</del> <code>release</code> 版本的插件扩展中存在此特性的可行性方案。</p> </div> </div> </div> <h3 id=_2>抽象概念<a class=headerlink href=#_2 title="Permanent link">⚓</a></h3> <p>这些图标会出现在文章内容中作为抽象概念的具体表达,用于迁移记忆。 </p> <p>以下是图标应用举例:</p> <ul> <li><strong><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12.076.066 8.883 3.28H3.348v5.434L0 12.01l3.349 3.298v5.39h5.374l3.285 3.236 3.285-3.236h5.43v-5.374L24 12.026l-3.232-3.252V3.321H15.31zm0 .749 2.49 2.506h-1.69v6.441l-.8.805-.81-.815V3.28H9.627zm-8.2 2.991h4.483L6.485 5.692l4.253 4.279v.654H9.94L5.674 6.423l-1.798 1.77zm5.227 0h1.635v5.415l-3.509-3.53zm4.302.043h1.687l1.83 1.842-3.517 3.539zm2.431 0h4.404v4.394l-1.83-1.842-4.241 4.267h-.764v-.69l4.261-4.287zm2.574 3.3 1.83 1.843v1.676h-5.327zm-12.735.013 3.515 3.462H3.876v-1.69zM3.348 9.454v1.697h6.377l.871.858-.782.77H3.35v1.786L.753 12.01zm17.42.068 2.488 2.503-2.533 2.55v-1.796h-6.41l-.75-.754.825-.83h6.38zm-9.502.978.81.815.186-.188.614-.618v.686h.768l-.825.83.75.754h-.719v.808l-.842-.83-.741.73v-.707h-.7l.781-.77-.188-.186-.682-.672h.788zm-7.39 2.807h5.402l-3.603 3.55-1.798-1.772zm6.154 0h.708v.7l-4.404 4.338 1.852 1.824h-4.31v-4.342l1.798 1.77zm3.348 0h.715l4.317 4.343.186-.187 1.599-1.61v4.316h-4.366l1.853-1.825-.188-.185-4.116-4.054zm1.46 0h5.357v1.798l-1.785 1.796zm-2.83.191.842.829v6.37h1.691l-2.532 2.495-2.533-2.495h1.79V14.23zm-1.27 1.251v5.42H8.939l-1.852-1.823zm2.64.097 3.552 3.499-1.853 1.825h-1.7z"/></svg></span>[<code>时代</code>]</strong>: <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>1899</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>2100</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>美好年代</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>WW II</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>2011-2021</code></a></li> <li><strong><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M6.155 12.058c0 .503.095.967.285 1.392.19.424.447.793.771 1.106.324.313.699.56 1.123.738.437.168.895.252 1.375.252.481 0 .934-.084 1.359-.252a3.578 3.578 0 0 0 1.14-.738 3.37 3.37 0 0 0 1.073-2.498 3.371 3.371 0 0 0-1.073-2.498 3.356 3.356 0 0 0-1.14-.721 3.463 3.463 0 0 0-1.359-.269c-.48 0-.938.09-1.374.269-.425.167-.8.408-1.124.72a3.52 3.52 0 0 0-.771 1.107 3.37 3.37 0 0 0-.285 1.392Zm-3.437 0c0-.939.173-1.81.52-2.616a6.524 6.524 0 0 1 1.441-2.13 6.503 6.503 0 0 1 2.197-1.408c.86-.346 1.805-.52 2.833-.52 1.018 0 1.957.174 2.817.52a6.47 6.47 0 0 1 2.213 1.409 6.542 6.542 0 0 1 1.979 4.745c0 .939-.173 1.816-.52 2.632a6.45 6.45 0 0 1-1.459 2.113 6.678 6.678 0 0 1-2.213 1.425c-.86.335-1.8.503-2.817.503-1.028 0-1.973-.168-2.833-.503a6.717 6.717 0 0 1-2.197-1.425 6.572 6.572 0 0 1-1.442-2.113 6.663 6.663 0 0 1-.52-2.632ZM10.144.008a11.86 11.86 0 0 0-7.805 2.569l1.523.857C5.67 2.1 7.955 1.53 10.144 1.625V.007Zm8.09 3.616C16.331 1.625 13.856.388 11.191.102V1.72a10.725 10.725 0 0 1 5.901 3.046l1.142-1.142Zm3.427 7.805c-.095-2.475-1.047-4.95-2.665-7.043l-1.142 1.142c1.332 1.808 2.094 3.807 2.189 5.9h1.618Zm-2.665 8.185c1.618-2.094 2.57-4.568 2.665-7.043h-1.618c-.095 2.094-.857 4.093-2.19 5.901l1.143 1.142Zm-7.805 4.284c2.57-.286 5.14-1.523 7.043-3.522l-1.142-1.142c-1.618 1.713-3.712 2.76-5.901 3.046v1.618Zm-8.852-2.475a11.867 11.867 0 0 0 7.805 2.57v-1.618c-2.19.095-4.378-.476-6.282-1.809l-1.523.857Z"/></svg></span>[<code>风格</code>]</strong>: <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>中世纪</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>科幻</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>悬疑</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>心理恐怖</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>秘密剧情</code></a></li> <li><strong><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm0 .57C18.315.57 23.43 5.685 23.43 12c0 6.31-5.115 11.43-11.43 11.43C5.69 23.43.57 18.314.57 12 .57 5.69 5.69.57 12 .57zm0 .234c-.1 0-.183.06-.218.147l-.492 1.551A9.523 9.523 0 0 0 2.475 12c0 1.48.337 2.885.94 4.136l-1.1 1.206a.241.241 0 0 0-.015.262.246.246 0 0 0 .238.115l1.592-.353a9.52 9.52 0 0 0 7.87 4.16c3.27 0 6.16-1.652 7.874-4.16l1.592.353a.236.236 0 0 0 .23-.123.234.234 0 0 0-.016-.262l-1.1-1.198A9.431 9.431 0 0 0 21.526 12a9.523 9.523 0 0 0-8.815-9.498L12.218.947A.237.237 0 0 0 12 .804zm-.003.25c.024 0 .048.02.056.043l1.02 3.354a1.2 1.2 0 0 0-.48.957c0 .389.19.734.48.952h-.004c.436.326.718.846.718 1.429v1.12l4.326-2.497.476.825-4.802 2.77v.965l.834.48 4.802-2.774.476.825-4.326 2.5.972.56c.508.294.818.798.882 1.338v-.004a1.193 1.193 0 0 0 1.655.953l2.393 2.56c.02.02.02.047.008.07-.016.025-.04.033-.068.029l-3.413-.794a1.193 1.193 0 0 0-1.65-.957l.003-.004c-.5.215-1.091.199-1.6-.095l-.968-.56v4.994h-.952v-5.545l-.834-.48-.833.48v5.545h-.953V15.1l-.972.555c-.508.294-1.1.31-1.6.096l.004.004a1.193 1.193 0 0 0-1.651.957l-3.413.793a.054.054 0 0 1-.063-.028c-.016-.02-.012-.047.008-.067l2.397-2.56c.333.143.73.135 1.067-.064.338-.194.544-.528.588-.889v.004a1.78 1.78 0 0 1 .88-1.337l.97-.56-4.327-2.496.477-.826 4.802 2.774.833-.484v-.964l-4.802-2.77.476-.826 4.326 2.496V7.79c0-.583.282-1.103.719-1.429h-.004c.29-.214.476-.56.476-.952 0-.393-.19-.738-.48-.957l1.02-3.353c.008-.028.031-.044.051-.044zm.004 5.902a.833.833 0 0 0-.833.833v1.67L12 9.94l.833-.48V7.789A.833.833 0 0 0 12 6.956zm0 4.084-.833.48v.964l.833.476.833-.48v-.96zm-2.62 1.516-1.444.833a.833.833 0 0 0-.306 1.14.822.822 0 0 0 .723.412.83.83 0 0 0 .416-.111l1.445-.834v-.96zm5.243 0-.833.48V14l1.445.834a.834.834 0 0 0 .833-1.445z"/></svg></span>[<code>地点</code>]</strong>: <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>卢浮宫</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>凡尔赛</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>君临城</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>火星</code></a> <a href><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M5.5 7A1.5 1.5 0 0 1 4 5.5 1.5 1.5 0 0 1 5.5 4 1.5 1.5 0 0 1 7 5.5 1.5 1.5 0 0 1 5.5 7m15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z"/></svg></span><code>冬木</code></a></li> </ul> <hr> <ul> <li><strong><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M24 12 12 0 0 12l12 12 12-12zM12 3.197l4.418 4.418c-1.445-.386-2.93-.586-4.418-.586s-2.974.199-4.418.588L12 3.196zM8.069 16.87c1.19-.658 2.534-1.008 3.931-1.008s2.741.35 3.931 1.008L12 20.804 8.069 16.87zm9.509-1.647c-1.697-1.08-3.636-1.622-5.578-1.622s-3.881.542-5.578 1.622l-3.103-3.101C5.822 10.284 8.834 9.29 12 9.29s6.178.994 8.681 2.832l-3.103 3.101z"/></svg></span>[<code>人物背景</code>]</strong>: <code>生于银河纪元11988年,卒于银河纪元12069年。他的卒年后来被确定为基地纪元元年。他是一位年轻有为的数学家,中等个子,长相俊朗。他曾经担任川陀大学数学系主任,是第一帝国克里昂一世皇帝的御前首相,川陀大学心理史学系荣誉教授,心理史学研究计划主持人、银河百科全书执行编辑。他是心理史学创始人之一(另一位是雨果·阿玛瑞尔),同时也是基地创始人。他还被认为是第二基地第一任首席发言者,后来也成了基地的传奇英雄。</code></li> </ul> <h3 id=_3>注释说明<a class=headerlink href=#_3 title="Permanent link">⚓</a></h3> <ul> <li><a href=#><code>重定向至正式术语</code></a>: 常与<span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3H9m0 5h2v9H9V8m4 0h2v9h-2V8Z"/></svg></span>一起为 <abbr title=就是即将或已经弃用的功能、特性页面。>过期页面</abbr> 重定向内容索引。</li> </ul> <div class=footnote> <hr> <ol> <li id=fn:1> <p>具体还要看下一个大版本的文档如何编写。&#160;<a class=footnote-backref href=#fnref:1 title="Jump back to footnote 1 in the text">&#8617;</a></p> </li> </ol> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../PythonSkill/ class="md-footer__link md-footer__link--prev" aria-label="上一页: Python 技巧"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> Python 技巧 </div> </div> </a> <a href=../../blog/ class="md-footer__link md-footer__link--next" aria-label="下一页: Blog"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> Blog </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/Write/prepare/index.html b/dev/RulePackage/Write/prepare/index.html
index d0ba25b4..c7aca0e7 100644
--- a/dev/RulePackage/Write/prepare/index.html
+++ b/dev/RulePackage/Write/prepare/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../python/ rel=prev><link href=../write/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>准备规则书 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 准备规则书 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3 checked> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/Write/prepare.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/Write/prepare.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>准备规则书</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../python/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 了解Python"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 了解Python </div> </div> </a> <a href=../write/ class="md-footer__link md-footer__link--next" aria-label="下一页: 编写规则包"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 编写规则包 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../python/ rel=prev><link href=../write/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>准备规则书 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 准备规则书 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3 checked> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/Write/prepare.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/Write/prepare.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>准备规则书</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../python/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 了解Python"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 了解Python </div> </div> </a> <a href=../write/ class="md-footer__link md-footer__link--next" aria-label="下一页: 编写规则包"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 编写规则包 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/Write/python/index.html b/dev/RulePackage/Write/python/index.html
index dc718e49..1d36994e 100644
--- a/dev/RulePackage/Write/python/index.html
+++ b/dev/RulePackage/Write/python/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../getStart/getDeeper/Package/ rel=prev><link href=../prepare/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>了解Python - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 了解Python </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3 checked> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/Write/python.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/Write/python.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>了解Python</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../getStart/getDeeper/Package/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 包"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 包 </div> </div> </a> <a href=../prepare/ class="md-footer__link md-footer__link--next" aria-label="下一页: 准备规则书"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 准备规则书 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../getStart/getDeeper/Package/ rel=prev><link href=../prepare/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>了解Python - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 了解Python </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3 checked> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/Write/python.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/Write/python.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>了解Python</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../getStart/getDeeper/Package/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 包"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 包 </div> </div> </a> <a href=../prepare/ class="md-footer__link md-footer__link--next" aria-label="下一页: 准备规则书"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 准备规则书 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/Write/write/index.html b/dev/RulePackage/Write/write/index.html
index c1586a25..917d5d84 100644
--- a/dev/RulePackage/Write/write/index.html
+++ b/dev/RulePackage/Write/write/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../prepare/ rel=prev><link href=../../skill/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>编写规则包 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 编写规则包 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3 checked> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/Write/write.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/Write/write.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>编写规则包</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../prepare/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 准备规则书"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 准备规则书 </div> </div> </a> <a href=../../skill/ class="md-footer__link md-footer__link--next" aria-label="下一页: Index"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> Index </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../prepare/ rel=prev><link href=../../skill/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>编写规则包 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 编写规则包 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3 checked> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/Write/write.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/Write/write.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>编写规则包</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../prepare/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 准备规则书"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 准备规则书 </div> </div> </a> <a href=../../skill/ class="md-footer__link md-footer__link--next" aria-label="下一页: Index"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> Index </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/getStart/attribute/index.html b/dev/RulePackage/getStart/attribute/index.html
index 784e271c..4295b6b1 100644
--- a/dev/RulePackage/getStart/attribute/index.html
+++ b/dev/RulePackage/getStart/attribute/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../method/ rel=prev><link href=../getDeeper/object/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>attribute 属性 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> attribute 属性 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/attribute.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/attribute.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>属性</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>关联到一个对象的值,通常使用点号表达式按名称来引用。 举例来说,如果对象 o 具有属性 a 则可以用 o.a 来引用它。</p> <p>如果对象允许,将未被定义为 <a href=https://docs.python.org/zh-cn/3/reference/lexical_analysis.html#identifiers>标识符和关键字</a> 的非标识名称用作一个对象的属性也是可以的,例如使用 <a href=https://docs.python.org/zh-cn/3/library/functions.html#setattr>setattr()</a>。 这样的属性将无法使用点号表达式来访问,而是必须通过 <a href=https://docs.python.org/zh-cn/3/library/functions.html#getattr>getattr()</a> 来获取。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../method/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 方法"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 方法 </div> </div> </a> <a href=../getDeeper/object/ class="md-footer__link md-footer__link--next" aria-label="下一页: 对象"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 对象 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../method/ rel=prev><link href=../getDeeper/object/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>attribute 属性 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> attribute 属性 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/attribute.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/attribute.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>属性</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>关联到一个对象的值,通常使用点号表达式按名称来引用。 举例来说,如果对象 o 具有属性 a 则可以用 o.a 来引用它。</p> <p>如果对象允许,将未被定义为 <a href=https://docs.python.org/zh-cn/3/reference/lexical_analysis.html#identifiers>标识符和关键字</a> 的非标识名称用作一个对象的属性也是可以的,例如使用 <a href=https://docs.python.org/zh-cn/3/library/functions.html#setattr>setattr()</a>。 这样的属性将无法使用点号表达式来访问,而是必须通过 <a href=https://docs.python.org/zh-cn/3/library/functions.html#getattr>getattr()</a> 来获取。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../method/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 方法"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 方法 </div> </div> </a> <a href=../getDeeper/object/ class="md-footer__link md-footer__link--next" aria-label="下一页: 对象"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 对象 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/getStart/class/index.html b/dev/RulePackage/getStart/class/index.html
index d9f63314..2be20dd7 100644
--- a/dev/RulePackage/getStart/class/index.html
+++ b/dev/RulePackage/getStart/class/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../intro/ rel=prev><link href=../method/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>class 类 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> class 类 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/class.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/class.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>类</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>用来创建用户定义对象的模板。类定义通常包含对该类的实例进行操作的方法定义。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../intro/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 概述"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 概述 </div> </div> </a> <a href=../method/ class="md-footer__link md-footer__link--next" aria-label="下一页: 方法"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 方法 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../intro/ rel=prev><link href=../method/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>class 类 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> class 类 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/class.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/class.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>类</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>用来创建用户定义对象的模板。类定义通常包含对该类的实例进行操作的方法定义。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../intro/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 概述"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 概述 </div> </div> </a> <a href=../method/ class="md-footer__link md-footer__link--next" aria-label="下一页: 方法"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 方法 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/getStart/getDeeper/Module/index.html b/dev/RulePackage/getStart/getDeeper/Module/index.html
index cda2834c..28a094f0 100644
--- a/dev/RulePackage/getStart/getDeeper/Module/index.html
+++ b/dev/RulePackage/getStart/getDeeper/Module/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../object/ rel=prev><link href=../Package/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Module 模块 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Module 模块 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4 checked> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/getDeeper/Module.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/getDeeper/Module.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>模块</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>此对象是 Python 代码的一种组织单位。各模块具有独立的命名空间,可包含任意 Python 对象。模块可通过 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-importing>importing</a> 操作被加载到 Python 中。</p> <p>另见 <a href=../Package>package</a>。</p> </div> <p><span class=twemoji title="Important information"><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M11 9h2V7h-2m1 13c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-18A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m-1 15h2v-6h-2v6Z"/></svg></span></p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../object/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 对象"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 对象 </div> </div> </a> <a href=../Package/ class="md-footer__link md-footer__link--next" aria-label="下一页: 包"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 包 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../object/ rel=prev><link href=../Package/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Module 模块 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Module 模块 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4 checked> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/getDeeper/Module.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/getDeeper/Module.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>模块</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>此对象是 Python 代码的一种组织单位。各模块具有独立的命名空间,可包含任意 Python 对象。模块可通过 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-importing>importing</a> 操作被加载到 Python 中。</p> <p>另见 <a href=../Package>package</a>。</p> </div> <p><span class=twemoji title="Important information"><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M11 9h2V7h-2m1 13c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-18A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m-1 15h2v-6h-2v6Z"/></svg></span></p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../object/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 对象"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 对象 </div> </div> </a> <a href=../Package/ class="md-footer__link md-footer__link--next" aria-label="下一页: 包"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 包 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/getStart/getDeeper/Package/index.html b/dev/RulePackage/getStart/getDeeper/Package/index.html
index 8f862df8..6cc0a29a 100644
--- a/dev/RulePackage/getStart/getDeeper/Package/index.html
+++ b/dev/RulePackage/getStart/getDeeper/Package/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../Module/ rel=prev><link href=../../../Write/python/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Package 包 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Package 包 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4 checked> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/getDeeper/Package.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/getDeeper/Package.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>包</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>一种可包含子模块或递归地包含子包的 Python <a href=../Module>module</a>。 从技术上说,包是具有 <strong>path</strong> 属性的 Python 模块。</p> <p>另参见 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-regular-package>regular package</a> 和 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-namespace-package>namespace package</a>。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../Module/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 模块"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 模块 </div> </div> </a> <a href=../../../Write/python/ class="md-footer__link md-footer__link--next" aria-label="下一页: 了解Python"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 了解Python </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../Module/ rel=prev><link href=../../../Write/python/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Package 包 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Package 包 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4 checked> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/getDeeper/Package.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/getDeeper/Package.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>包</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>一种可包含子模块或递归地包含子包的 Python <a href=../Module>module</a>。 从技术上说,包是具有 <strong>path</strong> 属性的 Python 模块。</p> <p>另参见 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-regular-package>regular package</a> 和 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-namespace-package>namespace package</a>。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../Module/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 模块"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 模块 </div> </div> </a> <a href=../../../Write/python/ class="md-footer__link md-footer__link--next" aria-label="下一页: 了解Python"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 了解Python </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/getStart/getDeeper/object/index.html b/dev/RulePackage/getStart/getDeeper/object/index.html
index 52d3a9fc..78b83c80 100644
--- a/dev/RulePackage/getStart/getDeeper/object/index.html
+++ b/dev/RulePackage/getStart/getDeeper/object/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../attribute/ rel=prev><link href=../Module/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>object 对象 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> object 对象 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4 checked> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/getDeeper/object.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/getDeeper/object.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>对象</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>任何具有状态(属性或值)以及预定义行为(方法)的数据。object 也是任何 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-new-style-class>new-style class</a> 的最顶层基类名。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../attribute/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 属性"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 属性 </div> </div> </a> <a href=../Module/ class="md-footer__link md-footer__link--next" aria-label="下一页: 模块"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 模块 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../attribute/ rel=prev><link href=../Module/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>object 对象 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> object 对象 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4 checked> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/getDeeper/object.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/getDeeper/object.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>对象</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>任何具有状态(属性或值)以及预定义行为(方法)的数据。object 也是任何 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-new-style-class>new-style class</a> 的最顶层基类名。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../attribute/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 属性"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 属性 </div> </div> </a> <a href=../Module/ class="md-footer__link md-footer__link--next" aria-label="下一页: 模块"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 模块 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/getStart/method/index.html b/dev/RulePackage/getStart/method/index.html
index 4df72de2..67e1d67a 100644
--- a/dev/RulePackage/getStart/method/index.html
+++ b/dev/RulePackage/getStart/method/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../class/ rel=prev><link href=../attribute/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>method 方法 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> method 方法 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/method.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/method.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>方法</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>在类内部定义的函数。如果作为该类的实例的一个属性来调用,方法将会获取实例对象作为其第一个 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-argument>argument</a> (通常命名为 self)。参见 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-function>function</a> 和 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-nested-scope>nested scope</a>。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../class/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 类"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 类 </div> </div> </a> <a href=../attribute/ class="md-footer__link md-footer__link--next" aria-label="下一页: 属性"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 属性 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../class/ rel=prev><link href=../attribute/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>method 方法 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> method 方法 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2 checked> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=true> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/getStart/method.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/getStart/method.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>方法</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>在类内部定义的函数。如果作为该类的实例的一个属性来调用,方法将会获取实例对象作为其第一个 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-argument>argument</a> (通常命名为 self)。参见 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-function>function</a> 和 <a href=https://docs.python.org/zh-cn/3/glossary.html#term-nested-scope>nested scope</a>。</p> </div> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../class/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 类"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 类 </div> </div> </a> <a href=../attribute/ class="md-footer__link md-footer__link--next" aria-label="下一页: 属性"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 属性 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/intro/index.html b/dev/RulePackage/intro/index.html
index 710bda80..a4a24d41 100644
--- a/dev/RulePackage/intro/index.html
+++ b/dev/RulePackage/intro/index.html
@@ -1,23 +1,3 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../Core/ rel=prev><link href=../getStart/class/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>概述 - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 概述 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> 概述 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 概述 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 安装规则包 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 安装规则包 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/intro.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/intro.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>概述</h1> <div class="admonition abstract"> <p class=admonition-title>Abstract</p> <p>此章节涉及到真正的 Python 规范问题,因此请认真阅读并多加练习,方能写出漂亮的代码。</p> </div> <h3 id=_1>安装规则包<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>水系规则包可以通过 <code>pip</code> Pyhton 包管理工具直接下载,但是为了方便,我们推荐以下两个安装方案。</p> <div class="tabbed-set tabbed-alternate" data-tabs=1:2><input checked=checked id=_1-使用pdm管理器 name=__tabbed_1 type=radio><input id=_1-使用hrc管理器 name=__tabbed_1 type=radio><div class=tabbed-labels><label for=_1-使用pdm管理器>使用<code>pdm</code>管理器</label><label for=_1-使用hrc管理器>使用<code>hrc</code>管理器</label></div> <div class=tabbed-content> <div class=tabbed-block> <div class="language-shell highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1></a>pdm<span class=w> </span>install<span class=w> </span>MyRule
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../Core/ rel=prev><link href=../getStart/class/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>概述 - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 概述 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> 概述 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 概述 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 安装规则包 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 安装规则包 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/intro.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/intro.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>概述</h1> <div class="admonition abstract"> <p class=admonition-title>Abstract</p> <p>此章节涉及到真正的 Python 规范问题,因此请认真阅读并多加练习,方能写出漂亮的代码。</p> </div> <h3 id=_1>安装规则包<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>水系规则包可以通过 <code>pip</code> Pyhton 包管理工具直接下载,但是为了方便,我们推荐以下两个安装方案。</p> <div class="tabbed-set tabbed-alternate" data-tabs=1:2><input checked=checked id=_1-使用pdm管理器 name=__tabbed_1 type=radio><input id=_1-使用hrc管理器 name=__tabbed_1 type=radio><div class=tabbed-labels><label for=_1-使用pdm管理器>使用<code>pdm</code>管理器</label><label for=_1-使用hrc管理器>使用<code>hrc</code>管理器</label></div> <div class=tabbed-content> <div class=tabbed-block> <div class="language-shell highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1></a>pdm<span class=w> </span>install<span class=w> </span>MyRule
</span></code></pre></div></td></tr></table></div> <p>如果你使用<code>pdm</code>管理自己的规则包或开启自己的水系骰子,那么非常推荐使用这种方案来集成形如 <code>infini-Rule-The_Pool</code>这般包名的规则。</p> </div> <div class=tabbed-block> <div class="language-shell highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-1-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-1-1><a id=__codelineno-1-1 name=__codelineno-1-1></a>hrc<span class=w> </span>install<span class=w> </span>MyRule
-</span></code></pre></div></td></tr></table></div> <p>一般来说推荐使用<code>hrc</code>管理器来安装和调试规则包。 (1)</p> <ol> <li>这样会无视虚拟环境规则而直接找到当前使用的文件路径,而不需要像<code>pdm</code>那样只能用在<code>pdm</code>本身创建的虚拟环境内了。</li> </ol> </div> </div> </div> <p><code>HRC</code>管理器的原理是使用<code>pip</code>获取包后<code>cp</code>到当前所指定的目录(或者默认目录)。对于不熟悉命令行的用户来说,一个<code>webui</code>或许是更适合的方案。</p> <h3 id=_2>编写规则包<a class=headerlink href=#_2 title="Permanent link">⚓</a></h3> <p>要编写规则包,需要懂得<code>Python</code>相关的知识以及一些计算机常识。在接下来的好几个章节里你将会被一步一引导学习如何制作一个规则包。</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../Core/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 核心概览"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 核心概览 </div> </div> </a> <a href=../getStart/class/ class="md-footer__link md-footer__link--next" aria-label="下一页: 类"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 类 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+</span></code></pre></div></td></tr></table></div> <p>一般来说推荐使用<code>hrc</code>管理器来安装和调试规则包。 (1)</p> <ol> <li>这样会无视虚拟环境规则而直接找到当前使用的文件路径,而不需要像<code>pdm</code>那样只能用在<code>pdm</code>本身创建的虚拟环境内了。</li> </ol> </div> </div> </div> <p><code>HRC</code>管理器的原理是使用<code>pip</code>获取包后<code>cp</code>到当前所指定的目录(或者默认目录)。对于不熟悉命令行的用户来说,一个<code>webui</code>或许是更适合的方案。</p> <h3 id=_2>编写规则包<a class=headerlink href=#_2 title="Permanent link">⚓</a></h3> <p>要编写规则包,需要懂得<code>Python</code>相关的知识以及一些计算机常识。在接下来的好几个章节里你将会被一步一引导学习如何制作一个规则包。</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../Core/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 核心概览"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 核心概览 </div> </div> </a> <a href=../getStart/class/ class="md-footer__link md-footer__link--next" aria-label="下一页: 类"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 类 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/skill/fstring/index.html b/dev/RulePackage/skill/fstring/index.html
index 9fc54fcb..a1500d50 100644
--- a/dev/RulePackage/skill/fstring/index.html
+++ b/dev/RulePackage/skill/fstring/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../ rel=prev><link href=../../../Standard/what-is-rule-package/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>善用语法糖 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 善用语法糖 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/skill/fstring.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/skill/fstring.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>善用语法糖</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../ class="md-footer__link md-footer__link--prev" aria-label="上一页: Index"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> Index </div> </div> </a> <a href=../../../Standard/what-is-rule-package/ class="md-footer__link md-footer__link--next" aria-label="下一页: 什么是规则包?"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 什么是规则包? </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../ rel=prev><link href=../../../Standard/what-is-rule-package/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>善用语法糖 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 善用语法糖 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/skill/fstring.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/skill/fstring.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>善用语法糖</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../ class="md-footer__link md-footer__link--prev" aria-label="上一页: Index"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> Index </div> </div> </a> <a href=../../../Standard/what-is-rule-package/ class="md-footer__link md-footer__link--next" aria-label="下一页: 什么是规则包?"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 什么是规则包? </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/RulePackage/skill/index.html b/dev/RulePackage/skill/index.html
index bc794abd..d13ae2b2 100644
--- a/dev/RulePackage/skill/index.html
+++ b/dev/RulePackage/skill/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../Write/write/ rel=prev><link href=fstring/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Index - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Index </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/skill/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/skill/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>Index</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../Write/write/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 编写规则包"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 编写规则包 </div> </div> </a> <a href=fstring/ class="md-footer__link md-footer__link--next" aria-label="下一页: 善用语法糖"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 善用语法糖 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../Write/write/ rel=prev><link href=fstring/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Index - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Index </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=true> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=true> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/RulePackage/skill/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/RulePackage/skill/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>Index</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../Write/write/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 编写规则包"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 编写规则包 </div> </div> </a> <a href=fstring/ class="md-footer__link md-footer__link--next" aria-label="下一页: 善用语法糖"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 善用语法糖 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/DefaultDice/_counts/index.html b/dev/Standard/Term/DefaultDice/_counts/index.html
index 4364a25c..612b5379 100644
--- a/dev/Standard/Term/DefaultDice/_counts/index.html
+++ b/dev/Standard/Term/DefaultDice/_counts/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../_sides/ rel=prev><link href=../../check/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>_counts 骰子个数 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> _counts 骰子个数 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> _counts 骰子个数 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> _counts 骰子个数 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 属性说明 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 属性说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/DefaultDice/_counts.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/DefaultDice/_counts.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>_counts 骰子个数</h1> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>这是一个必须的值,根据不同规则书的要求设置相对应的值</p> </div> <h3 id=_1>属性说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>用于规定默认投掷时骰子的个数</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../_sides/ class="md-footer__link md-footer__link--prev" aria-label="上一页: _sides 骰子面数"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> _sides 骰子面数 </div> </div> </a> <a href=../../check/ class="md-footer__link md-footer__link--next" aria-label="下一页: check 检定"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> check 检定 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../_sides/ rel=prev><link href=../../check/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>_counts 骰子个数 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> _counts 骰子个数 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> _counts 骰子个数 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> _counts 骰子个数 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 属性说明 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 属性说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/DefaultDice/_counts.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/DefaultDice/_counts.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>_counts 骰子个数</h1> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>这是一个必须的值,根据不同规则书的要求设置相对应的值</p> </div> <h3 id=_1>属性说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>用于规定默认投掷时骰子的个数</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../_sides/ class="md-footer__link md-footer__link--prev" aria-label="上一页: _sides 骰子面数"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> _sides 骰子面数 </div> </div> </a> <a href=../../check/ class="md-footer__link md-footer__link--next" aria-label="下一页: check 检定"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> check 检定 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/DefaultDice/_sides/index.html b/dev/Standard/Term/DefaultDice/_sides/index.html
index d519c5ff..329e138e 100644
--- a/dev/Standard/Term/DefaultDice/_sides/index.html
+++ b/dev/Standard/Term/DefaultDice/_sides/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../ rel=prev><link href=../_counts/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>_sides 骰子面数 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> _sides 骰子面数 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> _sides 骰子面数 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> _sides 骰子面数 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 属性说明 </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 属性说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/DefaultDice/_sides.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/DefaultDice/_sides.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>_sides 骰子面数</h1> <h3 id=_1>属性说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>用于规定默认投掷时骰子的面数</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../ class="md-footer__link md-footer__link--prev" aria-label="上一页: DefaultDice 默认骰子"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> DefaultDice 默认骰子 </div> </div> </a> <a href=../_counts/ class="md-footer__link md-footer__link--next" aria-label="下一页: _counts 骰子个数"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> _counts 骰子个数 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../ rel=prev><link href=../_counts/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>_sides 骰子面数 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> _sides 骰子面数 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> _sides 骰子面数 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> _sides 骰子面数 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 属性说明 </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 属性说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/DefaultDice/_sides.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/DefaultDice/_sides.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>_sides 骰子面数</h1> <h3 id=_1>属性说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>用于规定默认投掷时骰子的面数</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../ class="md-footer__link md-footer__link--prev" aria-label="上一页: DefaultDice 默认骰子"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> DefaultDice 默认骰子 </div> </div> </a> <a href=../_counts/ class="md-footer__link md-footer__link--next" aria-label="下一页: _counts 骰子个数"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> _counts 骰子个数 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/DefaultDice/index.html b/dev/Standard/Term/DefaultDice/index.html
index eb8b343e..b59dd546 100644
--- a/dev/Standard/Term/DefaultDice/index.html
+++ b/dev/Standard/Term/DefaultDice/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../duration/campaign/ rel=prev><link href=_sides/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>DefaultDice 默认骰子 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> DefaultDice 默认骰子 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 类说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/DefaultDice/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/DefaultDice/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>DefaultDice 默认骰子</h1> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>这是一个必须的类,根据不同规则书的要求设置相对应的值</p> </div> <h3 id=_1>类说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>用于规定默认投掷时骰子的各种属性,例如默认骰子数量,面数</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../duration/campaign/ class="md-footer__link md-footer__link--prev" aria-label="上一页: campaign 战役"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> campaign 战役 </div> </div> </a> <a href=_sides/ class="md-footer__link md-footer__link--next" aria-label="下一页: _sides 骰子面数"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> _sides 骰子面数 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../duration/campaign/ rel=prev><link href=_sides/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>DefaultDice 默认骰子 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> DefaultDice 默认骰子 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 类说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/DefaultDice/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/DefaultDice/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>DefaultDice 默认骰子</h1> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>这是一个必须的类,根据不同规则书的要求设置相对应的值</p> </div> <h3 id=_1>类说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>用于规定默认投掷时骰子的各种属性,例如默认骰子数量,面数</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../duration/campaign/ class="md-footer__link md-footer__link--prev" aria-label="上一页: campaign 战役"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> campaign 战役 </div> </div> </a> <a href=_sides/ class="md-footer__link md-footer__link--next" aria-label="下一页: _sides 骰子面数"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> _sides 骰子面数 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/PlayerCard/index.html b/dev/Standard/Term/PlayerCard/index.html
index 1d932a5f..e85e3b66 100644
--- a/dev/Standard/Term/PlayerCard/index.html
+++ b/dev/Standard/Term/PlayerCard/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../check/ability/ rel=prev><link href=../../../CLI/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>PlayerCard 人物卡 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> PlayerCard 人物卡 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 类说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/PlayerCard/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/PlayerCard/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>PlayerCard 人物卡</h1> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>这是一个可选实现但是{<mark>建议尽量必须实现</mark>}的方法,主要表现在规则书正是检定方法不同而有所不同上。</p> </div> <h3 id=_1>类说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>用于规定人物卡的格式,包括人物属性,属性之间的计算关系等</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../check/ability/ class="md-footer__link md-footer__link--prev" aria-label="上一页: ability 检定"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> ability 检定 </div> </div> </a> <a href=../../../CLI/ class="md-footer__link md-footer__link--next" aria-label="下一页: CLI Reference"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> CLI Reference </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../check/ability/ rel=prev><link href=../../../CLI/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>PlayerCard 人物卡 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> PlayerCard 人物卡 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 类说明 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/PlayerCard/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/PlayerCard/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>PlayerCard 人物卡</h1> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>这是一个可选实现但是{<mark>建议尽量必须实现</mark>}的方法,主要表现在规则书正是检定方法不同而有所不同上。</p> </div> <h3 id=_1>类说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>用于规定人物卡的格式,包括人物属性,属性之间的计算关系等</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../check/ability/ class="md-footer__link md-footer__link--prev" aria-label="上一页: ability 检定"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> ability 检定 </div> </div> </a> <a href=../../../CLI/ class="md-footer__link md-footer__link--next" aria-label="下一页: CLI Reference"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> CLI Reference </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/check/ability/index.html b/dev/Standard/Term/check/ability/index.html
index 80a0ff8e..9b1502cd 100644
--- a/dev/Standard/Term/check/ability/index.html
+++ b/dev/Standard/Term/check/ability/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../ rel=prev><link href=../../PlayerCard/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>ability 检定 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> ability 检定 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/check/ability.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/check/ability.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>ability 检定</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>关于这部分内容请<a href=https://infini.retrofor.space title=我为什么会看到此项内容?>移步正式术语</a>: <a href=/Standard/Term/check/ ><code>check 检定</code></a></p> </div> <p>这部分其实已经移除。</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../ class="md-footer__link md-footer__link--prev" aria-label="上一页: check 检定"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> check 检定 </div> </div> </a> <a href=../../PlayerCard/ class="md-footer__link md-footer__link--next" aria-label="下一页: PlayerCard 人物卡"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> PlayerCard 人物卡 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../ rel=prev><link href=../../PlayerCard/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>ability 检定 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> ability 检定 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/check/ability.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/check/ability.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>ability 检定</h1> <div class="admonition info"> <p class=admonition-title>Info</p> <p>关于这部分内容请<a href=https://infini.retrofor.space title=我为什么会看到此项内容?>移步正式术语</a>: <a href=/Standard/Term/check/ ><code>check 检定</code></a></p> </div> <p>这部分其实已经移除。</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../ class="md-footer__link md-footer__link--prev" aria-label="上一页: check 检定"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> check 检定 </div> </div> </a> <a href=../../PlayerCard/ class="md-footer__link md-footer__link--next" aria-label="下一页: PlayerCard 人物卡"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> PlayerCard 人物卡 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/check/index.html b/dev/Standard/Term/check/index.html
index ef6a5531..294a50df 100644
--- a/dev/Standard/Term/check/index.html
+++ b/dev/Standard/Term/check/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../DefaultDice/_counts/ rel=prev><link href=ability/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>check 检定 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> check 检定 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 方法说明 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 检定结果表 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/check/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/check/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>check 检定</h1> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>这是一个可选实现但是{<mark>建议尽量必须实现</mark>}的方法,主要表现在规则书正是检定方法不同而有所不同上。</p> </div> <h3 id=_1>方法说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>使用<code>check</code>或者<code>ability</code>方法, 必须对检定结果设定一个完整的输出判定范围。</p> <h3 id=_2>检定结果表<a class=headerlink href=#_2 title="Permanent link">⚓</a></h3> <p>如<a href=#_1><code>方法</code></a>所言,你必须为检定的结果设计一个完整的输出判定范围,因此你需要严格并且合理的分配划分界限,保证所有情况都在允许范围内有一个类似”成功””失败”的输出。</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../DefaultDice/_counts/ class="md-footer__link md-footer__link--prev" aria-label="上一页: _counts 骰子个数"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> _counts 骰子个数 </div> </div> </a> <a href=ability/ class="md-footer__link md-footer__link--next" aria-label="下一页: ability 检定"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> ability 检定 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../DefaultDice/_counts/ rel=prev><link href=ability/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>check 检定 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#_1 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> check 检定 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#_1 class=md-nav__link> <span class=md-ellipsis> 方法说明 </span> </a> </li> <li class=md-nav__item> <a href=#_2 class=md-nav__link> <span class=md-ellipsis> 检定结果表 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/check/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/check/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>check 检定</h1> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>这是一个可选实现但是{<mark>建议尽量必须实现</mark>}的方法,主要表现在规则书正是检定方法不同而有所不同上。</p> </div> <h3 id=_1>方法说明<a class=headerlink href=#_1 title="Permanent link">⚓</a></h3> <p>使用<code>check</code>或者<code>ability</code>方法, 必须对检定结果设定一个完整的输出判定范围。</p> <h3 id=_2>检定结果表<a class=headerlink href=#_2 title="Permanent link">⚓</a></h3> <p>如<a href=#_1><code>方法</code></a>所言,你必须为检定的结果设计一个完整的输出判定范围,因此你需要严格并且合理的分配划分界限,保证所有情况都在允许范围内有一个类似”成功””失败”的输出。</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../DefaultDice/_counts/ class="md-footer__link md-footer__link--prev" aria-label="上一页: _counts 骰子个数"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> _counts 骰子个数 </div> </div> </a> <a href=ability/ class="md-footer__link md-footer__link--next" aria-label="下一页: ability 检定"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> ability 检定 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/duration/campaign/index.html b/dev/Standard/Term/duration/campaign/index.html
index 5191a2c4..e6f2705a 100644
--- a/dev/Standard/Term/duration/campaign/index.html
+++ b/dev/Standard/Term/duration/campaign/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../module/ rel=prev><link href=../../DefaultDice/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>campaign 战役 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> campaign 战役 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/duration/campaign.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/duration/campaign.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>campaign 战役</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../module/ class="md-footer__link md-footer__link--prev" aria-label="上一页: module 模组"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> module 模组 </div> </div> </a> <a href=../../DefaultDice/ class="md-footer__link md-footer__link--next" aria-label="下一页: DefaultDice 默认骰子"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> DefaultDice 默认骰子 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../module/ rel=prev><link href=../../DefaultDice/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>campaign 战役 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> campaign 战役 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/duration/campaign.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/duration/campaign.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>campaign 战役</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../module/ class="md-footer__link md-footer__link--prev" aria-label="上一页: module 模组"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> module 模组 </div> </div> </a> <a href=../../DefaultDice/ class="md-footer__link md-footer__link--next" aria-label="下一页: DefaultDice 默认骰子"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> DefaultDice 默认骰子 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/duration/index.html b/dev/Standard/Term/duration/index.html
index 3831f9d2..9c611463 100644
--- a/dev/Standard/Term/duration/index.html
+++ b/dev/Standard/Term/duration/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../scenario/ rel=prev><link href=sene/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>duration (时长) - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#duration class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> duration (时长) </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/duration/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/duration/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1 id=duration>duration (时长)<a class=headerlink href=#duration title="Permanent link">⚓</a></h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../scenario/ class="md-footer__link md-footer__link--prev" aria-label="上一页: scenario 剧本"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> scenario 剧本 </div> </div> </a> <a href=sene/ class="md-footer__link md-footer__link--next" aria-label="下一页: sene 场"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> sene 场 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../scenario/ rel=prev><link href=sene/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>duration (时长) - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#duration class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> duration (时长) </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/duration/index.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/duration/index.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1 id=duration>duration (时长)<a class=headerlink href=#duration title="Permanent link">⚓</a></h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../scenario/ class="md-footer__link md-footer__link--prev" aria-label="上一页: scenario 剧本"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> scenario 剧本 </div> </div> </a> <a href=sene/ class="md-footer__link md-footer__link--next" aria-label="下一页: sene 场"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> sene 场 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/duration/module/index.html b/dev/Standard/Term/duration/module/index.html
index 2715c5a2..9f98f178 100644
--- a/dev/Standard/Term/duration/module/index.html
+++ b/dev/Standard/Term/duration/module/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../sene/ rel=prev><link href=../campaign/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>module 模组 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> module 模组 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/duration/module.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/duration/module.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>module 模组</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../sene/ class="md-footer__link md-footer__link--prev" aria-label="上一页: sene 场"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> sene 场 </div> </div> </a> <a href=../campaign/ class="md-footer__link md-footer__link--next" aria-label="下一页: campaign 战役"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> campaign 战役 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../sene/ rel=prev><link href=../campaign/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>module 模组 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> module 模组 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/duration/module.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/duration/module.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>module 模组</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../sene/ class="md-footer__link md-footer__link--prev" aria-label="上一页: sene 场"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> sene 场 </div> </div> </a> <a href=../campaign/ class="md-footer__link md-footer__link--next" aria-label="下一页: campaign 战役"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> campaign 战役 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/duration/sene/index.html b/dev/Standard/Term/duration/sene/index.html
index c99df793..8506558c 100644
--- a/dev/Standard/Term/duration/sene/index.html
+++ b/dev/Standard/Term/duration/sene/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../ rel=prev><link href=../module/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>sene 场 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> sene 场 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/duration/sene.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/duration/sene.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>sene 场</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../ class="md-footer__link md-footer__link--prev" aria-label="上一页: duration (时长)"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> duration (时长) </div> </div> </a> <a href=../module/ class="md-footer__link md-footer__link--next" aria-label="下一页: module 模组"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> module 模组 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../ rel=prev><link href=../module/ rel=next><link rel=icon href=../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>sene 场 - infini 核心文档</title><link rel=stylesheet href=../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../css/timeago.css><link rel=stylesheet href=../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> sene 场 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/duration/sene.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/duration/sene.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>sene 场</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../ class="md-footer__link md-footer__link--prev" aria-label="上一页: duration (时长)"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> duration (时长) </div> </div> </a> <a href=../module/ class="md-footer__link md-footer__link--next" aria-label="下一页: module 模组"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> module 模组 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../js/timeago.min.js></script> <script src=../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/scenario/index.html b/dev/Standard/Term/scenario/index.html
index ea244fa3..7df7da63 100644
--- a/dev/Standard/Term/scenario/index.html
+++ b/dev/Standard/Term/scenario/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../setting/ rel=prev><link href=../duration/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>scenario 剧本 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> scenario 剧本 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/scenario.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/scenario.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>scenario 剧本</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../setting/ class="md-footer__link md-footer__link--prev" aria-label="上一页: setting 背景"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> setting 背景 </div> </div> </a> <a href=../duration/ class="md-footer__link md-footer__link--next" aria-label="下一页: duration (时长)"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> duration (时长) </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../setting/ rel=prev><link href=../duration/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>scenario 剧本 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> scenario 剧本 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/scenario.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/scenario.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>scenario 剧本</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../setting/ class="md-footer__link md-footer__link--prev" aria-label="上一页: setting 背景"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> setting 背景 </div> </div> </a> <a href=../duration/ class="md-footer__link md-footer__link--next" aria-label="下一页: duration (时长)"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> duration (时长) </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/Term/setting/index.html b/dev/Standard/Term/setting/index.html
index 3d44429d..db15574c 100644
--- a/dev/Standard/Term/setting/index.html
+++ b/dev/Standard/Term/setting/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../what-is-standard/ rel=prev><link href=../scenario/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>setting 背景 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> setting 背景 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/setting.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/setting.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>setting 背景</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../what-is-standard/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 什么是通用规则包标准?"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 什么是通用规则包标准? </div> </div> </a> <a href=../scenario/ class="md-footer__link md-footer__link--next" aria-label="下一页: scenario 剧本"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> scenario 剧本 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../what-is-standard/ rel=prev><link href=../scenario/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>setting 背景 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> setting 背景 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4 checked> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/Term/setting.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/Term/setting.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>setting 背景</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/baimianxiao class=md-author title=@baimianxiao> <img src="https://avatars.githubusercontent.com/u/67865300?v=4&size=72" alt=baimianxiao> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../what-is-standard/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 什么是通用规则包标准?"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 什么是通用规则包标准? </div> </div> </a> <a href=../scenario/ class="md-footer__link md-footer__link--next" aria-label="下一页: scenario 剧本"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> scenario 剧本 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/what-is-rule-package/index.html b/dev/Standard/what-is-rule-package/index.html
index d868a2e4..cb3ac2c4 100644
--- a/dev/Standard/what-is-rule-package/index.html
+++ b/dev/Standard/what-is-rule-package/index.html
@@ -1,24 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../RulePackage/skill/fstring/ rel=prev><link href=../why-rule-package/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>什么是规则包? - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 什么是规则包? </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/what-is-rule-package.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/what-is-rule-package.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>什么是规则包?</h1> <p>规则包是水系核心用来加载的对象,可以理解为水系核心加载的一个一个规则实例。</p> <p>规则包更类似于插件的设计,所以规则包也可以是一个Python文件或者一个Python包,但它必须像插件那样继承一个像Plugin这样的类(不然无法读取,我们姑且叫这个类为Rule),以及在Rule的子类里实现一些像handle()或者rule()这样必须实现的方法(也叫函数),而这些必须实现的方法,就是我们要讨论的,一个通用规则包标准就是明确了一个继承自Rule类的子类它本身应该实现什么方法。</p> <p>举个例子(随便写的,其中一些必须实现的属性或者类名都是不确定的,以后或许会改):</p> <div class="language-python highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-1> 1</a></span>
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../RulePackage/skill/fstring/ rel=prev><link href=../why-rule-package/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>什么是规则包? - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 什么是规则包? </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/what-is-rule-package.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/what-is-rule-package.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>什么是规则包?</h1> <p>规则包是水系核心用来加载的对象,可以理解为水系核心加载的一个一个规则实例。</p> <p>规则包更类似于插件的设计,所以规则包也可以是一个Python文件或者一个Python包,但它必须像插件那样继承一个像Plugin这样的类(不然无法读取,我们姑且叫这个类为Rule),以及在Rule的子类里实现一些像handle()或者rule()这样必须实现的方法(也叫函数),而这些必须实现的方法,就是我们要讨论的,一个通用规则包标准就是明确了一个继承自Rule类的子类它本身应该实现什么方法。</p> <p>举个例子(随便写的,其中一些必须实现的属性或者类名都是不确定的,以后或许会改):</p> <div class="language-python highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-1> 1</a></span>
<span class=normal><a href=#__codelineno-0-2> 2</a></span>
<span class=normal><a href=#__codelineno-0-3> 3</a></span>
<span class=normal><a href=#__codelineno-0-4> 4</a></span>
@@ -65,4 +45,4 @@
</span><span id=__span-0-22><a id=__codelineno-0-22 name=__codelineno-0-22></a> <span class=k>return</span> <span class=bp>self</span><span class=o>.</span><span class=n>rule</span><span class=o>.</span><span class=n>ability</span><span class=o>.</span><span class=n>success</span> <span class=c1># 返回大成功时骰主自定义的大成功文本</span>
</span><span id=__span-0-23><a id=__codelineno-0-23 name=__codelineno-0-23></a> <span class=k>else</span><span class=p>:</span>
</span><span id=__span-0-24><a id=__codelineno-0-24 name=__codelineno-0-24></a> <span class=o>...</span> <span class=c1># 其他的检定情况</span>
-</span></code></pre></div></td></tr></table></div> <p>这样就实现了一个水系规则包,当pl使用检定掷骰指令时就会调用check()方法,如果检定结果数值小于5且大于0那么返回大成功。</p> <p>我们要做的通用规则包标准就是这样一个“到底需要在Rule的子类MyRule里必须实现哪些方法?”的问题。</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../RulePackage/skill/fstring/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 善用语法糖"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 善用语法糖 </div> </div> </a> <a href=../why-rule-package/ class="md-footer__link md-footer__link--next" aria-label="下一页: 为什么要做规则包?"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 为什么要做规则包? </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+</span></code></pre></div></td></tr></table></div> <p>这样就实现了一个水系规则包,当pl使用检定掷骰指令时就会调用check()方法,如果检定结果数值小于5且大于0那么返回大成功。</p> <p>我们要做的通用规则包标准就是这样一个“到底需要在Rule的子类MyRule里必须实现哪些方法?”的问题。</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../RulePackage/skill/fstring/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 善用语法糖"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 善用语法糖 </div> </div> </a> <a href=../why-rule-package/ class="md-footer__link md-footer__link--next" aria-label="下一页: 为什么要做规则包?"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 为什么要做规则包? </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/what-is-standard/index.html b/dev/Standard/what-is-standard/index.html
index 68595903..d0725a13 100644
--- a/dev/Standard/what-is-standard/index.html
+++ b/dev/Standard/what-is-standard/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../why-rule-package/ rel=prev><link href=../Term/setting/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>什么是通用规则包标准? - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 什么是通用规则包标准? </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/what-is-standard.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/what-is-standard.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>什么是通用规则包标准?</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../why-rule-package/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 为什么要做规则包?"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 为什么要做规则包? </div> </div> </a> <a href=../Term/setting/ class="md-footer__link md-footer__link--next" aria-label="下一页: setting 背景"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> setting 背景 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../why-rule-package/ rel=prev><link href=../Term/setting/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>什么是通用规则包标准? - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 什么是通用规则包标准? </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/what-is-standard.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/what-is-standard.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>什么是通用规则包标准?</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../why-rule-package/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 为什么要做规则包?"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 为什么要做规则包? </div> </div> </a> <a href=../Term/setting/ class="md-footer__link md-footer__link--next" aria-label="下一页: setting 背景"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> setting 背景 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/Standard/why-rule-package/index.html b/dev/Standard/why-rule-package/index.html
index 0204a10e..a665e5b8 100644
--- a/dev/Standard/why-rule-package/index.html
+++ b/dev/Standard/why-rule-package/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../what-is-rule-package/ rel=prev><link href=../what-is-standard/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>为什么要做规则包? - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 为什么要做规则包? </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/why-rule-package.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/why-rule-package.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>为什么要做规则包?</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../what-is-rule-package/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 什么是规则包?"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 什么是规则包? </div> </div> </a> <a href=../what-is-standard/ class="md-footer__link md-footer__link--next" aria-label="下一页: 什么是通用规则包标准?"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 什么是通用规则包标准? </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../what-is-rule-package/ rel=prev><link href=../what-is-standard/ rel=next><link rel=icon href=../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>为什么要做规则包? - infini 核心文档</title><link rel=stylesheet href=../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 为什么要做规则包? </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../../blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/Standard/why-rule-package.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/Standard/why-rule-package.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>为什么要做规则包?</h1> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../what-is-rule-package/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 什么是规则包?"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 什么是规则包? </div> </div> </a> <a href=../what-is-standard/ class="md-footer__link md-footer__link--next" aria-label="下一页: 什么是通用规则包标准?"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 什么是通用规则包标准? </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/assets/javascripts/components/_/index.ts b/dev/assets/javascripts/components/_/index.ts
deleted file mode 100644
index 3cb4c18e..00000000
--- a/dev/assets/javascripts/components/_/index.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { getElement, getElements } from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Component type
- */
-export type ComponentType =
- | "iconsearch" /* Icon search */
- | "iconsearch-query" /* Icon search input */
- | "iconsearch-result" /* Icon search results */
- | "sponsorship" /* Sponsorship */
- | "sponsorship-count" /* Sponsorship count */
- | "sponsorship-total" /* Sponsorship total */
-
-/**
- * Component
- *
- * @template T - Component type
- * @template U - Reference type
- */
-export type Component<
- T extends {} = {},
- U extends HTMLElement = HTMLElement
-> =
- T & {
- ref: U /* Component reference */
- }
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Component type map
- */
-interface ComponentTypeMap {
- "iconsearch": HTMLElement /* Icon search */
- "iconsearch-query": HTMLInputElement /* Icon search input */
- "iconsearch-result": HTMLElement /* Icon search results */
- "sponsorship": HTMLElement /* Sponsorship */
- "sponsorship-count": HTMLElement /* Sponsorship count */
- "sponsorship-total": HTMLElement /* Sponsorship total */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve the element for a given component or throw a reference error
- *
- * @template T - Component type
- *
- * @param type - Component type
- * @param node - Node of reference
- *
- * @returns Element
- */
-export function getComponentElement<T extends ComponentType>(
- type: T, node: ParentNode = document
-): ComponentTypeMap[T] {
- return getElement(`[data-mdx-component=${type}]`, node)
-}
-
-/**
- * Retrieve all elements for a given component
- *
- * @template T - Component type
- *
- * @param type - Component type
- * @param node - Node of reference
- *
- * @returns Elements
- */
-export function getComponentElements<T extends ComponentType>(
- type: T, node: ParentNode = document
-): ComponentTypeMap[T][] {
- return getElements(`[data-mdx-component=${type}]`, node)
-}
diff --git a/dev/assets/javascripts/components/iconsearch/_/index.ts b/dev/assets/javascripts/components/iconsearch/_/index.ts
deleted file mode 100644
index f509a6f9..00000000
--- a/dev/assets/javascripts/components/iconsearch/_/index.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { Observable, merge } from "rxjs"
-
-import { configuration } from "~/_"
-import { requestJSON } from "~/browser"
-
-import { Component, getComponentElement } from "../../_"
-import {
- IconSearchQuery,
- mountIconSearchQuery
-} from "../query"
-import {
- IconSearchResult,
- mountIconSearchResult
-} from "../result"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Icon category
- */
-export interface IconCategory {
- base: string /* Category base URL */
- data: Record<string, string> /* Category data */
-}
-
-/**
- * Icon search index
- */
-export interface IconSearchIndex {
- icons: IconCategory /* Icons */
- emojis: IconCategory /* Emojis */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Icon search
- */
-export type IconSearch =
- | IconSearchQuery
- | IconSearchResult
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount icon search
- *
- * @param el - Icon search element
- *
- * @returns Icon search component observable
- */
-export function mountIconSearch(
- el: HTMLElement
-): Observable<Component<IconSearch>> {
- const config = configuration()
- const index$ = requestJSON<IconSearchIndex>(
- new URL("assets/javascripts/iconsearch_index.json", config.base)
- )
-
- /* Retrieve query and result components */
- const query = getComponentElement("iconsearch-query", el)
- const result = getComponentElement("iconsearch-result", el)
-
- /* Create and return component */
- const query$ = mountIconSearchQuery(query)
- const result$ = mountIconSearchResult(result, { index$, query$ })
- return merge(query$, result$)
-}
diff --git a/dev/assets/javascripts/components/iconsearch/index.ts b/dev/assets/javascripts/components/iconsearch/index.ts
deleted file mode 100644
index 9d856774..00000000
--- a/dev/assets/javascripts/components/iconsearch/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./query"
-export * from "./result"
diff --git a/dev/assets/javascripts/components/iconsearch/query/index.ts b/dev/assets/javascripts/components/iconsearch/query/index.ts
deleted file mode 100644
index 03a3daad..00000000
--- a/dev/assets/javascripts/components/iconsearch/query/index.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- combineLatest,
- delay,
- distinctUntilChanged,
- filter,
- fromEvent,
- map,
- merge,
- startWith,
- withLatestFrom
-} from "rxjs"
-
-import { watchElementFocus } from "~/browser"
-
-import { Component } from "../../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Icon search query
- */
-export interface IconSearchQuery {
- value: string /* Query value */
- focus: boolean /* Query focus */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount icon search query
- *
- * @param el - Icon search query element
- *
- * @returns Icon search query component observable
- */
-export function mountIconSearchQuery(
- el: HTMLInputElement
-): Observable<Component<IconSearchQuery, HTMLInputElement>> {
-
- /* Intercept focus and input events */
- const focus$ = watchElementFocus(el)
- const value$ = merge(
- fromEvent(el, "keyup"),
- fromEvent(el, "focus").pipe(delay(1))
- )
- .pipe(
- map(() => el.value),
- startWith(el.value),
- distinctUntilChanged(),
- )
-
- /* Log search on blur */
- focus$
- .pipe(
- filter(active => !active),
- withLatestFrom(value$)
- )
- .subscribe(([, value]) => {
- const path = document.location.pathname
- if (typeof ga === "function" && value.length)
- ga("send", "pageview", `${path}?q=[icon]+${value}`)
- })
-
- /* Combine into single observable */
- return combineLatest([value$, focus$])
- .pipe(
- map(([value, focus]) => ({ ref: el, value, focus })),
- )
-}
diff --git a/dev/assets/javascripts/components/iconsearch/result/index.ts b/dev/assets/javascripts/components/iconsearch/result/index.ts
deleted file mode 100644
index 2b9d97fb..00000000
--- a/dev/assets/javascripts/components/iconsearch/result/index.ts
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { filter as search } from "fuzzaldrin-plus"
-import {
- Observable,
- Subject,
- bufferCount,
- combineLatest,
- distinctUntilKeyChanged,
- filter,
- finalize,
- map,
- merge,
- of,
- switchMap,
- tap,
- withLatestFrom,
- zipWith
-} from "rxjs"
-
-import {
- getElement,
- watchElementBoundary
-} from "~/browser"
-import { round } from "~/utilities"
-
-import { Icon, renderIconSearchResult } from "_/templates"
-
-import { Component } from "../../_"
-import { IconSearchIndex } from "../_"
-import { IconSearchQuery } from "../query"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Icon search result
- */
-export interface IconSearchResult {
- data: Icon[] /* Search result data */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- index$: Observable<IconSearchIndex> /* Search index observable */
- query$: Observable<IconSearchQuery> /* Search query observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- index$: Observable<IconSearchIndex> /* Search index observable */
- query$: Observable<IconSearchQuery> /* Search query observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch icon search result
- *
- * @param el - Icon search result element
- * @param options - Options
- *
- * @returns Icon search result observable
- */
-export function watchIconSearchResult(
- el: HTMLElement, { index$, query$ }: WatchOptions
-): Observable<IconSearchResult> {
- switch (el.getAttribute("data-mdx-mode")) {
-
- case "file":
- return combineLatest([
- query$.pipe(distinctUntilKeyChanged("value")),
- index$
- .pipe(
- map(({ icons }) => Object.values(icons.data)
- .map(icon => icon.replace(/\.svg$/, ""))
- )
- )
- ])
- .pipe(
- map(([{ value }, data]) => search(data, value)),
- switchMap(files => index$.pipe(
- map(({ icons }) => ({
- data: files.map<Icon>(shortcode => {
- return {
- shortcode,
- url: [
- icons.base,
- shortcode,
- ".svg"
- ].join("")
- }
- })
- }))
- ))
- )
-
- default:
- return combineLatest([
- query$.pipe(distinctUntilKeyChanged("value")),
- index$
- .pipe(
- map(({ icons, emojis }) => [
- ...Object.keys(icons.data),
- ...Object.keys(emojis.data)
- ])
- )
- ])
- .pipe(
- map(([{ value }, data]) => search(data, value)),
- switchMap(shortcodes => index$.pipe(
- map(({ icons, emojis }) => ({
- data: shortcodes.map<Icon>(shortcode => {
- const category =
- shortcode in icons.data
- ? icons
- : emojis
- return {
- shortcode,
- url: [
- category.base,
- category.data[shortcode]
- ].join("")
- }
- })
- }))
- ))
- )
- }
-}
-
-/**
- * Mount icon search result
- *
- * @param el - Icon search result element
- * @param options - Options
- *
- * @returns Icon search result component observable
- */
-export function mountIconSearchResult(
- el: HTMLElement, { index$, query$ }: MountOptions
-): Observable<Component<IconSearchResult, HTMLElement>> {
- const push$ = new Subject<IconSearchResult>()
- const boundary$ = watchElementBoundary(el)
- .pipe(
- filter(Boolean)
- )
-
- /* Update search result metadata */
- const meta = getElement(":scope > :first-child", el)
- push$
- .pipe(
- withLatestFrom(query$)
- )
- .subscribe(([{ data }, { value }]) => {
- if (value) {
- switch (data.length) {
-
- /* No results */
- case 0:
- meta.textContent = "No matches"
- break
-
- /* One result */
- case 1:
- meta.textContent = "1 match"
- break
-
- /* Multiple result */
- default:
- meta.textContent = `${round(data.length)} matches`
- }
- } else {
- meta.textContent = "Type to start searching"
- }
- })
-
- /* Update icon search result list */
- const file = el.getAttribute("data-mdx-mode") === "file"
- const list = getElement(":scope > :last-child", el)
- push$
- .pipe(
- tap(() => list.innerHTML = ""),
- switchMap(({ data }) => merge(
- of(...data.slice(0, 10)),
- of(...data.slice(10))
- .pipe(
- bufferCount(10),
- zipWith(boundary$),
- switchMap(([chunk]) => chunk)
- )
- )),
- withLatestFrom(query$)
- )
- .subscribe(([result, { value }]) => list.appendChild(
- renderIconSearchResult(result, value, file)
- ))
-
- /* Create and return component */
- return watchIconSearchResult(el, { query$, index$ })
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
-}
diff --git a/dev/assets/javascripts/components/index.ts b/dev/assets/javascripts/components/index.ts
deleted file mode 100644
index ec6c9dce..00000000
--- a/dev/assets/javascripts/components/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./iconsearch"
-export * from "./sponsorship"
diff --git a/dev/assets/javascripts/components/sponsorship/index.ts b/dev/assets/javascripts/components/sponsorship/index.ts
deleted file mode 100644
index 711f423a..00000000
--- a/dev/assets/javascripts/components/sponsorship/index.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { Observable, map } from "rxjs"
-
-import { getElement, requestJSON } from "~/browser"
-
-import { renderPrivateSponsor, renderPublicSponsor } from "_/templates"
-
-import { Component, getComponentElement } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Sponsor type
- */
-export type SponsorType =
- | "user" /* Sponsor is a user */
- | "organization" /* Sponsor is an organization */
-
-/**
- * Sponsor visibility
- */
-export type SponsorVisibility =
- | "public" /* Sponsor is a user */
- | "private" /* Sponsor is an organization */
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Sponsor user
- */
-export interface SponsorUser {
- type: SponsorType /* Sponsor type */
- name: string /* Sponsor login name */
- image: string /* Sponsor image URL */
- url: string /* Sponsor URL */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Public sponsor
- */
-export interface PublicSponsor {
- type: "public" /* Sponsor visibility */
- user: SponsorUser /* Sponsor user */
-}
-
-/**
- * Private sponsor
- */
-export interface PrivateSponsor {
- type: "private" /* Sponsor visibility */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Sponsor
- */
-export type Sponsor =
- | PublicSponsor
- | PrivateSponsor
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Sponsorship
- */
-export interface Sponsorship {
- sponsors: Sponsor[] /* Sponsors */
- total: number /* Total amount */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount sponsorship
- *
- * @param el - Sponsorship element
- *
- * @returns Sponsorship component observable
- */
-export function mountSponsorship(
- el: HTMLElement
-): Observable<Component<Sponsorship>> {
- const sponsorship$ = requestJSON<Sponsorship>(
- "https://3if8u9o552.execute-api.us-east-1.amazonaws.com/_/"
- )
-
- /* Retrieve adjacent components */
- const count = getComponentElement("sponsorship-count")
- const total = getComponentElement("sponsorship-total")
-
- /* Render sponsorship */
- sponsorship$.subscribe(sponsorship => {
- el.removeAttribute("hidden")
-
- /* Render public sponsors with avatar and links */
- const list = getElement(":scope > :first-child", el)
- for (const sponsor of sponsorship.sponsors)
- if (sponsor.type === "public")
- list.appendChild(renderPublicSponsor(sponsor.user))
-
- /* Render combined private sponsors */
- list.appendChild(renderPrivateSponsor(
- sponsorship.sponsors.filter(({ type }) => (
- type === "private"
- )).length
- ))
-
- /* Render sponsorship count and total */
- count.innerText = `${sponsorship.sponsors.length}`
- total.innerText = `$ ${sponsorship.total
- .toString()
- .replace(/\B(?=(\d{3})+(?!\d))/g, ",")
- } a month`
- })
-
- // /* Create and return component */
- return sponsorship$
- .pipe(
- map(state => ({ ref: el, ...state }))
- )
-}
diff --git a/dev/src/material/overrides/assets/javascripts/custom.9c11c319.min.js b/dev/assets/javascripts/custom.9c11c319.min.js
index 3ae7f9d1..3ae7f9d1 100644
--- a/dev/src/material/overrides/assets/javascripts/custom.9c11c319.min.js
+++ b/dev/assets/javascripts/custom.9c11c319.min.js
diff --git a/dev/src/material/overrides/assets/javascripts/custom.9c11c319.min.js.map b/dev/assets/javascripts/custom.9c11c319.min.js.map
index 37bc358e..37bc358e 100644
--- a/dev/src/material/overrides/assets/javascripts/custom.9c11c319.min.js.map
+++ b/dev/assets/javascripts/custom.9c11c319.min.js.map
diff --git a/dev/assets/javascripts/custom.ts b/dev/assets/javascripts/custom.ts
deleted file mode 100644
index 7c3c3847..00000000
--- a/dev/assets/javascripts/custom.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { merge, switchMap } from "rxjs"
-
-import {
- getComponentElements,
- mountIconSearch,
- mountSponsorship
-} from "./components"
-import { setupAnalytics } from "./integrations"
-
-/* ----------------------------------------------------------------------------
- * Application
- * ------------------------------------------------------------------------- */
-
-/* Set up extra analytics events */
-setupAnalytics()
-
-/* Set up extra component observables */
-const component$ = document$
- .pipe(
- switchMap(() => merge(
-
- /* Icon search */
- ...getComponentElements("iconsearch")
- .map(el => mountIconSearch(el)),
-
- /* Sponsorship */
- ...getComponentElements("sponsorship")
- .map(el => mountSponsorship(el))
- ))
- )
-
-/* Subscribe to all components */
-component$.subscribe()
diff --git a/dev/src/material/overrides/assets/javascripts/iconsearch_index.json b/dev/assets/javascripts/iconsearch_index.json
index 64305ef9..64305ef9 100644
--- a/dev/src/material/overrides/assets/javascripts/iconsearch_index.json
+++ b/dev/assets/javascripts/iconsearch_index.json
diff --git a/dev/assets/javascripts/integrations/analytics/index.ts b/dev/assets/javascripts/integrations/analytics/index.ts
deleted file mode 100644
index 658add2a..00000000
--- a/dev/assets/javascripts/integrations/analytics/index.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { fromEvent } from "rxjs"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Set up extra analytics events
- */
-export function setupAnalytics(): void {
- const { origin } = new URL(location.href)
- fromEvent(document.body, "click")
- .subscribe(ev => {
- if (ev.target instanceof HTMLElement) {
- const el = ev.target.closest("a")
- if (el && el.origin !== origin)
- ga("send", "event", "outbound", "click", el.href)
- }
- })
-}
diff --git a/dev/assets/javascripts/integrations/index.ts b/dev/assets/javascripts/integrations/index.ts
deleted file mode 100644
index 9179f2a2..00000000
--- a/dev/assets/javascripts/integrations/index.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./analytics"
diff --git a/dev/assets/javascripts/templates/iconsearch/index.tsx b/dev/assets/javascripts/templates/iconsearch/index.tsx
deleted file mode 100644
index 13cafa6d..00000000
--- a/dev/assets/javascripts/templates/iconsearch/index.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { wrap } from "fuzzaldrin-plus"
-
-import { translation } from "~/_"
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Icon
- */
-export interface Icon {
- shortcode: string /* Icon shortcode */
- url: string /* Icon URL */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Highlight an icon search result
- *
- * @param icon - Icon
- * @param query - Search query
- *
- * @returns Highlighted result
- */
-function highlight(icon: Icon, query: string): string {
- return wrap(icon.shortcode, query, {
- wrap: {
- tagOpen: "<b>",
- tagClose: "</b>"
- }
- })
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render an icon search result
- *
- * @param icon - Icon
- * @param query - Search query
- * @param file - Render as file
- *
- * @returns Element
- */
-export function renderIconSearchResult(
- icon: Icon, query: string, file?: boolean
-): HTMLElement {
- return (
- <li class="mdx-iconsearch-result__item">
- <span class="twemoji">
- <img src={icon.url} />
- </span>
- <button
- class="md-clipboard--inline"
- title={translation("clipboard.copy")}
- data-clipboard-text={file ? icon.shortcode : `:${icon.shortcode}:`}
- >
- <code>{
- file
- ? highlight(icon, query)
- : `:${highlight(icon, query)}:`
- }</code>
- </button>
- </li>
- )
-}
diff --git a/dev/assets/javascripts/templates/index.ts b/dev/assets/javascripts/templates/index.ts
deleted file mode 100644
index 02376b3d..00000000
--- a/dev/assets/javascripts/templates/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./iconsearch"
-export * from "./sponsorship"
diff --git a/dev/assets/javascripts/templates/sponsorship/index.tsx b/dev/assets/javascripts/templates/sponsorship/index.tsx
deleted file mode 100644
index 7891c2e0..00000000
--- a/dev/assets/javascripts/templates/sponsorship/index.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { h } from "~/utilities"
-
-import { SponsorUser } from "_/components"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render public sponsor
- *
- * @param user - Sponsor user
- *
- * @returns Element
- */
-export function renderPublicSponsor(
- user: SponsorUser
-): HTMLElement {
- const title = `@${user.name}`
- return (
- <a href={user.url} title={title} class="mdx-sponsorship__item">
- <img src={user.image} />
- </a>
- )
-}
-
-/**
- * Render private sponsor
- *
- * @param count - Number of private sponsors
- *
- * @returns Element
- */
-export function renderPrivateSponsor(
- count: number
-): HTMLElement {
- return (
- <a
- href="https://github.com/sponsors/squidfunk?metadata_origin=docs"
- class="mdx-sponsorship__item mdx-sponsorship__item--private"
- >
- +{count}
- </a>
- )
-}
diff --git a/dev/src/material/overrides/assets/stylesheets/custom.00c04c01.min.css b/dev/assets/stylesheets/custom.00c04c01.min.css
index 3d441c39..3d441c39 100644
--- a/dev/src/material/overrides/assets/stylesheets/custom.00c04c01.min.css
+++ b/dev/assets/stylesheets/custom.00c04c01.min.css
diff --git a/dev/src/material/overrides/assets/stylesheets/custom.00c04c01.min.css.map b/dev/assets/stylesheets/custom.00c04c01.min.css.map
index 7937fd51..7937fd51 100644
--- a/dev/src/material/overrides/assets/stylesheets/custom.00c04c01.min.css.map
+++ b/dev/assets/stylesheets/custom.00c04c01.min.css.map
diff --git a/dev/assets/stylesheets/custom.scss b/dev/assets/stylesheets/custom.scss
deleted file mode 100644
index 8235e7d0..00000000
--- a/dev/assets/stylesheets/custom.scss
+++ /dev/null
@@ -1,44 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Dependencies
-// ----------------------------------------------------------------------------
-
-@import "material-color";
-@import "material-shadows";
-
-// ----------------------------------------------------------------------------
-// Local imports
-// ----------------------------------------------------------------------------
-
-@import "utilities/break";
-@import "utilities/convert";
-
-@import "config";
-
-@import "custom/typeset";
-
-@import "custom/layout/banner";
-@import "custom/layout/hero";
-@import "custom/layout/iconsearch";
-@import "custom/layout/sponsorship";
diff --git a/dev/assets/stylesheets/custom/_typeset.scss b/dev/assets/stylesheets/custom/_typeset.scss
deleted file mode 100644
index bef30073..00000000
--- a/dev/assets/stylesheets/custom/_typeset.scss
+++ /dev/null
@@ -1,294 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Keyframes
-// ----------------------------------------------------------------------------
-
-// Pumping heart animation
-@keyframes heart {
- 0%,
- 40%,
- 80%,
- 100% {
- transform: scale(1);
- }
-
- 20%,
- 60% {
- transform: scale(1.15);
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Twitter icon
- .twitter {
- color: #00acee;
- }
-
- // Mastodon icon - it's not the exact brand color, because that doesn't work
- // well on dark backgrounds, so we lightened it up a bit.
- .mastodon {
- color: #897ff8;
- }
-
- // Insiders video
- .mdx-video {
- width: auto;
-
- // Insiders video container
- &__inner {
- position: relative;
- width: 100%;
- height: 0;
- padding-bottom: 56.138%;
- }
-
- // Insiders video iframe
- iframe {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- overflow: hidden;
- border: none;
- }
- }
-
- // Pumping heart
- .mdx-heart {
- animation: heart 1000ms infinite;
- }
-
- // Insiders color (for links, etc.) // remove
- .mdx-insiders {
- color: $clr-pink-500;
- }
-
- // BETA #####################################################################
-
- // Badge
- .mdx-badge {
- font-size: 0.85em;
-
- // Badge with heart
- &--heart {
- --md-typeset-a-color: hsla(#{hex2hsl($clr-pink-500)}, 1);
- --md-accent-fg-color: hsla(#{hex2hsl($clr-pink-a200)}, 1);
- --md-accent-fg-color--transparent: hsla(#{hex2hsl($clr-pink-500)}, 0.1);
-
- // Animate icon
- .twemoji {
- animation: heart 1000ms infinite;
- }
- }
-
- // Badge moved to the right
- &--right {
- float: right;
- margin-left: 0.35em;
- }
-
- // Badge icon
- &__icon {
- padding: px2rem(4px);
- background: var(--md-accent-fg-color--transparent);
- border-start-start-radius: px2rem(2px);
- border-end-start-radius: px2rem(2px);
-
- // If icon is alone, round corners
- &:last-child {
- border-radius: px2rem(2px);
- }
- }
-
- // Badge text
- &__text {
- padding: px2rem(4px) px2rem(6px);
- border-start-end-radius: px2rem(2px);
- border-end-end-radius: px2rem(2px);
- box-shadow: 0 0 0 1px inset var(--md-accent-fg-color--transparent);
- }
- }
-
- // BETA #####################################################################
-
- // Switch buttons
- .mdx-switch button {
- cursor: pointer;
- transition: opacity 250ms;
-
- // Button on focus/hover
- &:is(:focus, :hover) {
- opacity: 0.75;
- }
-
- // Code block
- > code {
- display: block;
- color: var(--md-primary-bg-color);
- background-color: var(--md-primary-fg-color);
- }
- }
-
- // Two-column layout
- .mdx-columns {
-
- // Column
- ol,
- ul {
- columns: 2;
-
- // [mobile portrait -]: Reset columns on mobile
- @include break-to-device(mobile portrait) {
- columns: initial;
- }
- }
-
- // Column item
- li {
- break-inside: avoid;
- }
- }
-
- // Language list
- .mdx-flags {
- margin: 2em auto;
-
- // Language list
- ol {
- list-style: none;
-
- // Language list item
- li {
- margin-bottom: 1em;
- }
- }
-
- // Language item
- &__item {
- display: flex;
- gap: px2rem(12px);
- }
-
- // Language content
- &__content {
- display: flex;
- flex: 1;
- flex-direction: column;
-
- // Language name
- span {
- display: inline-flex;
- align-items: baseline;
- justify-content: space-between;
- }
-
- // Language link
- > span:nth-child(2) {
- font-size: 80%;
- }
-
- // Language code
- code {
- float: right;
- }
- }
- }
-
- // Social card
- .mdx-social {
- position: relative;
- height: min(#{px2rem(540px)}, 80vw);
-
- // Social card image on hover
- &:hover .mdx-social__image {
- background-color: rgba(228, 228, 228, 0.05);
- }
-
- // Social card layer
- &__layer {
- position: absolute;
- margin-top: px2rem(80px);
- transition: 250ms cubic-bezier(0.7, 0, 0.3, 1);
- transform-style: preserve-3d;
-
- // Social card layer on hover
- &:hover {
-
- // Social card label
- .mdx-social__label {
- opacity: 1;
- }
-
- // Social card image
- .mdx-social__image {
- background-color: rgba(127, 127, 127, 0.99);
- }
-
- // Hide top layers
- ~ .mdx-social__layer {
- opacity: 0;
- }
- }
- }
-
- // Social card image
- &__image {
- box-shadow:
- px2rem(-5px) px2rem(5px) px2rem(10px)
- rgba(0, 0, 0, 0.05);
- transition: all 250ms;
- transform: rotate(-40deg) skew(15deg, 15deg) scale(0.7);
-
- // Actual image
- img {
- display: block;
- }
- }
-
- // Social card label
- &__label {
- position: absolute;
- display: block;
- padding: px2rem(4px) px2rem(8px);
- color: var(--md-default-bg-color);
- background-color: var(--md-default-fg-color--light);
- opacity: 0;
- transition: all 250ms;
- }
-
- // Transform on hover
- @for $i from 6 through 0 {
- &:hover .mdx-social__layer:nth-child(#{$i}) {
- transform: translateY(#{($i - 3) * -10}px);
- }
- }
- }
-}
diff --git a/dev/assets/stylesheets/custom/layout/_banner.scss b/dev/assets/stylesheets/custom/layout/_banner.scss
deleted file mode 100644
index b67d7fff..00000000
--- a/dev/assets/stylesheets/custom/layout/_banner.scss
+++ /dev/null
@@ -1,66 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Banner for announcements and warnings
-.md-banner {
- color: var(--md-footer-fg-color--lighter);
-
- // Don't wrap name of blog article
- strong {
- color: var(--md-footer-fg-color);
- white-space: nowrap;
- }
-
- a {
- color: var(--md-footer-fg-color);
-
- &:focus,
- &:hover {
- color: currentcolor;
-
- .twemoji {
- background-color: var(--md-footer-fg-color);
- box-shadow: none;
- }
- }
- }
-
- .twemoji {
- display: inline-block;
- width: px2rem(24px);
- height: px2rem(24px);
- padding: px2rem(5px);
- vertical-align: bottom;
- border-radius: 100%;
- box-shadow: 0 0 0 px2rem(1px) currentcolor inset;
- transition: all 250ms;
-
- svg {
- display: block;
- max-height: initial;
- }
- }
-}
diff --git a/dev/assets/stylesheets/custom/layout/_hero.scss b/dev/assets/stylesheets/custom/layout/_hero.scss
deleted file mode 100644
index 428cd37e..00000000
--- a/dev/assets/stylesheets/custom/layout/_hero.scss
+++ /dev/null
@@ -1,123 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Landing page container
-.mdx-container {
- padding-top: px2rem(20px);
- background:
- url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(0, 0%, 100%, 1)' /></svg>") no-repeat bottom,
- linear-gradient(
- to bottom,
- var(--md-primary-fg-color),
- hsla(280, 67%, 55%, 1) 99%,
- var(--md-default-bg-color) 99%
- );
-
- // Adjust background for slate theme
- [data-md-color-scheme="slate"] & {
- background:
- url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(230, 15%, 14%, 1)' /></svg>") no-repeat bottom,
- linear-gradient(
- to bottom,
- var(--md-primary-fg-color),
- hsla(230, 15%, 25%, 1) 99%,
- var(--md-default-bg-color) 99%
- );
- }
-}
-
-// Landing page hero
-.mdx-hero {
- margin: 0 px2rem(16px);
- color: var(--md-primary-bg-color);
-
- // Hero headline
- h1 {
- margin-bottom: px2rem(20px);
- font-weight: 700;
- color: currentcolor;
-
- // [mobile portrait -]: Larger hero headline
- @include break-to-device(mobile portrait) {
- font-size: px2rem(28px);
- }
- }
-
- // Hero content
- &__content {
- padding-bottom: px2rem(120px);
- }
-
- // [tablet landscape +]: Columnar display
- @include break-from-device(tablet landscape) {
- display: flex;
- align-items: stretch;
-
- // Adjust spacing and set dimensions
- &__content {
- max-width: px2rem(380px);
- padding-bottom: 14vw;
- margin-top: px2rem(70px);
- }
-
- // Hero image
- &__image {
- order: 1;
- width: px2rem(760px);
- transform: translateX(#{px2rem(80px)});
- }
- }
-
- // [screen +]: Columnar display and adjusted spacing
- @include break-from-device(screen) {
-
- // Hero image
- &__image {
- transform: translateX(#{px2rem(160px)});
- }
- }
-
- // Button
- .md-button {
- margin-top: px2rem(10px);
- margin-right: px2rem(10px);
- color: var(--md-primary-bg-color);
-
- // Button on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-bg-color);
- background-color: var(--md-accent-fg-color);
- border-color: var(--md-accent-fg-color);
- }
-
- // Primary button
- &--primary {
- color: hsla(280, 37%, 48%, 1);
- background-color: var(--md-primary-bg-color);
- border-color: var(--md-primary-bg-color);
- }
- }
-}
diff --git a/dev/assets/stylesheets/custom/layout/_iconsearch.scss b/dev/assets/stylesheets/custom/layout/_iconsearch.scss
deleted file mode 100644
index 651c4135..00000000
--- a/dev/assets/stylesheets/custom/layout/_iconsearch.scss
+++ /dev/null
@@ -1,136 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Icon search
- .mdx-iconsearch {
- position: relative;
- background-color: var(--md-default-bg-color);
- border-radius: px2rem(2px);
- box-shadow: var(--md-shadow-z1);
- transition: box-shadow 125ms;
-
- // Icon search on focus/hover
- &:is(:focus-within, :hover) {
- box-shadow: var(--md-shadow-z2);
- }
-
- // Icon search input
- .md-input {
- background: var(--md-default-bg-color);
- box-shadow: none;
-
- // Slate theme, i.e. dark mode
- [data-md-color-scheme="slate"] & {
- background: var(--md-code-bg-color);
- }
- }
- }
-
- // Icon search result
- .mdx-iconsearch-result {
- max-height: 50vh;
- overflow-y: auto;
- // Hack: promote to own layer to reduce jitter
- backface-visibility: hidden;
- touch-action: pan-y;
- scrollbar-width: thin;
- scrollbar-color: var(--md-default-fg-color--lighter) transparent;
-
- // Icon search result inside tooltip
- .md-tooltip & {
- max-height: px2rem(205px);
- }
-
- // Webkit scrollbar
- &::-webkit-scrollbar {
- width: px2rem(4px);
- height: px2rem(4px);
- }
-
- // Webkit scrollbar thumb
- &::-webkit-scrollbar-thumb {
- background-color: var(--md-default-fg-color--lighter);
-
- // Webkit scrollbar thumb on hover
- &:hover {
- background-color: var(--md-accent-fg-color);
- }
- }
-
- // Icon search result metadata
- &__meta {
- position: absolute;
- top: px2rem(8px);
- right: px2rem(12px);
- font-size: px2rem(12.8px);
- color: var(--md-default-fg-color--lighter);
- }
-
- // Icon search result list
- &__list {
- padding: 0;
- margin: 0;
- // Hack: necessary because of increased specificity due to the PostCSS
- // plugin which prefixes this with `[dir=...]` selectors.
- margin-inline-start: 0;
- list-style: none;
- }
-
- // Icon search result item
- &__item {
- padding: px2rem(4px) px2rem(12px);
- margin: 0;
- // Hack: necessary because of increased specificity due to the PostCSS
- // plugin which prefixes this with `[dir=...]` selectors.
- margin-inline-start: 0;
- border-bottom: px2rem(1px) solid var(--md-default-fg-color--lightest);
-
- // Omit border on last child
- &:last-child {
- border-bottom: none;
- }
-
- // Item content
- > * {
- margin-right: px2rem(12px);
- }
-
- // Set icon dimensions to fit
- img {
- width: px2rem(18px);
- height: px2rem(18px);
-
- // Slate theme, i.e. dark mode
- [data-md-color-scheme="slate"] &[src*="squidfunk"] {
- filter: invert(1); /* stylelint-disable-line */
- }
- }
- }
- }
-}
diff --git a/dev/assets/stylesheets/custom/layout/_sponsorship.scss b/dev/assets/stylesheets/custom/layout/_sponsorship.scss
deleted file mode 100644
index e2b16570..00000000
--- a/dev/assets/stylesheets/custom/layout/_sponsorship.scss
+++ /dev/null
@@ -1,128 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Premium sponsors
- .mdx-premium {
-
- // Paragraphs
- p {
- margin: 2em 0;
- text-align: center;
- }
-
- // Premium sponsor image
- img {
- height: px2rem(65px);
- }
-
- // Premium sponsor list
- p:last-child {
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
-
- // Premium sponsor link
- > a {
- display: block;
- flex-shrink: 0;
- }
- }
- }
-
- // Sponsorship
- .mdx-sponsorship {
-
- // Sponsorship list
- &__list {
- margin: 2em 0;
-
- // Clearfix, because we can't use overflow: auto
- &::after {
- display: block;
- clear: both;
- content: "";
- }
- }
-
- // Sponsorship item
- &__item {
- display: block;
- float: inline-start;
- width: px2rem(32px);
- height: px2rem(32px);
- margin: px2rem(4px);
- overflow: hidden;
- border-radius: 100%;
- transition:
- color 125ms,
- transform 125ms;
- transform: scale(1);
-
- // Sponsor item on focus/hover
- &:is(:focus, :hover) {
- transform: scale(1.1);
-
- // Sponsor avatar
- img {
- filter: grayscale(0%);
- }
- }
-
- // Private sponsor
- &--private {
- font-size: px2rem(12px);
- font-weight: 700;
- line-height: px2rem(32px);
- color: var(--md-default-fg-color--lighter);
- text-align: center;
- background: var(--md-default-fg-color--lightest);
- }
-
- // Sponsor avatar
- img {
- display: block;
- width: 100%;
- height: auto;
- filter: grayscale(100%) opacity(75%);
- transition: filter 125ms;
- }
- }
- }
-
- // Sponsorship button
- .mdx-sponsorship-button {
- font-weight: 400;
- }
-
- // Sponsorship count and total
- .mdx-sponsorship-count,
- .mdx-sponsorship-total {
- font-weight: 700;
- }
-}
diff --git a/dev/blog/2023/10/07/rule-基类已经支持泛型了/index.html b/dev/blog/2023/10/07/rule-基类已经支持泛型了/index.html
index b97c7cd9..cdb120c2 100644
--- a/dev/blog/2023/10/07/rule-基类已经支持泛型了/index.html
+++ b/dev/blog/2023/10/07/rule-基类已经支持泛型了/index.html
@@ -1,25 +1,5 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Rule 基类已经支持泛型了。
-"><meta name=author content=HsiangNianian><link rel=icon href=../../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Rule 基类已经支持泛型了 - infini 核心文档</title><link rel=stylesheet href=../../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../../css/timeago.css><link rel=stylesheet href=../../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#rule class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Rule 基类已经支持泛型了 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../../ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation hidden> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8 checked> <div class="md-nav__link md-nav__container"> <a href=../../../../ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=true> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#quick-start class=md-nav__link> <span class=md-ellipsis> Quick start </span> </a> <nav class=md-nav aria-label="Quick start"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#creating-a-standalone-blog class=md-nav__link> <span class=md-ellipsis> Creating a standalone blog </span> </a> <nav class=md-nav aria-label="Creating a standalone blog"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#configuration class=md-nav__link> <span class=md-ellipsis> Configuration </span> </a> </li> <li class=md-nav__item> <a href=#blog-setup class=md-nav__link> <span class=md-ellipsis> Blog setup </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#writing-your-first-post class=md-nav__link> <span class=md-ellipsis> Writing your first post </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#whats-next class=md-nav__link> <span class=md-ellipsis> What's next? </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-content md-content--post" data-md-component=content> <div class="md-sidebar md-sidebar--post" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class="md-sidebar__inner md-post"> <nav class="md-nav md-nav--primary"> <div class=md-post__back> <div class="md-nav__title md-nav__container"> <a href=../../../../ class=md-nav__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> <span class=md-ellipsis> 回到主页 </span> </a> </div> </div> <div class="md-post__authors md-typeset"> <div class="md-profile md-post__profile"> <span class="md-author md-author--long"> <img src=https://github.com/HsiangNianian.png alt=简律纯> </span> <span class=md-profile__description> <strong> 简律纯 </strong> <br> Leader </span> </div> </div> <ul class="md-post__meta md-nav__list"> <li class="md-nav__item md-nav__item--section"> <div class=md-post__title> <span class=md-ellipsis> 元数据 </span> </div> <nav class=md-nav> <ul class=md-nav__list> <li class=md-nav__item> <div class=md-nav__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 19H5V8h14m-3-7v2H8V1H6v2H5c-1.11 0-2 .89-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2h-1V1m-1 11h-5v5h5v-5Z"/></svg> <time datetime="2023-10-07 00:00:00" class=md-ellipsis>2023年10月7日</time> </div> </li> <li class=md-nav__item> <div class=md-nav__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9 3v15h3V3H9m3 2 4 13 3-1-4-13-3 1M5 5v13h3V5H5M3 19v2h18v-2H3Z"/></svg> <span class=md-ellipsis> 分类于 <a href=../../../../category/rules/ >Rules</a></span> </div> </li> <li class=md-nav__item> <div class=md-nav__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 20a8 8 0 0 0 8-8 8 8 0 0 0-8-8 8 8 0 0 0-8 8 8 8 0 0 0 8 8m0-18a10 10 0 0 1 10 10 10 10 0 0 1-10 10C6.47 22 2 17.5 2 12A10 10 0 0 1 12 2m.5 5v5.25l4.5 2.67-.75 1.23L11 13V7h1.5Z"/></svg> <span class=md-ellipsis> 需要 5 分钟阅读时间 </span> </div> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/blog/posts/rules-class-just-landed.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/blog/posts/rules-class-just-landed.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1 id=rule>Rule 基类已经支持泛型了<a class=headerlink href=#rule title="Permanent link">⚓</a></h1> <p><strong>Hey there! You're looking at our new blog, built with the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>. With this plugin, you can easily build a blog alongside your documentation or standalone.</strong></p> <p>Proper support for blogging, as requested by many users over the past few years, was something that was desperately missing from Material for MkDocs' feature set. While everybody agreed that blogging support was a blind spot, it was not obvious whether MkDocs could be extended in a way to allow for blogging as we know it from <a href=https://jekyllrb.com/ >Jekyll</a> and friends. The <a href=../../plugins/blog.md>built-in blog plugin</a> proves that it is, after all, possible to build a blogging engine on top of MkDocs, in order to create a technical blog alongside your documentation, or as the main thing.</p> <!-- more --> <p><em>This article explains how to build a standalone blog with Material for MkDocs. If you want to build a blog alongside your documentation, please refer to <a href=../../plugins/blog.md>the plugin's documentation</a>.</em></p> <h2 id=quick-start>Quick start<a class=headerlink href=#quick-start title="Permanent link">⚓</a></h2> <h3 id=creating-a-standalone-blog>Creating a standalone blog<a class=headerlink href=#creating-a-standalone-blog title="Permanent link">⚓</a></h3> <p>You can bootstrap a new project using the <code>mkdocs</code> executable:</p> <div class="language-text highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1></a>mkdocs new .
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Rule 基类已经支持泛型了。
+"><meta name=author content=HsiangNianian><link rel=icon href=../../../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Rule 基类已经支持泛型了 - infini 核心文档</title><link rel=stylesheet href=../../../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../../../css/timeago.css><link rel=stylesheet href=../../../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../../../stylesheets/extra.css><script>__md_scope=new URL("../../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#rule class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Rule 基类已经支持泛型了 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../../../ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation hidden> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8 checked> <div class="md-nav__link md-nav__container"> <a href=../../../../ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=true> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#quick-start class=md-nav__link> <span class=md-ellipsis> Quick start </span> </a> <nav class=md-nav aria-label="Quick start"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#creating-a-standalone-blog class=md-nav__link> <span class=md-ellipsis> Creating a standalone blog </span> </a> <nav class=md-nav aria-label="Creating a standalone blog"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#configuration class=md-nav__link> <span class=md-ellipsis> Configuration </span> </a> </li> <li class=md-nav__item> <a href=#blog-setup class=md-nav__link> <span class=md-ellipsis> Blog setup </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#writing-your-first-post class=md-nav__link> <span class=md-ellipsis> Writing your first post </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#whats-next class=md-nav__link> <span class=md-ellipsis> What's next? </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-content md-content--post" data-md-component=content> <div class="md-sidebar md-sidebar--post" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class="md-sidebar__inner md-post"> <nav class="md-nav md-nav--primary"> <div class=md-post__back> <div class="md-nav__title md-nav__container"> <a href=../../../../ class=md-nav__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> <span class=md-ellipsis> 回到主页 </span> </a> </div> </div> <div class="md-post__authors md-typeset"> <div class="md-profile md-post__profile"> <span class="md-author md-author--long"> <img src=https://github.com/HsiangNianian.png alt=简律纯> </span> <span class=md-profile__description> <strong> 简律纯 </strong> <br> Leader </span> </div> </div> <ul class="md-post__meta md-nav__list"> <li class="md-nav__item md-nav__item--section"> <div class=md-post__title> <span class=md-ellipsis> 元数据 </span> </div> <nav class=md-nav> <ul class=md-nav__list> <li class=md-nav__item> <div class=md-nav__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 19H5V8h14m-3-7v2H8V1H6v2H5c-1.11 0-2 .89-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2h-1V1m-1 11h-5v5h5v-5Z"/></svg> <time datetime="2023-10-07 00:00:00" class=md-ellipsis>2023年10月7日</time> </div> </li> <li class=md-nav__item> <div class=md-nav__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9 3v15h3V3H9m3 2 4 13 3-1-4-13-3 1M5 5v13h3V5H5M3 19v2h18v-2H3Z"/></svg> <span class=md-ellipsis> 分类于 <a href=../../../../category/rules/ >Rules</a></span> </div> </li> <li class=md-nav__item> <div class=md-nav__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 20a8 8 0 0 0 8-8 8 8 0 0 0-8-8 8 8 0 0 0-8 8 8 8 0 0 0 8 8m0-18a10 10 0 0 1 10 10 10 10 0 0 1-10 10C6.47 22 2 17.5 2 12A10 10 0 0 1 12 2m.5 5v5.25l4.5 2.67-.75 1.23L11 13V7h1.5Z"/></svg> <span class=md-ellipsis> 需要 5 分钟阅读时间 </span> </div> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/blog/posts/rules-class-just-landed.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/blog/posts/rules-class-just-landed.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1 id=rule>Rule 基类已经支持泛型了<a class=headerlink href=#rule title="Permanent link">⚓</a></h1> <p><strong>Hey there! You're looking at our new blog, built with the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>. With this plugin, you can easily build a blog alongside your documentation or standalone.</strong></p> <p>Proper support for blogging, as requested by many users over the past few years, was something that was desperately missing from Material for MkDocs' feature set. While everybody agreed that blogging support was a blind spot, it was not obvious whether MkDocs could be extended in a way to allow for blogging as we know it from <a href=https://jekyllrb.com/ >Jekyll</a> and friends. The <a href=../../plugins/blog.md>built-in blog plugin</a> proves that it is, after all, possible to build a blogging engine on top of MkDocs, in order to create a technical blog alongside your documentation, or as the main thing.</p> <!-- more --> <p><em>This article explains how to build a standalone blog with Material for MkDocs. If you want to build a blog alongside your documentation, please refer to <a href=../../plugins/blog.md>the plugin's documentation</a>.</em></p> <h2 id=quick-start>Quick start<a class=headerlink href=#quick-start title="Permanent link">⚓</a></h2> <h3 id=creating-a-standalone-blog>Creating a standalone blog<a class=headerlink href=#creating-a-standalone-blog title="Permanent link">⚓</a></h3> <p>You can bootstrap a new project using the <code>mkdocs</code> executable:</p> <div class="language-text highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1></a>mkdocs new .
</span></code></pre></div></td></tr></table></div> <p>This will create the following structure:</p> <div class="language-sh no-copy highlight"><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-1-1>1</a></span>
<span class=normal><a href=#__codelineno-1-2>2</a></span>
<span class=normal><a href=#__codelineno-1-3>3</a></span>
@@ -123,4 +103,4 @@
</span><span id=__span-5-29><a id=__codelineno-5-29 name=__codelineno-5-29></a><span class="l l-Scalar l-Scalar-Plain">arcu tincidunt pulvinar. Vestibulum laoreet risus scelerisque porta congue.</span>
</span><span id=__span-5-30><a id=__codelineno-5-30 name=__codelineno-5-30></a><span class="l l-Scalar l-Scalar-Plain">In velit purus, dictum quis neque nec, molestie viverra risus. Nam pellentesque</span>
</span><span id=__span-5-31><a id=__codelineno-5-31 name=__codelineno-5-31></a><span class="l l-Scalar l-Scalar-Plain">tellus id elit ultricies, vel finibus erat cursus.</span>
-</span></code></pre></div></td></tr></table></div> <ol> <li>If you mark a post as a <a href=../../setup/setting-up-a-blog.md#drafts>draft</a>, a red marker appears next to the post date on index pages. When the site is built, drafts are not included in the output. <a href=../../setup/setting-up-a-blog.md#+blog.draft>This behavior can be changed</a>, e.g. for rendering drafts when building deploy previews.</li> </ol> <p>When you spin up the <a href=../../creating-your-site.md#previewing-as-you-write>live preview server</a>, you should be greeted by your first post! You'll also realize, that <a href=../../setup/setting-up-a-blog.md#archive>archive</a> and <a href=../../setup/setting-up-a-blog.md#categories>category</a> indexes have been automatically generated for you:</p> <p><img alt=Blog src=blog-support-just-landed/blog.png></p> <p>However, this is just the start. The <a href=../../plugins/blog.md>built-in blog plugin</a> packs a lot of functionality needed in day-to-day blogging. Visit the documentation of the plugin to learn about the following topics:</p> <div class=mdx-columns> <ul> <li><a href=../../setup/setting-up-a-blog.md#adding-an-excerpt>Adding an excerpt</a></li> <li><a href=../../setup/setting-up-a-blog.md#adding-authors>Adding authors</a></li> <li><a href=../../setup/setting-up-a-blog.md#adding-categories>Adding categories</a></li> <li><a href=../../setup/setting-up-a-blog.md#adding-tags>Adding tags</a></li> <li><a href=../../setup/setting-up-a-blog.md#adding-related-links>Adding related links</a></li> <li><a href=../../setup/setting-up-a-blog.md#linking-from-and-to-posts>Linking from and to posts</a></li> <li><a href=../../setup/setting-up-a-blog.md#setting-the-reading-time>Setting the reading time</a></li> <li><a href=../../setup/setting-up-a-blog.md#setting-defaults>Setting defaults</a></li> </ul> </div> <p>Additionally, the <a href=../../plugins/blog.md>built-in blog plugin</a> has dozens of <a href=../../setup/setting-up-a-blog.md#configuration>configuration options</a> which allow for fine-tuning the output. You can configure post slugs, general behavior and much more.</p> <h2 id=whats-next>What's next?<a class=headerlink href=#whats-next title="Permanent link">⚓</a></h2> <p>Getting basic blogging support out the door was quite a challenge – the <a href=../../plugins/blog.md>built-in blog plugin</a> is probably the biggest release this year and already packs a lot of functionality. However, Material for MkDocs is used in many different contexts, which is why we'd expect to iterate, as always.</p> <p>Some ideas already proposed by users:</p> <ul> <li> <p><strong>Blog series</strong>: Authors should be able to create so called blog series and assign posts to a blog series using simple identifiers. For each post that is part of a series, a list with links to all other posts should be included in the post's content.</p> </li> <li> <p><strong>Author indexes</strong>: Besides <a href=../../setup/setting-up-a-blog.md#archive>archive</a> and <a href=../../setup/setting-up-a-blog.md#categories>category</a> indexes, authors should be able to create per-author indexes, which list all posts linked to an author. Additionally, a profile should be created for each author and linked from posts.</p> </li> <li> <p><strong>Social share buttons</strong>: It should be easy to share blog posts via social media or other ways. For this reason, it should be possible to automatically include social sharing buttons with each post.</p> </li> </ul> <p>What's still missing from the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>? Feel free to share your ideas in the comments. Together, we can build one of the best modern engines for technical blogging!</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:17:18+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../../js/timeago.min.js></script> <script src=../../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+</span></code></pre></div></td></tr></table></div> <ol> <li>If you mark a post as a <a href=../../setup/setting-up-a-blog.md#drafts>draft</a>, a red marker appears next to the post date on index pages. When the site is built, drafts are not included in the output. <a href=../../setup/setting-up-a-blog.md#+blog.draft>This behavior can be changed</a>, e.g. for rendering drafts when building deploy previews.</li> </ol> <p>When you spin up the <a href=../../creating-your-site.md#previewing-as-you-write>live preview server</a>, you should be greeted by your first post! You'll also realize, that <a href=../../setup/setting-up-a-blog.md#archive>archive</a> and <a href=../../setup/setting-up-a-blog.md#categories>category</a> indexes have been automatically generated for you:</p> <p><img alt=Blog src=blog-support-just-landed/blog.png></p> <p>However, this is just the start. The <a href=../../plugins/blog.md>built-in blog plugin</a> packs a lot of functionality needed in day-to-day blogging. Visit the documentation of the plugin to learn about the following topics:</p> <div class=mdx-columns> <ul> <li><a href=../../setup/setting-up-a-blog.md#adding-an-excerpt>Adding an excerpt</a></li> <li><a href=../../setup/setting-up-a-blog.md#adding-authors>Adding authors</a></li> <li><a href=../../setup/setting-up-a-blog.md#adding-categories>Adding categories</a></li> <li><a href=../../setup/setting-up-a-blog.md#adding-tags>Adding tags</a></li> <li><a href=../../setup/setting-up-a-blog.md#adding-related-links>Adding related links</a></li> <li><a href=../../setup/setting-up-a-blog.md#linking-from-and-to-posts>Linking from and to posts</a></li> <li><a href=../../setup/setting-up-a-blog.md#setting-the-reading-time>Setting the reading time</a></li> <li><a href=../../setup/setting-up-a-blog.md#setting-defaults>Setting defaults</a></li> </ul> </div> <p>Additionally, the <a href=../../plugins/blog.md>built-in blog plugin</a> has dozens of <a href=../../setup/setting-up-a-blog.md#configuration>configuration options</a> which allow for fine-tuning the output. You can configure post slugs, general behavior and much more.</p> <h2 id=whats-next>What's next?<a class=headerlink href=#whats-next title="Permanent link">⚓</a></h2> <p>Getting basic blogging support out the door was quite a challenge – the <a href=../../plugins/blog.md>built-in blog plugin</a> is probably the biggest release this year and already packs a lot of functionality. However, Material for MkDocs is used in many different contexts, which is why we'd expect to iterate, as always.</p> <p>Some ideas already proposed by users:</p> <ul> <li> <p><strong>Blog series</strong>: Authors should be able to create so called blog series and assign posts to a blog series using simple identifiers. For each post that is part of a series, a list with links to all other posts should be included in the post's content.</p> </li> <li> <p><strong>Author indexes</strong>: Besides <a href=../../setup/setting-up-a-blog.md#archive>archive</a> and <a href=../../setup/setting-up-a-blog.md#categories>category</a> indexes, authors should be able to create per-author indexes, which list all posts linked to an author. Additionally, a profile should be created for each author and linked from posts.</p> </li> <li> <p><strong>Social share buttons</strong>: It should be easy to share blog posts via social media or other ways. For this reason, it should be possible to automatically include social sharing buttons with each post.</p> </li> </ul> <p>What's still missing from the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>? Feel free to share your ideas in the comments. Together, we can build one of the best modern engines for technical blogging!</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:22:24+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg> </span> <nav> <a href=mailto:i@jyunko.cn>简律纯</a> </nav> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </span> <span>GitHub</span> <nav> <a href=https://github.com/HsiangNianian class=md-author title=@HsiangNianian> <img src="https://avatars.githubusercontent.com/u/44714368?v=4&size=72" alt=HsiangNianian> </a> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../../../js/timeago.min.js></script> <script src=../../../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/blog/archive/2023/index.html b/dev/blog/archive/2023/index.html
index 2046f772..0e1b6e6c 100644
--- a/dev/blog/archive/2023/index.html
+++ b/dev/blog/archive/2023/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../category/rules/ rel=prev><link href=../../../changelog/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>2023 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#2023 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 2023 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8 checked> <div class="md-nav__link md-nav__container"> <a href=../../ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=true> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2 checked> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=true> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <div class=md-content__inner> <header class=md-typeset> <h1 id=2023>2023<a class=headerlink href=#2023 title="Permanent link">⚓</a></h1> </header> <article class="md-post md-post--excerpt"> <header class=md-post__header> <nav class="md-post__authors md-typeset"> <span class=md-author> <img src=https://github.com/HsiangNianian.png alt=简律纯> </span> </nav> <div class="md-post__meta md-meta"> <ul class=md-meta__list> <li class=md-meta__item> <time datetime="2023-10-07 00:00:00">2023年10月7日</time></li> <li class=md-meta__item> 分类于 <a href=../../category/rules/ class=md-meta__link>Rules</a></li> <li class=md-meta__item> 需要 5 分钟阅读时间 </li> </ul> </div> </header> <div class="md-post__content md-typeset"> <h2 id=rule><a href=../../2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ class=toclink>Rule 基类已经支持泛型了</a></h2> <p><strong>Hey there! You're looking at our new blog, built with the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>. With this plugin, you can easily build a blog alongside your documentation or standalone.</strong></p> <p>Proper support for blogging, as requested by many users over the past few years, was something that was desperately missing from Material for MkDocs' feature set. While everybody agreed that blogging support was a blind spot, it was not obvious whether MkDocs could be extended in a way to allow for blogging as we know it from <a href=https://jekyllrb.com/ >Jekyll</a> and friends. The <a href=../../plugins/blog.md>built-in blog plugin</a> proves that it is, after all, possible to build a blogging engine on top of MkDocs, in order to create a technical blog alongside your documentation, or as the main thing.</p> <nav class=md-post__action> <a href=../../2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ > 继续阅读 </a> </nav> </div> </article> <nav class=md-pagination> </nav> </div> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../category/rules/ class="md-footer__link md-footer__link--prev" aria-label="上一页: Rules"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> Rules </div> </div> </a> <a href=../../../changelog/ class="md-footer__link md-footer__link--next" aria-label="下一页: 变更日志"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 变更日志 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../category/rules/ rel=prev><link href=../../../changelog/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>2023 - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#2023 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 2023 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8 checked> <div class="md-nav__link md-nav__container"> <a href=../../ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=true> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2 checked> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=true> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <div class=md-content__inner> <header class=md-typeset> <h1 id=2023>2023<a class=headerlink href=#2023 title="Permanent link">⚓</a></h1> </header> <article class="md-post md-post--excerpt"> <header class=md-post__header> <nav class="md-post__authors md-typeset"> <span class=md-author> <img src=https://github.com/HsiangNianian.png alt=简律纯> </span> </nav> <div class="md-post__meta md-meta"> <ul class=md-meta__list> <li class=md-meta__item> <time datetime="2023-10-07 00:00:00">2023年10月7日</time></li> <li class=md-meta__item> 分类于 <a href=../../category/rules/ class=md-meta__link>Rules</a></li> <li class=md-meta__item> 需要 5 分钟阅读时间 </li> </ul> </div> </header> <div class="md-post__content md-typeset"> <h2 id=rule><a href=../../2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ class=toclink>Rule 基类已经支持泛型了</a></h2> <p><strong>Hey there! You're looking at our new blog, built with the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>. With this plugin, you can easily build a blog alongside your documentation or standalone.</strong></p> <p>Proper support for blogging, as requested by many users over the past few years, was something that was desperately missing from Material for MkDocs' feature set. While everybody agreed that blogging support was a blind spot, it was not obvious whether MkDocs could be extended in a way to allow for blogging as we know it from <a href=https://jekyllrb.com/ >Jekyll</a> and friends. The <a href=../../plugins/blog.md>built-in blog plugin</a> proves that it is, after all, possible to build a blogging engine on top of MkDocs, in order to create a technical blog alongside your documentation, or as the main thing.</p> <nav class=md-post__action> <a href=../../2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ > 继续阅读 </a> </nav> </div> </article> <nav class=md-pagination> </nav> </div> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../category/rules/ class="md-footer__link md-footer__link--prev" aria-label="上一页: Rules"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> Rules </div> </div> </a> <a href=../../../changelog/ class="md-footer__link md-footer__link--next" aria-label="下一页: 变更日志"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 变更日志 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/blog/category/rules/index.html b/dev/blog/category/rules/index.html
index 80b46c48..6a12d89d 100644
--- a/dev/blog/category/rules/index.html
+++ b/dev/blog/category/rules/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../ rel=prev><link href=../../archive/2023/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Rules - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../../../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#rules class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Rules </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8 checked> <div class="md-nav__link md-nav__container"> <a href=../../ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=true> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3 checked> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=true> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <div class=md-content__inner> <header class=md-typeset> <h1 id=rules>Rules<a class=headerlink href=#rules title="Permanent link">⚓</a></h1> </header> <article class="md-post md-post--excerpt"> <header class=md-post__header> <nav class="md-post__authors md-typeset"> <span class=md-author> <img src=https://github.com/HsiangNianian.png alt=简律纯> </span> </nav> <div class="md-post__meta md-meta"> <ul class=md-meta__list> <li class=md-meta__item> <time datetime="2023-10-07 00:00:00">2023年10月7日</time></li> <li class=md-meta__item> 分类于 <a href=./ class=md-meta__link>Rules</a></li> <li class=md-meta__item> 需要 5 分钟阅读时间 </li> </ul> </div> </header> <div class="md-post__content md-typeset"> <h2 id=rule><a href=../../2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ class=toclink>Rule 基类已经支持泛型了</a></h2> <p><strong>Hey there! You're looking at our new blog, built with the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>. With this plugin, you can easily build a blog alongside your documentation or standalone.</strong></p> <p>Proper support for blogging, as requested by many users over the past few years, was something that was desperately missing from Material for MkDocs' feature set. While everybody agreed that blogging support was a blind spot, it was not obvious whether MkDocs could be extended in a way to allow for blogging as we know it from <a href=https://jekyllrb.com/ >Jekyll</a> and friends. The <a href=../../plugins/blog.md>built-in blog plugin</a> proves that it is, after all, possible to build a blogging engine on top of MkDocs, in order to create a technical blog alongside your documentation, or as the main thing.</p> <nav class=md-post__action> <a href=../../2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ > 继续阅读 </a> </nav> </div> </article> <nav class=md-pagination> </nav> </div> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../ class="md-footer__link md-footer__link--prev" aria-label="上一页: Blog"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> Blog </div> </div> </a> <a href=../../archive/2023/ class="md-footer__link md-footer__link--next" aria-label="下一页: 2023"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 2023 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../../../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../../ rel=prev><link href=../../archive/2023/ rel=next><link rel=icon href=../../../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Rules - infini 核心文档</title><link rel=stylesheet href=../../../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../../../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../../../css/timeago.css><link rel=stylesheet href=../../../assets/_mkdocstrings.css><link rel=stylesheet href=../../../stylesheets/extra.css><script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../../../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#rules class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../../../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Rules </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../../.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../../../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../../../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../../../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../../../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../../../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../../../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../../ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../../../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../../../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../../../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../../../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../../../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../../../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8 checked> <div class="md-nav__link md-nav__container"> <a href=../../ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=true> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3 checked> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=true> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <div class=md-content__inner> <header class=md-typeset> <h1 id=rules>Rules<a class=headerlink href=#rules title="Permanent link">⚓</a></h1> </header> <article class="md-post md-post--excerpt"> <header class=md-post__header> <nav class="md-post__authors md-typeset"> <span class=md-author> <img src=https://github.com/HsiangNianian.png alt=简律纯> </span> </nav> <div class="md-post__meta md-meta"> <ul class=md-meta__list> <li class=md-meta__item> <time datetime="2023-10-07 00:00:00">2023年10月7日</time></li> <li class=md-meta__item> 分类于 <a href=./ class=md-meta__link>Rules</a></li> <li class=md-meta__item> 需要 5 分钟阅读时间 </li> </ul> </div> </header> <div class="md-post__content md-typeset"> <h2 id=rule><a href=../../2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ class=toclink>Rule 基类已经支持泛型了</a></h2> <p><strong>Hey there! You're looking at our new blog, built with the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>. With this plugin, you can easily build a blog alongside your documentation or standalone.</strong></p> <p>Proper support for blogging, as requested by many users over the past few years, was something that was desperately missing from Material for MkDocs' feature set. While everybody agreed that blogging support was a blind spot, it was not obvious whether MkDocs could be extended in a way to allow for blogging as we know it from <a href=https://jekyllrb.com/ >Jekyll</a> and friends. The <a href=../../plugins/blog.md>built-in blog plugin</a> proves that it is, after all, possible to build a blogging engine on top of MkDocs, in order to create a technical blog alongside your documentation, or as the main thing.</p> <nav class=md-post__action> <a href=../../2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ > 继续阅读 </a> </nav> </div> </article> <nav class=md-pagination> </nav> </div> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../../ class="md-footer__link md-footer__link--prev" aria-label="上一页: Blog"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> Blog </div> </div> </a> <a href=../../archive/2023/ class="md-footer__link md-footer__link--next" aria-label="下一页: 2023"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> 2023 </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "../../..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../../../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../../../js/timeago.min.js></script> <script src=../../../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../../../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/blog/index.html b/dev/blog/index.html
index 3d5c6e98..ad62a1a6 100644
--- a/dev/blog/index.html
+++ b/dev/blog/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../Help/emoji/ rel=prev><link href=category/rules/ rel=next><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Blog - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#blog class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Blog </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=true> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <div class=md-content__inner> <header class=md-typeset> <h1 id=blog>Blog<a class=headerlink href=#blog title="Permanent link">⚓</a></h1> </header> <article class="md-post md-post--excerpt"> <header class=md-post__header> <nav class="md-post__authors md-typeset"> <span class=md-author> <img src=https://github.com/HsiangNianian.png alt=简律纯> </span> </nav> <div class="md-post__meta md-meta"> <ul class=md-meta__list> <li class=md-meta__item> <time datetime="2023-10-07 00:00:00">2023年10月7日</time></li> <li class=md-meta__item> 分类于 <a href=category/rules/ class=md-meta__link>Rules</a></li> <li class=md-meta__item> 需要 5 分钟阅读时间 </li> </ul> </div> </header> <div class="md-post__content md-typeset"> <h2 id=rule><a href=2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ class=toclink>Rule 基类已经支持泛型了</a></h2> <p><strong>Hey there! You're looking at our new blog, built with the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>. With this plugin, you can easily build a blog alongside your documentation or standalone.</strong></p> <p>Proper support for blogging, as requested by many users over the past few years, was something that was desperately missing from Material for MkDocs' feature set. While everybody agreed that blogging support was a blind spot, it was not obvious whether MkDocs could be extended in a way to allow for blogging as we know it from <a href=https://jekyllrb.com/ >Jekyll</a> and friends. The <a href=../../plugins/blog.md>built-in blog plugin</a> proves that it is, after all, possible to build a blogging engine on top of MkDocs, in order to create a technical blog alongside your documentation, or as the main thing.</p> <nav class=md-post__action> <a href=2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ > 继续阅读 </a> </nav> </div> </article> <nav class=md-pagination> </nav> </div> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../Help/emoji/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 图标、图例、注释说明"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 图标、图例、注释说明 </div> </div> </a> <a href=category/rules/ class="md-footer__link md-footer__link--next" aria-label="下一页: Rules"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> Rules </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../Help/emoji/ rel=prev><link href=category/rules/ rel=next><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>Blog - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#blog class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Blog </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=../changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=true> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <div class=md-content__inner> <header class=md-typeset> <h1 id=blog>Blog<a class=headerlink href=#blog title="Permanent link">⚓</a></h1> </header> <article class="md-post md-post--excerpt"> <header class=md-post__header> <nav class="md-post__authors md-typeset"> <span class=md-author> <img src=https://github.com/HsiangNianian.png alt=简律纯> </span> </nav> <div class="md-post__meta md-meta"> <ul class=md-meta__list> <li class=md-meta__item> <time datetime="2023-10-07 00:00:00">2023年10月7日</time></li> <li class=md-meta__item> 分类于 <a href=category/rules/ class=md-meta__link>Rules</a></li> <li class=md-meta__item> 需要 5 分钟阅读时间 </li> </ul> </div> </header> <div class="md-post__content md-typeset"> <h2 id=rule><a href=2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ class=toclink>Rule 基类已经支持泛型了</a></h2> <p><strong>Hey there! You're looking at our new blog, built with the brand new <a href=../../plugins/blog.md>built-in blog plugin</a>. With this plugin, you can easily build a blog alongside your documentation or standalone.</strong></p> <p>Proper support for blogging, as requested by many users over the past few years, was something that was desperately missing from Material for MkDocs' feature set. While everybody agreed that blogging support was a blind spot, it was not obvious whether MkDocs could be extended in a way to allow for blogging as we know it from <a href=https://jekyllrb.com/ >Jekyll</a> and friends. The <a href=../../plugins/blog.md>built-in blog plugin</a> proves that it is, after all, possible to build a blogging engine on top of MkDocs, in order to create a technical blog alongside your documentation, or as the main thing.</p> <nav class=md-post__action> <a href=2023/10/07/rule-%E5%9F%BA%E7%B1%BB%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B%E4%BA%86/ > 继续阅读 </a> </nav> </div> </article> <nav class=md-pagination> </nav> </div> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../Help/emoji/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 图标、图例、注释说明"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 图标、图例、注释说明 </div> </div> </a> <a href=category/rules/ class="md-footer__link md-footer__link--next" aria-label="下一页: Rules"> <div class=md-footer__title> <span class=md-footer__direction> 下一页 </span> <div class=md-ellipsis> Rules </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/changelog/index.html b/dev/changelog/index.html
index 47e3e715..d13aacce 100644
--- a/dev/changelog/index.html
+++ b/dev/changelog/index.html
@@ -1,21 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../blog/archive/2023/ rel=prev><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>变更日志 - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=../assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#105-2023-10-08 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 变更日志 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../blog/ class=md-tabs__link> 博客 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9 checked> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=true> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> 变更日志 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 变更日志 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#105-2023-10-08 class=md-nav__link> <span class=md-ellipsis> 1.0.5 (2023-10-08) </span> </a> <nav class=md-nav aria-label="1.0.5 (2023-10-08)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#breaking-changes class=md-nav__link> <span class=md-ellipsis> BREAKING CHANGES </span> </a> </li> <li class=md-nav__item> <a href=#features class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> <li class=md-nav__item> <a href=#bug-fix class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> <li class=md-nav__item> <a href=#chore class=md-nav__link> <span class=md-ellipsis> CHORE </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#104-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.4 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.4 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_1 class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#103-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.3 (2023-10-07) </span> </a> </li> <li class=md-nav__item> <a href=#102-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.2 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.2 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_2 class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#101-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#bug-fix_1 class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#012-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.2 (2023-10-07) </span> </a> </li> <li class=md-nav__item> <a href=#011-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#bug-fix_2 class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#010-rc1-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.0-rc1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.0-rc1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#chore_1 class=md-nav__link> <span class=md-ellipsis> CHORE </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#010-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.0 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.0 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_3 class=md-nav__link> <span class=md-ellipsis> Features </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#001-2023-07-04 class=md-nav__link> <span class=md-ellipsis> 0.0.1 (2023-07-04) </span> </a> <nav class=md-nav aria-label="0.0.1 (2023-07-04)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_4 class=md-nav__link> <span class=md-ellipsis> Features </span> </a> </li> <li class=md-nav__item> <a href=#breaking-change class=md-nav__link> <span class=md-ellipsis> BREAKING CHANGE </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#105-2023-10-08 class=md-nav__link> <span class=md-ellipsis> 1.0.5 (2023-10-08) </span> </a> <nav class=md-nav aria-label="1.0.5 (2023-10-08)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#breaking-changes class=md-nav__link> <span class=md-ellipsis> BREAKING CHANGES </span> </a> </li> <li class=md-nav__item> <a href=#features class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> <li class=md-nav__item> <a href=#bug-fix class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> <li class=md-nav__item> <a href=#chore class=md-nav__link> <span class=md-ellipsis> CHORE </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#104-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.4 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.4 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_1 class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#103-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.3 (2023-10-07) </span> </a> </li> <li class=md-nav__item> <a href=#102-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.2 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.2 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_2 class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#101-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#bug-fix_1 class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#012-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.2 (2023-10-07) </span> </a> </li> <li class=md-nav__item> <a href=#011-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#bug-fix_2 class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#010-rc1-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.0-rc1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.0-rc1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#chore_1 class=md-nav__link> <span class=md-ellipsis> CHORE </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#010-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.0 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.0 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_3 class=md-nav__link> <span class=md-ellipsis> Features </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#001-2023-07-04 class=md-nav__link> <span class=md-ellipsis> 0.0.1 (2023-07-04) </span> </a> <nav class=md-nav aria-label="0.0.1 (2023-07-04)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_4 class=md-nav__link> <span class=md-ellipsis> Features </span> </a> </li> <li class=md-nav__item> <a href=#breaking-change class=md-nav__link> <span class=md-ellipsis> BREAKING CHANGE </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/changelog.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/changelog.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>变更日志</h1> <h2 id=105-2023-10-08><a href=https://github.com/HydroRoll-Team/infini/compare/v1.0.3...v1.0.4>1.0.5</a> (2023-10-08)<a class=headerlink href=#105-2023-10-08 title="Permanent link">⚓</a></h2> <h3 id=breaking-changes>BREAKING CHANGES<a class=headerlink href=#breaking-changes title="Permanent link">⚓</a></h3> <h3 id=features>FEATURES<a class=headerlink href=#features title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> balabla.</li> <li><strong>Rule:</strong> 支持泛型。</li> </ul> <h3 id=bug-fix>BUG FIX<a class=headerlink href=#bug-fix title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> balabla.</li> </ul> <h3 id=chore>CHORE<a class=headerlink href=#chore title="Permanent link">⚓</a></h3> <ul> <li><strong>Readme:</strong> 添加了主页介绍。</li> </ul> <h2 id=104-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v1.0.3...v1.0.4>1.0.4</a> (2023-10-07)<a class=headerlink href=#104-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=features_1>FEATURES<a class=headerlink href=#features_1 title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> 美化 <code>style</code>。</li> <li><strong>Deps:</strong> 添加 <code>reportlab</code> 依赖,用于以后的 <code>pdf</code> 生成。</li> </ul> <h2 id=103-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v1.0.2...v1.0.3>1.0.3</a> (2023-10-07)<a class=headerlink href=#103-2023-10-07 title="Permanent link">⚓</a></h2> <h2 id=102-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v1.0.1...v1.0.2>1.0.2</a> (2023-10-07)<a class=headerlink href=#102-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=features_2>FEATURES<a class=headerlink href=#features_2 title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> 优化 <code>css</code> 细节。</li> </ul> <h2 id=101-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v0.1.2...v1.0.1>1.0.1</a> (2023-10-07)<a class=headerlink href=#101-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=bug-fix_1>BUG FIX<a class=headerlink href=#bug-fix_1 title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> 修复 <code>Dev</code> 与 <code>latest</code> 分支的错别字。</li> </ul> <h2 id=012-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v0.1.1...v0.1.2>0.1.2</a> (2023-10-07)<a class=headerlink href=#012-2023-10-07 title="Permanent link">⚓</a></h2> <blockquote> <p>同步版本所做的测试。</p> </blockquote> <h2 id=011-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v0.1.0...v0.1.1>0.1.1</a> (2023-10-07)<a class=headerlink href=#011-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=bug-fix_2>BUG FIX<a class=headerlink href=#bug-fix_2 title="Permanent link">⚓</a></h3> <ul> <li><strong>CLI:</strong> 添加命令行参数解析。</li> </ul> <h2 id=010-rc1-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v0.1.0...v0.1.0-rc1>0.1.0-rc1</a> (2023-10-07)<a class=headerlink href=#010-rc1-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=chore_1>CHORE<a class=headerlink href=#chore_1 title="Permanent link">⚓</a></h3> <ul> <li><strong>README:</strong> 更新主页介绍的安装指南。</li> </ul> <h2 id=010-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/commits/v0.0.1..v0.1.0>0.1.0</a> (2023-10-07)<a class=headerlink href=#010-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=features_3>Features<a class=headerlink href=#features_3 title="Permanent link">⚓</a></h3> <ul> <li><strong>CLI</strong> 添加两个命令行名称 <code>infini</code> 与 <code>HRC</code>。</li> </ul> <h2 id=001-2023-07-04><a href=https://github.com/HydroRoll-Team/infini/commits/v0.0.1>0.0.1</a> (2023-07-04)<a class=headerlink href=#001-2023-07-04 title="Permanent link">⚓</a></h2> <h3 id=features_4>Features<a class=headerlink href=#features_4 title="Permanent link">⚓</a></h3> <ul> <li><strong><strong>init</strong>:</strong> 添加命令行参数解析。</li> <li><strong>Rule:</strong> 添加 Rule 基类,实现读取指定文件夹下的 python 脚本或 python 包</li> </ul> <h3 id=breaking-change>BREAKING CHANGE<a class=headerlink href=#breaking-change title="Permanent link">⚓</a></h3> <ul> <li><strong>infini:</strong> 添加命令行Path。</li> </ul> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:18:46+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:18:46+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../blog/archive/2023/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 2023"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 2023 </div> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=../assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=../blog/archive/2023/ rel=prev><link rel=icon href=../images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>变更日志 - infini 核心文档</title><link rel=stylesheet href=../assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=../css/timeago.css><link rel=stylesheet href=../assets/_mkdocstrings.css><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=../assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#105-2023-10-08 class=md-skip> 跳转至 </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../..> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 变更日志 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=../Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=../RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=../Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=../CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=../API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=../Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=../blog/ class=md-tabs__link> 博客 </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=../RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=../RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=../Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=../Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=../Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=../Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=../Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9 checked> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=true> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> 变更日志 </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 变更日志 </span> </a> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#105-2023-10-08 class=md-nav__link> <span class=md-ellipsis> 1.0.5 (2023-10-08) </span> </a> <nav class=md-nav aria-label="1.0.5 (2023-10-08)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#breaking-changes class=md-nav__link> <span class=md-ellipsis> BREAKING CHANGES </span> </a> </li> <li class=md-nav__item> <a href=#features class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> <li class=md-nav__item> <a href=#bug-fix class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> <li class=md-nav__item> <a href=#chore class=md-nav__link> <span class=md-ellipsis> CHORE </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#104-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.4 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.4 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_1 class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#103-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.3 (2023-10-07) </span> </a> </li> <li class=md-nav__item> <a href=#102-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.2 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.2 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_2 class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#101-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#bug-fix_1 class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#012-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.2 (2023-10-07) </span> </a> </li> <li class=md-nav__item> <a href=#011-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#bug-fix_2 class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#010-rc1-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.0-rc1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.0-rc1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#chore_1 class=md-nav__link> <span class=md-ellipsis> CHORE </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#010-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.0 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.0 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_3 class=md-nav__link> <span class=md-ellipsis> Features </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#001-2023-07-04 class=md-nav__link> <span class=md-ellipsis> 0.0.1 (2023-07-04) </span> </a> <nav class=md-nav aria-label="0.0.1 (2023-07-04)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_4 class=md-nav__link> <span class=md-ellipsis> Features </span> </a> </li> <li class=md-nav__item> <a href=#breaking-change class=md-nav__link> <span class=md-ellipsis> BREAKING CHANGE </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> 目录 </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#105-2023-10-08 class=md-nav__link> <span class=md-ellipsis> 1.0.5 (2023-10-08) </span> </a> <nav class=md-nav aria-label="1.0.5 (2023-10-08)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#breaking-changes class=md-nav__link> <span class=md-ellipsis> BREAKING CHANGES </span> </a> </li> <li class=md-nav__item> <a href=#features class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> <li class=md-nav__item> <a href=#bug-fix class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> <li class=md-nav__item> <a href=#chore class=md-nav__link> <span class=md-ellipsis> CHORE </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#104-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.4 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.4 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_1 class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#103-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.3 (2023-10-07) </span> </a> </li> <li class=md-nav__item> <a href=#102-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.2 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.2 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_2 class=md-nav__link> <span class=md-ellipsis> FEATURES </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#101-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 1.0.1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="1.0.1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#bug-fix_1 class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#012-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.2 (2023-10-07) </span> </a> </li> <li class=md-nav__item> <a href=#011-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#bug-fix_2 class=md-nav__link> <span class=md-ellipsis> BUG FIX </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#010-rc1-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.0-rc1 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.0-rc1 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#chore_1 class=md-nav__link> <span class=md-ellipsis> CHORE </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#010-2023-10-07 class=md-nav__link> <span class=md-ellipsis> 0.1.0 (2023-10-07) </span> </a> <nav class=md-nav aria-label="0.1.0 (2023-10-07)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_3 class=md-nav__link> <span class=md-ellipsis> Features </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#001-2023-07-04 class=md-nav__link> <span class=md-ellipsis> 0.0.1 (2023-07-04) </span> </a> <nav class=md-nav aria-label="0.0.1 (2023-07-04)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#features_4 class=md-nav__link> <span class=md-ellipsis> Features </span> </a> </li> <li class=md-nav__item> <a href=#breaking-change class=md-nav__link> <span class=md-ellipsis> BREAKING CHANGE </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/HydroRoll-Team/infini/edit/master/docs/changelog.md title=编辑此页 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg> </a> <a href=https://github.com/HydroRoll-Team/infini/raw/master/docs/changelog.md title=查看本页的源代码 class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg> </a> <h1>变更日志</h1> <h2 id=105-2023-10-08><a href=https://github.com/HydroRoll-Team/infini/compare/v1.0.3...v1.0.4>1.0.5</a> (2023-10-08)<a class=headerlink href=#105-2023-10-08 title="Permanent link">⚓</a></h2> <h3 id=breaking-changes>BREAKING CHANGES<a class=headerlink href=#breaking-changes title="Permanent link">⚓</a></h3> <h3 id=features>FEATURES<a class=headerlink href=#features title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> balabla.</li> <li><strong>Rule:</strong> 支持泛型。</li> </ul> <h3 id=bug-fix>BUG FIX<a class=headerlink href=#bug-fix title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> balabla.</li> </ul> <h3 id=chore>CHORE<a class=headerlink href=#chore title="Permanent link">⚓</a></h3> <ul> <li><strong>Readme:</strong> 添加了主页介绍。</li> </ul> <h2 id=104-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v1.0.3...v1.0.4>1.0.4</a> (2023-10-07)<a class=headerlink href=#104-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=features_1>FEATURES<a class=headerlink href=#features_1 title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> 美化 <code>style</code>。</li> <li><strong>Deps:</strong> 添加 <code>reportlab</code> 依赖,用于以后的 <code>pdf</code> 生成。</li> </ul> <h2 id=103-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v1.0.2...v1.0.3>1.0.3</a> (2023-10-07)<a class=headerlink href=#103-2023-10-07 title="Permanent link">⚓</a></h2> <h2 id=102-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v1.0.1...v1.0.2>1.0.2</a> (2023-10-07)<a class=headerlink href=#102-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=features_2>FEATURES<a class=headerlink href=#features_2 title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> 优化 <code>css</code> 细节。</li> </ul> <h2 id=101-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v0.1.2...v1.0.1>1.0.1</a> (2023-10-07)<a class=headerlink href=#101-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=bug-fix_1>BUG FIX<a class=headerlink href=#bug-fix_1 title="Permanent link">⚓</a></h3> <ul> <li><strong>Docs:</strong> 修复 <code>Dev</code> 与 <code>latest</code> 分支的错别字。</li> </ul> <h2 id=012-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v0.1.1...v0.1.2>0.1.2</a> (2023-10-07)<a class=headerlink href=#012-2023-10-07 title="Permanent link">⚓</a></h2> <blockquote> <p>同步版本所做的测试。</p> </blockquote> <h2 id=011-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v0.1.0...v0.1.1>0.1.1</a> (2023-10-07)<a class=headerlink href=#011-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=bug-fix_2>BUG FIX<a class=headerlink href=#bug-fix_2 title="Permanent link">⚓</a></h3> <ul> <li><strong>CLI:</strong> 添加命令行参数解析。</li> </ul> <h2 id=010-rc1-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/compare/v0.1.0...v0.1.0-rc1>0.1.0-rc1</a> (2023-10-07)<a class=headerlink href=#010-rc1-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=chore_1>CHORE<a class=headerlink href=#chore_1 title="Permanent link">⚓</a></h3> <ul> <li><strong>README:</strong> 更新主页介绍的安装指南。</li> </ul> <h2 id=010-2023-10-07><a href=https://github.com/HydroRoll-Team/infini/commits/v0.0.1..v0.1.0>0.1.0</a> (2023-10-07)<a class=headerlink href=#010-2023-10-07 title="Permanent link">⚓</a></h2> <h3 id=features_3>Features<a class=headerlink href=#features_3 title="Permanent link">⚓</a></h3> <ul> <li><strong>CLI</strong> 添加两个命令行名称 <code>infini</code> 与 <code>HRC</code>。</li> </ul> <h2 id=001-2023-07-04><a href=https://github.com/HydroRoll-Team/infini/commits/v0.0.1>0.0.1</a> (2023-07-04)<a class=headerlink href=#001-2023-07-04 title="Permanent link">⚓</a></h2> <h3 id=features_4>Features<a class=headerlink href=#features_4 title="Permanent link">⚓</a></h3> <ul> <li><strong><strong>init</strong>:</strong> 添加命令行参数解析。</li> <li><strong>Rule:</strong> 添加 Rule 基类,实现读取指定文件夹下的 python 脚本或 python 包</li> </ul> <h3 id=breaking-change>BREAKING CHANGE<a class=headerlink href=#breaking-change title="Permanent link">⚓</a></h3> <ul> <li><strong>infini:</strong> 添加命令行Path。</li> </ul> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title=最后更新> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:24:05+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=创建日期> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class=timeago datetime=2023-12-15T09:24:05+08:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-15</span> </span> <span class=md-source-file__fact> <span class=md-icon title=贡献者> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9 3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3 3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3 3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.536 5.536 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13v-1.75M0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9-.59.68-.95 1.62-.95 2.65V20H0m24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65 2.56.34 4.45 1.51 4.45 2.9V20Z"/></svg> </span> <nav> </nav> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=页脚> <a href=../blog/archive/2023/ class="md-footer__link md-footer__link--prev" aria-label="上一页: 2023"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> 上一页 </span> <div class=md-ellipsis> 2023 </div> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2013 - PRESENT. <a href=https://github.com/HydroRoll-Team>HydroRoll-Team</a> – <a href=#__consent>管理Cookies</a> </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/HydroRoll-Team target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://pypi.org/project/infini/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": "..", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=../assets/javascripts/bundle.d7c377c4.min.js></script> <script src=../js/timeago.min.js></script> <script src=../js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=../assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/index.html b/dev/index.html
index 1f1ab450..424e6fed 100644
--- a/dev/index.html
+++ b/dev/index.html
@@ -1,71 +1 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
---> <!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=Core/ rel=next><link rel=icon href=images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>水系核心 - infini 核心文档</title><link rel=stylesheet href=assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=css/timeago.css><link rel=stylesheet href=assets/_mkdocstrings.css><link rel=stylesheet href=stylesheets/extra.css><script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) --><link rel=stylesheet href=assets/stylesheets/custom.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> <button class="md-banner__button md-icon" aria-label=不再显示此消息> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> For updates follow <strong>@squidfunk</strong> on <a rel=me href=https://fosstodon.org/@squidfunk> <span class="twemoji mastodon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </span> <strong>Fosstodon</strong> </a> and <a href=https://twitter.com/squidfunk> <span class="twemoji twitter"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </span> <strong>Twitter</strong> </a> </div> <script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 水系核心 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class="md-tabs__item md-tabs__item--active"> <a href=. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <!-- Additional styles for landing page --> <style>
-
- /* Application header should be static for the landing page */
- .md-header {
- position: initial;
- }
-
- /* Remove spacing, as we cannot hide it completely */
- .md-main__inner {
- margin: 0;
- }
-
- /* Hide main content for now */
- .md-content {
- display: none;
- }
-
- /* Hide table of contents */
- @media screen and (min-width: 60em) {
- .md-sidebar--secondary {
- display: none;
- }
- }
-
- /* Hide navigation */
- @media screen and (min-width: 76.25em) {
- .md-sidebar--primary {
- display: none;
- }
- }
- </style> <!-- Hero for landing page --> <section class=mdx-container> <div class="md-grid md-typeset"> <div class=mdx-hero> <!-- Hero image --> <div class=mdx-hero__image> <img src=assets/images/illustration.png alt width=1659 height=1200 draggable=false> </div> <!-- Hero content --> <div class=mdx-hero__content> <h1>Technical documentation that just works</h1> <p>一个基于通用规则包标准的规则包加载器. Set up in 5 minutes.</p> <a href=Core/ title=核心概览 class="md-button md-button--primary"> Quick start </a> <a href=insiders/ title="Material for MkDocs Insiders" class=md-button> Get Insiders </a> </div> </div> </div> </section> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=. class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": ".", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=assets/javascripts/bundle.d7c377c4.min.js></script> <script src=js/timeago.min.js></script> <script src=js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) --> <script src=assets/javascripts/custom.js></script> </body> </html> \ No newline at end of file
+<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content=一个基于通用规则包标准的规则包加载器><meta name=author content=HsiangNianian><link href=Core/ rel=next><link rel=icon href=images/logo.png><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.2"><title>水系核心 - infini 核心文档</title><link rel=stylesheet href=assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=assets/stylesheets/palette.06af60db.min.css><style>:root{--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M6 13h8l-3.5 3.5 1.42 1.42L17.84 12l-5.92-5.92L10.5 7.5 14 11H6v2Z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Times+New:300,300i,400,400i,700,700i%7CTimes+New:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Times New";--md-code-font:"Times New"}</style><link rel=stylesheet href=css/timeago.css><link rel=stylesheet href=assets/_mkdocstrings.css><link rel=stylesheet href=stylesheets/extra.css><script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><link rel=stylesheet href=assets/stylesheets/custom.00c04c01.min.css></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> <aside class="md-banner md-banner--warning"> <div class="md-banner__inner md-grid md-typeset"> 当前阅览的并不是稳定版, <a href=../.> <strong>单击此处跳转到稳定版文档.</strong> </a> </div> <script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script> </aside> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-header__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> infini 核心文档 </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> 水系核心 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class="md-tabs__item md-tabs__item--active"> <a href=. class=md-tabs__link> 主页 </a> </li> <li class=md-tabs__item> <a href=Core/ class=md-tabs__link> 水系核心 </a> </li> <li class=md-tabs__item> <a href=RulePackage/intro/ class=md-tabs__link> 规则包入门 </a> </li> <li class=md-tabs__item> <a href=Standard/what-is-rule-package/ class=md-tabs__link> 通用规则包标准 </a> </li> <li class=md-tabs__item> <a href=CLI/ class=md-tabs__link> CLI 参考 </a> </li> <li class=md-tabs__item> <a href=API/ class=md-tabs__link> API 参考 </a> </li> <li class=md-tabs__item> <a href=Help/TermList/ class=md-tabs__link> 其他帮助 </a> </li> <li class=md-tabs__item> <a href=blog/ class=md-tabs__link> 博客 </a> </li> <li class=md-tabs__item> <a href=changelog/ class=md-tabs__link> 日志 </a> </li> </ul> </div> </nav> <style>.md-header{position:initial}.md-main__inner{margin:0}.md-content{display:none}@media screen and (min-width:60em){.md-sidebar--secondary{display:none}}@media screen and (min-width:76.25em){.md-sidebar--primary{display:none}}</style> <section class=mdx-container> <div class="md-grid md-typeset"> <div class=mdx-hero> <div class=mdx-hero__content> <h1>水系核心</h1> <p>一个基于通用规则包标准的规则包加载器.</p> <a href=Core/ title=核心概览 class="md-button md-button--primary"> 快速开始 </a> <a href=Standard/what-is-rule-package/ title=通用规则包标准 class=md-button> 查看标准 </a> </div> </div> </div> </section> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://grps.hydroroll.team title="infini 核心文档" class="md-nav__button md-logo" aria-label="infini 核心文档" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 17.5c0 1.75.69 3.33 1.82 4.5H6c-1.11 0-2-.89-2-2V4a2 2 0 0 1 2-2h1v7l2.5-1.5L12 9V2h6a2 2 0 0 1 2 2v7.03c-.16-.03-.33-.03-.5-.03a6.5 6.5 0 0 0-6.5 6.5m6 2.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20m0-6.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4Z"/></svg> </a> infini 核心文档 </label> <div class=md-nav__source> <a href=https://github.com/HydroRoll-Team/infini title=前往仓库 class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> HydroRoll-Team/infini </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <a href=. class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> 主页 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=Core/ class="md-nav__link "> <span class=md-ellipsis> 水系核心 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> 水系核心 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> 规则包入门 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> 规则包入门 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/intro/ class=md-nav__link> <span class=md-ellipsis> 概述 </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex> <span class=md-ellipsis> 开始 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> 开始 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/getStart/class/ class=md-nav__link> <span class=md-ellipsis> 类 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/getStart/method/ class=md-nav__link> <span class=md-ellipsis> 方法 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/getStart/attribute/ class=md-nav__link> <span class=md-ellipsis> 属性 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2_4> <label class=md-nav__link for=__nav_3_2_4 id=__nav_3_2_4_label tabindex=0> <span class=md-ellipsis> 深入 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_3_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2_4> <span class="md-nav__icon md-icon"></span> 深入 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/getStart/getDeeper/object/ class=md-nav__link> <span class=md-ellipsis> 对象 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/getStart/getDeeper/Module/ class=md-nav__link> <span class=md-ellipsis> 模块 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/getStart/getDeeper/Package/ class=md-nav__link> <span class=md-ellipsis> 包 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex> <span class=md-ellipsis> 实战 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> 实战 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/Write/python/ class=md-nav__link> <span class=md-ellipsis> 了解Python </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/Write/prepare/ class=md-nav__link> <span class=md-ellipsis> 准备规则书 </span> </a> </li> <li class=md-nav__item> <a href=RulePackage/Write/write/ class=md-nav__link> <span class=md-ellipsis> 编写规则包 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_4> <div class="md-nav__link md-nav__container"> <a href=RulePackage/skill/ class="md-nav__link "> <span class=md-ellipsis> 技巧 </span> </a> <label class="md-nav__link " for=__nav_3_4 id=__nav_3_4_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> 技巧 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=RulePackage/skill/fstring/ class=md-nav__link> <span class=md-ellipsis> 善用语法糖 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> 通用规则包标准 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> 通用规则包标准 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/what-is-rule-package/ class=md-nav__link> <span class=md-ellipsis> 什么是规则包? </span> </a> </li> <li class=md-nav__item> <a href=Standard/why-rule-package/ class=md-nav__link> <span class=md-ellipsis> 为什么要做规则包? </span> </a> </li> <li class=md-nav__item> <a href=Standard/what-is-standard/ class=md-nav__link> <span class=md-ellipsis> 什么是通用规则包标准? </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4> <label class=md-nav__link for=__nav_4_4 id=__nav_4_4_label tabindex> <span class=md-ellipsis> 术语表(草案) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4> <span class="md-nav__icon md-icon"></span> 术语表(草案) </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/Term/setting/ class=md-nav__link> <span class=md-ellipsis> setting 背景 </span> </a> </li> <li class=md-nav__item> <a href=Standard/Term/scenario/ class=md-nav__link> <span class=md-ellipsis> scenario 剧本 </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_3> <div class="md-nav__link md-nav__container"> <a href=Standard/Term/duration/ class="md-nav__link "> <span class=md-ellipsis> duration 时长 </span> </a> <label class="md-nav__link " for=__nav_4_4_3 id=__nav_4_4_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_3_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_3> <span class="md-nav__icon md-icon"></span> duration 时长 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/Term/duration/sene/ class=md-nav__link> <span class=md-ellipsis> sene 场 </span> </a> </li> <li class=md-nav__item> <a href=Standard/Term/duration/module/ class=md-nav__link> <span class=md-ellipsis> module 模组 </span> </a> </li> <li class=md-nav__item> <a href=Standard/Term/duration/campaign/ class=md-nav__link> <span class=md-ellipsis> campaign 战役 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_4> <div class="md-nav__link md-nav__container"> <a href=Standard/Term/DefaultDice/ class="md-nav__link "> <span class=md-ellipsis> DefaultDice 默认骰子 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> <label class="md-nav__link " for=__nav_4_4_4 id=__nav_4_4_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_4> <span class="md-nav__icon md-icon"></span> DefaultDice 默认骰子 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/Term/DefaultDice/_sides/ class=md-nav__link> <span class=md-ellipsis> _sides 骰子面数 </span> </a> </li> <li class=md-nav__item> <a href=Standard/Term/DefaultDice/_counts/ class=md-nav__link> <span class=md-ellipsis> _counts 骰子个数 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_5> <div class="md-nav__link md-nav__container"> <a href=Standard/Term/check/ class="md-nav__link "> <span class=md-ellipsis> check 检定 </span> </a> <label class="md-nav__link " for=__nav_4_4_5 id=__nav_4_4_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_5_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_5> <span class="md-nav__icon md-icon"></span> check 检定 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Standard/Term/check/ability/ class=md-nav__link> <span class=md-ellipsis> ability 检定 </span> <span class="md-status md-status--deprecated" title=已被废弃> </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4_4_6> <div class="md-nav__link md-nav__container"> <a href=Standard/Term/PlayerCard/ class="md-nav__link "> <span class=md-ellipsis> PlayerCard 人物卡 </span> <span class="md-status md-status--new" title=最近添加> </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_4_4_6_label aria-expanded=false> <label class=md-nav__title for=__nav_4_4_6> <span class="md-nav__icon md-icon"></span> PlayerCard 人物卡 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=CLI/ class="md-nav__link "> <span class=md-ellipsis> CLI 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> CLI 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=API/ class="md-nav__link "> <span class=md-ellipsis> API 参考 </span> </a> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> API 参考 </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> 其他帮助 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> 其他帮助 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=Help/TermList/ class=md-nav__link> <span class=md-ellipsis> 术语表一览 </span> </a> </li> <li class=md-nav__item> <a href=Help/PythonSkill/ class=md-nav__link> <span class=md-ellipsis> Python 技巧 </span> </a> </li> <li class=md-nav__item> <a href=Help/emoji/ class=md-nav__link> <span class=md-ellipsis> 图标、图例、注释说明 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=blog/ class="md-nav__link "> <span class=md-ellipsis> 博客 </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> 博客 </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_2> <label class=md-nav__link for=__nav_8_2 id=__nav_8_2_label tabindex> <span class=md-ellipsis> 归档 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_2_label aria-expanded=false> <label class=md-nav__title for=__nav_8_2> <span class="md-nav__icon md-icon"></span> 归档 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=blog/archive/2023/ class=md-nav__link> <span class=md-ellipsis> 2023 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8_3> <label class=md-nav__link for=__nav_8_3 id=__nav_8_3_label tabindex> <span class=md-ellipsis> 分类 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_8_3_label aria-expanded=false> <label class=md-nav__title for=__nav_8_3> <span class="md-nav__icon md-icon"></span> 分类 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=blog/category/rules/ class=md-nav__link> <span class=md-ellipsis> Rules </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex> <span class=md-ellipsis> 日志 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> 日志 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=changelog/ class=md-nav__link> <span class=md-ellipsis> 变更日志 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <div class=md-consent data-md-component=consent id=__consent hidden> <div class=md-consent__overlay></div> <aside class=md-consent__inner> <form class="md-consent__form md-grid md-typeset" name=consent> <h4>Cookie 偏好设置</h4> <p>我们使用Cookie来识别您的重复访问和偏好,以及衡量我们的文档的有效性和用户是否找到他们搜索的内容。在您的同意下,这将帮助我们改善我们的文档。</p> <input class=md-toggle type=checkbox id=__settings> <div class=md-consent__settings> <ul class=task-list> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=analytics checked> <span class=task-list-indicator></span> Google Analytics </label> </li> <li class=task-list-item> <label class=task-list-control> <input type=checkbox name=github checked> <span class=task-list-indicator></span> GitHub </label> </li> </ul> </div> <div class=md-consent__controls> <button class="md-button md-button--primary">同意</button> <label class=md-button for=__settings>管理设定</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script> <script id=__config type=application/json>{"base": ".", "features": ["content.action.edit", "content.action.view", "content.tooltips", "content.tabs.link", "content.code.annotate", "content.code.copy", "content.code.select", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.path", "navigation.indexes", "toc.follow", "navigation.top", "search.highlight", "search.suggest", "search.share", "header.autohide", "navigation.footer", "announce.dismiss", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress"], "search": "assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"provider": "mike"}}</script> <script src=assets/javascripts/bundle.d7c377c4.min.js></script> <script src=js/timeago.min.js></script> <script src=js/timeago_mkdocs_material.js></script> <script src=https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js></script> <script src=assets/javascripts/custom.9c11c319.min.js></script> </body> </html> \ No newline at end of file
diff --git a/dev/sitemap.xml.gz b/dev/sitemap.xml.gz
index ea3d1df8..167f6e61 100644
--- a/dev/sitemap.xml.gz
+++ b/dev/sitemap.xml.gz
Binary files differ
diff --git a/dev/src/material/__init__.py b/dev/src/material/__init__.py
deleted file mode 100644
index 559321f6..00000000
--- a/dev/src/material/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-__version__ = "9.4.4"
diff --git a/dev/src/material/extensions/__init__.py b/dev/src/material/extensions/__init__.py
deleted file mode 100644
index d1899378..00000000
--- a/dev/src/material/extensions/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
diff --git a/dev/src/material/extensions/emoji.py b/dev/src/material/extensions/emoji.py
deleted file mode 100644
index c8c955cc..00000000
--- a/dev/src/material/extensions/emoji.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from __future__ import annotations
-
-import codecs
-import functools
-import material
-import os
-
-from glob import iglob
-from inspect import getfile
-from markdown import Markdown
-from pymdownx import emoji, twemoji_db
-from xml.etree.ElementTree import Element
-
-# -----------------------------------------------------------------------------
-# Functions
-# -----------------------------------------------------------------------------
-
-# Create twemoji index
-def twemoji(options: object, md: Markdown):
- paths = options.get("custom_icons", [])[:]
- return _load_twemoji_index(tuple(paths))
-
-# Create emoji or icon
-def to_svg(
- index: str, shortname: str, alias: str, uc: str | None, alt: str,
- title: str, category: str, options: object, md: Markdown
-):
- if not uc:
- icons = md.inlinePatterns["emoji"].emoji_index["emoji"]
-
- # Create and return element to host icon
- el = Element("span", { "class": options.get("classes", index) })
- el.text = md.htmlStash.store(_load(icons[shortname]["path"]))
- return el
-
- # Delegate to `pymdownx.emoji` extension
- return emoji.to_svg(
- index, shortname, alias, uc, alt, title, category, options, md
- )
-
-# -----------------------------------------------------------------------------
-# Helper functions
-# -----------------------------------------------------------------------------
-
-# Load icon
-@functools.lru_cache(maxsize = None)
-def _load(file: str):
- with codecs.open(file, encoding = "utf-8") as f:
- return f.read()
-
-# Load twemoji index and add icons
-@functools.lru_cache(maxsize = None)
-def _load_twemoji_index(paths):
- index = {
- "name": "twemoji",
- "emoji": twemoji_db.emoji,
- "aliases": twemoji_db.aliases
- }
-
- # Compute path to theme root and traverse all icon directories
- root = os.path.dirname(getfile(material))
- root = os.path.join(root, "templates", ".icons")
- for path in [*paths, root]:
- base = os.path.normpath(path)
-
- # Index icons provided by the theme and via custom icons
- glob = os.path.join(base, "**", "*.svg")
- glob = iglob(os.path.normpath(glob), recursive = True)
- for file in glob:
- icon = file[len(base) + 1:-4].replace(os.path.sep, "-")
-
- # Add icon to index
- name = f":{icon}:"
- if not any(name in index[key] for key in ["emoji", "aliases"]):
- index["emoji"][name] = { "name": name, "path": file }
-
- # Return index
- return index
diff --git a/dev/src/material/overrides/home.html b/dev/src/material/overrides/home.html
deleted file mode 100644
index debea713..00000000
--- a/dev/src/material/overrides/home.html
+++ /dev/null
@@ -1,26 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% extends "main.html" %}
-{% block tabs %}
- {{ super() }}
- <style>.md-header{position:initial}.md-main__inner{margin:0}.md-content{display:none}@media screen and (min-width:60em){.md-sidebar--secondary{display:none}}@media screen and (min-width:76.25em){.md-sidebar--primary{display:none}}</style>
- <section class="mdx-container">
- <div class="md-grid md-typeset">
- <div class="mdx-hero">
- <div class="mdx-hero__content">
- <h1>水系核心</h1>
- <p>{{ config.site_description }}.</p>
- <a href="{{ page.next_page.url | url }}" title="{{ page.next_page.title | e }}" class="md-button md-button--primary">
- 快速开始
- </a>
- <a href="{{ 'Standard/what-is-rule-package/' | url }}" title="通用规则包标准" class="md-button">
- 查看标准
- </a>
- </div>
- </div>
- </div>
- </section>
-{% endblock %}
-{% block content %}{% endblock %}
-{% block footer %}{% endblock %}
diff --git a/dev/src/material/overrides/hooks/shortcodes.py b/dev/src/material/overrides/hooks/shortcodes.py
deleted file mode 100644
index 5b02e3cf..00000000
--- a/dev/src/material/overrides/hooks/shortcodes.py
+++ /dev/null
@@ -1,283 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from __future__ import annotations
-
-import posixpath
-import re
-
-from mkdocs.config.defaults import MkDocsConfig
-from mkdocs.structure.files import File, Files
-from mkdocs.structure.pages import Page
-from re import Match
-
-# -----------------------------------------------------------------------------
-# Hooks
-# -----------------------------------------------------------------------------
-
-# @todo
-def on_page_markdown(
- markdown: str, *, page: Page, config: MkDocsConfig, files: Files
-):
-
- # Replace callback
- def replace(match: Match):
- type, args = match.groups()
- args = args.strip()
- if type == "version":
- if args.startswith("insiders-"):
- return _badge_for_version_insiders(args, page, files)
- else:
- return _badge_for_version(args, page, files)
- elif type == "sponsors": return _badge_for_sponsors(page, files)
- elif type == "flag": return flag(args, page, files)
- elif type == "option": return option(args)
- elif type == "setting": return setting(args)
- elif type == "feature": return _badge_for_feature(args, page, files)
- elif type == "plugin": return _badge_for_plugin(args, page, files)
- elif type == "extension": return _badge_for_extension(args, page, files)
- elif type == "utility": return _badge_for_utility(args, page, files)
- elif type == "example": return _badge_for_example(args, page, files)
- elif type == "default":
- if args == "none": return _badge_for_default_none(page, files)
- elif args == "computed": return _badge_for_default_computed(page, files)
- else: return _badge_for_default(args, page, files)
-
- # Otherwise, raise an error
- raise RuntimeError(f"Unknown shortcode: {type}")
-
- # Find and replace all external asset URLs in current page
- return re.sub(
- r"<!-- md:(\w+)(.*?) -->",
- replace, markdown, flags = re.I | re.M
- )
-
-# -----------------------------------------------------------------------------
-# Helper functions
-# -----------------------------------------------------------------------------
-
-# Create a flag of a specific type
-def flag(args: str, page: Page, files: Files):
- type, *_ = args.split(" ", 1)
- if type == "experimental": return _badge_for_experimental(page, files)
- elif type == "required": return _badge_for_required(page, files)
- elif type == "customization": return _badge_for_customization(page, files)
- elif type == "metadata": return _badge_for_metadata(page, files)
- elif type == "multiple": return _badge_for_multiple(page, files)
- raise RuntimeError(f"Unknown type: {type}")
-
-# Create a linkable option
-def option(type: str):
- _, *_, name = re.split(r"[.:]", type)
- return f"[`{name}`](#+{type}){{ #+{type} }}\n\n"
-
-# Create a linkable setting - @todo append them to the bottom of the page
-def setting(type: str):
- _, *_, name = re.split(r"[.*]", type)
- return f"`{name}` {{ #{type} }}\n\n[{type}]: #{type}\n\n"
-
-# -----------------------------------------------------------------------------
-
-# Resolve path of file relative to given page - the posixpath always includes
-# one additional level of `..` which we need to remove
-def _resolve_path(path: str, page: Page, files: Files):
- path, anchor, *_ = f"{path}#".split("#")
- path = _resolve(files.get_file_from_path(path), page)
- return "#".join([path, anchor]) if anchor else path
-
-# Resolve path of file relative to given page - the posixpath always includes
-# one additional level of `..` which we need to remove
-def _resolve(file: File, page: Page):
- path = posixpath.relpath(file.src_uri, page.file.src_uri)
- return posixpath.sep.join(path.split(posixpath.sep)[1:])
-
-# -----------------------------------------------------------------------------
-
-# Create badge
-def _badge(icon: str, text: str = "", type: str = ""):
- classes = f"mdx-badge mdx-badge--{type}" if type else "mdx-badge"
- return "".join([
- f"<span class=\"{classes}\">",
- *([f"<span class=\"mdx-badge__icon\">{icon}</span>"] if icon else []),
- *([f"<span class=\"mdx-badge__text\">{text}</span>"] if text else []),
- f"</span>",
- ])
-
-# Create sponsors badge
-def _badge_for_sponsors(page: Page, files: Files):
- icon = "material-heart"
- href = _resolve_path("insiders/index.md", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Sponsors only')",
- type = "heart"
- )
-
-# Create badge for version
-def _badge_for_version(text: str, page: Page, files: Files):
- spec = text
- path = f"changelog/index.md#{spec}"
-
- # Return badge
- icon = "material-tag-outline"
- href = _resolve_path("conventions.md#version", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Minimum version')",
- text = f"[{text}]({_resolve_path(path, page, files)})" if spec else ""
- )
-
-# Create badge for version of Insiders
-def _badge_for_version_insiders(text: str, page: Page, files: Files):
- spec = text.replace("insiders-", "")
- path = f"insiders/changelog/index.md#{spec}"
-
- # Return badge
- icon = "material-tag-heart-outline"
- href = _resolve_path("conventions.md#version-insiders", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Minimum version')",
- text = f"[{text}]({_resolve_path(path, page, files)})" if spec else ""
- )
-
-# Create badge for feature
-def _badge_for_feature(text: str, page: Page, files: Files):
- icon = "material-toggle-switch"
- href = _resolve_path("conventions.md#feature", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Optional feature')",
- text = text
- )
-
-# Create badge for plugin
-def _badge_for_plugin(text: str, page: Page, files: Files):
- icon = "material-floppy"
- href = _resolve_path("conventions.md#plugin", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Plugin')",
- text = text
- )
-
-# Create badge for extension
-def _badge_for_extension(text: str, page: Page, files: Files):
- icon = "material-language-markdown"
- href = _resolve_path("conventions.md#extension", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Markdown extension')",
- text = text
- )
-
-# Create badge for utility
-def _badge_for_utility(text: str, page: Page, files: Files):
- icon = "material-package-variant"
- href = _resolve_path("conventions.md#utility", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Third-party utility')",
- text = text
- )
-
-# Create badge for example
-def _badge_for_example(text: str, page: Page, files: Files):
- return "\n".join([
- _badge_for_example_download(text, page, files),
- _badge_for_example_view(text, page, files)
- ])
-
-# Create badge for example view
-def _badge_for_example_view(text: str, page: Page, files: Files):
- icon = "material-folder-eye"
- href = f"https://mkdocs-material.github.io/examples/{text}/"
- return _badge(
- icon = f"[:{icon}:]({href} 'View example')",
- type = "right"
- )
-
-# Create badge for example download
-def _badge_for_example_download(text: str, page: Page, files: Files):
- icon = "material-folder-download"
- href = f"https://mkdocs-material.github.io/examples/{text}.zip"
- return _badge(
- icon = f"[:{icon}:]({href} 'Download example')",
- text = f"[`.zip`]({href})",
- type = "right"
- )
-
-# Create badge for default value
-def _badge_for_default(text: str, page: Page, files: Files):
- icon = "material-water"
- href = _resolve_path("conventions.md#default", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Default value')",
- text = text
- )
-
-# Create badge for empty default value
-def _badge_for_default_none(page: Page, files: Files):
- icon = "material-water-outline"
- href = _resolve_path("conventions.md#default", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Default value is empty')"
- )
-
-# Create badge for computed default value
-def _badge_for_default_computed(page: Page, files: Files):
- icon = "material-water-check"
- href = _resolve_path("conventions.md#default", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Default value is computed')"
- )
-
-# Create badge for metadata property flag
-def _badge_for_metadata(page: Page, files: Files):
- icon = "material-list-box-outline"
- href = _resolve_path("conventions.md#metadata", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Metadata property')"
- )
-
-# Create badge for required value flag
-def _badge_for_required(page: Page, files: Files):
- icon = "material-alert"
- href = _resolve_path("conventions.md#required", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Required value')"
- )
-
-# Create badge for customization flag
-def _badge_for_customization(page: Page, files: Files):
- icon = "material-brush-variant"
- href = _resolve_path("conventions.md#customization", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Customization')"
- )
-
-# Create badge for multiple instance flag
-def _badge_for_multiple(page: Page, files: Files):
- icon = "material-inbox-multiple"
- href = _resolve_path("conventions.md#multiple-instances", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Multiple instances')"
- )
-
-# Create badge for experimental flag
-def _badge_for_experimental(page: Page, files: Files):
- icon = "material-flask-outline"
- href = _resolve_path("conventions.md#experimental", page, files)
- return _badge(
- icon = f"[:{icon}:]({href} 'Experimental')"
- )
diff --git a/dev/src/material/overrides/hooks/translations.html b/dev/src/material/overrides/hooks/translations.html
deleted file mode 100644
index b77fcb4a..00000000
--- a/dev/src/material/overrides/hooks/translations.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro render_language(language) %}
- <div class="mdx-flags__item" markdown>
- :flag_{{ language.flag }}:{ .lg .middle }
- <span class="mdx-flags__content">
- <span>
- <strong>{{ language.name }}</strong>
- <code>{{ language.code }}</code>
- </span>
- {% if language.miss %}
- <span>
- <a href="{{ language.link }}">
- {{ language.miss | length }} translations missing
- </a>
- </span>
- {% else %}
- <small>Complete</small>
- {% endif %}
- </span>
- </div>
-{% endmacro %}
-{% macro render(translations, start = 1) %}
- <div class="mdx-columns mdx-flags" markdown>
- <ol markdown>
- {% for language in translations %}
- <li markdown>{{ render_language(language) }}</li>
- {% endfor %}
- </ol>
- </div>
-{% endmacro %}
diff --git a/dev/src/material/overrides/hooks/translations.py b/dev/src/material/overrides/hooks/translations.py
deleted file mode 100644
index 661fd18e..00000000
--- a/dev/src/material/overrides/hooks/translations.py
+++ /dev/null
@@ -1,193 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-import os
-import re
-
-from glob import iglob
-from mkdocs.config.defaults import MkDocsConfig
-from mkdocs.structure.pages import Page
-from urllib.parse import urlencode, urlparse
-
-# -----------------------------------------------------------------------------
-# Hooks
-# -----------------------------------------------------------------------------
-
-# Determine missing translations and render language overview in the setup
-# guide, including links to provide missing translations.
-def on_page_markdown(markdown: str, *, page: Page, config: MkDocsConfig, files):
- issue_url = "https://github.com/squidfunk/mkdocs-material/issues/new"
- if page.file.src_uri != "setup/changing-the-language.md":
- return
-
- # Collect all existing languages
- names: dict[str, str] = {}
- known: dict[str, dict[str, str]] = {}
- for path in iglob("src/templates/partials/languages/*.html"):
- with open(path, "r", encoding = "utf-8") as f:
- data = f.read()
-
- # Extract language code and name
- name, = re.findall(r"<!-- Translations: (.+) -->", data)
- code, _ = os.path.splitext(os.path.basename(path))
-
- # Map names and available translations
- names[code] = name
- known[code] = dict(re.findall(
- r"^ \"([^\"]+)\": \"([^\"]*)\"(?:,|$)?", data,
- re.MULTILINE
- ))
-
- # Remove technical stuff
- for key in [
- "direction",
- "search.config.pipeline",
- "search.config.lang",
- "search.config.separator"
- ]:
- if key in known[code]:
- del known[code][key]
-
- # Traverse all languages and compute missing translations
- languages = []
- reference = set(known["en"])
- for code, name in names.items():
- miss = reference - set(known[code])
-
- # Check each translations
- translations: list[str] = []
- for key, value in known["en"].items():
- if key in known[code]:
- translations.append(
- f" \"{key}\": \"{known[code][key]}\""
- )
- else:
- translations.append(
- f" \"{key}\": \"{value} ⬅️\""
- )
-
- # Assemble GitHub issue URL
- link = urlparse(issue_url)
- link = link._replace(query = urlencode({
- "template": "04-add-translations.yml",
- "title": f"Update {name} translations",
- "translations": "\n".join([
- "{% macro t(key) %}{{ {",
- ",\n".join(translations),
- "}[key] }}{% endmacro %}"
- ]),
- "country-flag": f":flag_{countries[code]}:"
- }))
-
- # Add translation
- languages.append({
- "flag": countries[code],
- "code": code,
- "name": name,
- "link": link.geturl(),
- "miss": miss
- })
-
- # Load template and render translations
- env = config.theme.get_env()
- template = env.get_template( "hooks/translations.html")
- translations = template.module.render(
- sorted(languages, key = lambda language: language["name"])
- )
-
- # Replace translation marker
- return markdown.replace(
- "<!-- hooks/translations.py -->", "\n".join(
- [line.lstrip() for line in translations.split("\n")
- ]
- ))
-
-# -----------------------------------------------------------------------------
-# Data
-# -----------------------------------------------------------------------------
-
-# Map ISO 639-1 (languages) to ISO 3166 (countries)
-countries = dict({
- "af": "za",
- "ar": "ae",
- "be": "by",
- "bg": "bg",
- "bn": "bd",
- "ca": "es",
- "cs": "cz",
- "da": "dk",
- "de": "de",
- "el": "gr",
- "en": "us",
- "eo": "eu",
- "es": "es",
- "et": "ee",
- "eu": "es",
- "fa": "ir",
- "fi": "fi",
- "fr": "fr",
- "gl": "es",
- "he": "il",
- "hi": "in",
- "hr": "hr",
- "hu": "hu",
- "hy": "am",
- "id": "id",
- "is": "is",
- "it": "it",
- "ja": "jp",
- "ka": "ge",
- "kn": "in",
- "ko": "kr",
- "ku-IQ": "iq",
- "lb": "lu",
- "lt": "lt",
- "lv": "lv",
- "mk": "mk",
- "mn": "mn",
- "ms": "my",
- "my": "mm",
- "nb": "no",
- "nl": "nl",
- "nn": "no",
- "pl": "pl",
- "pt-BR": "br",
- "pt": "pt",
- "ro": "ro",
- "ru": "ru",
- "sa": "in",
- "sh": "rs",
- "si": "lk",
- "sk": "sk",
- "sl": "si",
- "sr": "rs",
- "sv": "se",
- "te": "in",
- "th": "th",
- "tl": "ph",
- "tr": "tr",
- "uk": "ua",
- "ur": "pk",
- "uz": "uz",
- "vi": "vn",
- "zh": "cn",
- "zh-Hant": "cn",
- "zh-TW": "tw"
-})
diff --git a/dev/src/material/overrides/main.html b/dev/src/material/overrides/main.html
deleted file mode 100644
index e723f098..00000000
--- a/dev/src/material/overrides/main.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% extends "base.html" %}
-{% block extrahead %}
- <link rel="stylesheet" href="{{ 'assets/stylesheets/custom.00c04c01.min.css' | url }}">
-{% endblock %}
-{% block outdated %}
- 当前阅览的并不是稳定版,
- <a href="{{ '../' ~ base_url }}">
- <strong>单击此处跳转到稳定版文档.</strong>
- </a>
-{% endblock %}
-{% block scripts %}
- {{ super() }}
- <script src="{{ 'assets/javascripts/custom.9c11c319.min.js' | url }}"></script>
-{% endblock %}
diff --git a/dev/src/material/plugins/__init__.py b/dev/src/material/plugins/__init__.py
deleted file mode 100644
index d1899378..00000000
--- a/dev/src/material/plugins/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
diff --git a/dev/src/material/plugins/blog/__init__.py b/dev/src/material/plugins/blog/__init__.py
deleted file mode 100644
index d1899378..00000000
--- a/dev/src/material/plugins/blog/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
diff --git a/dev/src/material/plugins/blog/author.py b/dev/src/material/plugins/blog/author.py
deleted file mode 100644
index 1dcfc2de..00000000
--- a/dev/src/material/plugins/blog/author.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from mkdocs.config.base import Config
-from mkdocs.config.config_options import DictOfItems, SubConfig, Type
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Author
-class Author(Config):
- name = Type(str)
- description = Type(str)
- avatar = Type(str)
-
-# -----------------------------------------------------------------------------
-
-# Authors
-class Authors(Config):
- authors = DictOfItems(SubConfig(Author), default = {})
diff --git a/dev/src/material/plugins/blog/config.py b/dev/src/material/plugins/blog/config.py
deleted file mode 100644
index c7a85095..00000000
--- a/dev/src/material/plugins/blog/config.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from functools import partial
-from markdown.extensions.toc import slugify
-from mkdocs.config.config_options import Choice, Deprecated, Optional, Type
-from mkdocs.config.base import Config
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Blog plugin configuration
-class BlogConfig(Config):
- enabled = Type(bool, default = True)
-
- # Settings for blog
- blog_dir = Type(str, default = "blog")
- blog_toc = Type(bool, default = False)
-
- # Settings for posts
- post_dir = Type(str, default = "{blog}/posts")
- post_date_format = Type(str, default = "long")
- post_url_date_format = Type(str, default = "yyyy/MM/dd")
- post_url_format = Type(str, default = "{date}/{slug}")
- post_url_max_categories = Type(int, default = 1)
- post_slugify = Type((type(slugify), partial), default = slugify)
- post_slugify_separator = Type(str, default = "-")
- post_excerpt = Choice(["optional", "required"], default = "optional")
- post_excerpt_max_authors = Type(int, default = 1)
- post_excerpt_max_categories = Type(int, default = 5)
- post_excerpt_separator = Type(str, default = "<!-- more -->")
- post_readtime = Type(bool, default = True)
- post_readtime_words_per_minute = Type(int, default = 265)
-
- # Settings for archive
- archive = Type(bool, default = True)
- archive_name = Type(str, default = "blog.archive")
- archive_date_format = Type(str, default = "yyyy")
- archive_url_date_format = Type(str, default = "yyyy")
- archive_url_format = Type(str, default = "archive/{date}")
- archive_toc = Optional(Type(bool))
-
- # Settings for categories
- categories = Type(bool, default = True)
- categories_name = Type(str, default = "blog.categories")
- categories_url_format = Type(str, default = "category/{slug}")
- categories_slugify = Type((type(slugify), partial), default = slugify)
- categories_slugify_separator = Type(str, default = "-")
- categories_allowed = Type(list, default = [])
- categories_toc = Optional(Type(bool))
-
- # Settings for pagination
- pagination = Type(bool, default = True)
- pagination_per_page = Type(int, default = 10)
- pagination_url_format = Type(str, default = "page/{page}")
- pagination_format = Type(str, default = "~2~")
- pagination_if_single_page = Type(bool, default = False)
- pagination_keep_content = Type(bool, default = False)
-
- # Settings for authors
- authors = Type(bool, default = True)
- authors_file = Type(str, default = "{blog}/.authors.yml")
-
- # Settings for drafts
- draft = Type(bool, default = False)
- draft_on_serve = Type(bool, default = True)
- draft_if_future_date = Type(bool, default = False)
-
- # Deprecated settings
- pagination_template = Deprecated(moved_to = "pagination_format")
diff --git a/dev/src/material/plugins/blog/plugin.py b/dev/src/material/plugins/blog/plugin.py
deleted file mode 100644
index 375b8cfe..00000000
--- a/dev/src/material/plugins/blog/plugin.py
+++ /dev/null
@@ -1,884 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from __future__ import annotations
-
-import logging
-import os
-import posixpath
-import yaml
-
-from babel.dates import format_date
-from datetime import datetime
-from mkdocs.config.defaults import MkDocsConfig
-from mkdocs.exceptions import PluginError
-from mkdocs.plugins import BasePlugin, event_priority
-from mkdocs.structure import StructureItem
-from mkdocs.structure.files import File, Files, InclusionLevel
-from mkdocs.structure.nav import Navigation, Section
-from mkdocs.structure.pages import Page
-from mkdocs.utils import copy_file, get_relative_url
-from paginate import Page as Pagination
-from shutil import rmtree
-from tempfile import mkdtemp
-from yaml import SafeLoader
-
-from .author import Authors
-from .config import BlogConfig
-from .readtime import readtime
-from .structure import Archive, Category, Excerpt, Post, View
-from .templates import url_filter
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Blog plugin
-class BlogPlugin(BasePlugin[BlogConfig]):
- supports_multiple_instances = True
-
- # Initialize plugin
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
- # Initialize incremental builds
- self.is_serve = False
- self.is_dirty = False
-
- # Initialize temporary directory
- self.temp_dir = mkdtemp()
-
- # Determine whether we're serving the site
- def on_startup(self, *, command, dirty):
- self.is_serve = command == "serve"
- self.is_dirty = dirty
-
- # Initialize authors and set defaults
- def on_config(self, config):
- if not self.config.enabled:
- return
-
- # Initialize entrypoint
- self.blog: View
-
- # Initialize and resolve authors, if enabled
- if self.config.authors:
- self.authors = self._resolve_authors(config)
-
- # Initialize table of contents settings
- if not isinstance(self.config.archive_toc, bool):
- self.config.archive_toc = self.config.blog_toc
- if not isinstance(self.config.categories_toc, bool):
- self.config.categories_toc = self.config.blog_toc
-
- # By default, drafts are rendered when the documentation is served,
- # but not when it is built, for a better user experience
- if self.is_serve and self.config.draft_on_serve:
- self.config.draft = True
-
- # Resolve and load posts and generate views (run later) - we want to allow
- # other plugins to add generated posts or views, so we run this plugin as
- # late as possible. We also need to remove the posts from the navigation
- # before navigation is constructed, as the entrypoint should be considered
- # to be the active page for each post. The URLs of posts are computed before
- # Markdown processing, so that when linking to and from posts, behavior is
- # exactly the same as with regular documentation pages. We create all pages
- # related to posts as part of this plugin, so we control the entire process.
- @event_priority(-50)
- def on_files(self, files, *, config):
- if not self.config.enabled:
- return
-
- # Resolve path to entrypoint and site directory
- root = posixpath.normpath(self.config.blog_dir)
- site = config.site_dir
-
- # Compute path to posts directory
- path = self.config.post_dir.format(blog = root)
- path = posixpath.normpath(path)
-
- # Adjust destination paths for media files
- for file in files.media_files():
- if not file.src_uri.startswith(path):
- continue
-
- # We need to adjust destination paths for assets to remove the
- # purely functional posts directory prefix when building
- file.dest_uri = file.dest_uri.replace(path, root)
- file.abs_dest_path = os.path.join(site, file.dest_path)
- file.url = file.url.replace(path, root)
-
- # Resolve entrypoint and posts sorted by descending date - if the posts
- # directory or entrypoint do not exist, they are automatically created
- self.blog = self._resolve(files, config)
- self.blog.posts = sorted(
- self._resolve_posts(files, config),
- key = lambda post: post.config.date.created,
- reverse = True
- )
-
- # Generate views for archive
- if self.config.archive:
- views = self._generate_archive(config, files)
- self.blog.views.extend(views)
-
- # Generate views for categories
- if self.config.categories:
- views = self._generate_categories(config, files)
- self.blog.views.extend(views)
-
- # Generate pages for views
- if self.config.pagination:
- for view in self._resolve_views(self.blog):
- for page in self._generate_pages(view, config, files):
- page.file.inclusion = InclusionLevel.EXCLUDED
- view.pages.append(page)
-
- # Ensure that entrypoint is always included in navigation
- self.blog.file.inclusion = InclusionLevel.INCLUDED
-
- # Attach posts and views to navigation (run later) - again, we allow other
- # plugins to alter the navigation before we start to attach posts and views
- # generated by this plugin at the correct locations in the navigation. Also,
- # we make sure to correct links to the parent and siblings of each page.
- @event_priority(-50)
- def on_nav(self, nav, *, config, files):
- if not self.config.enabled:
- return
-
- # If we're not building a standalone blog, the entrypoint will always
- # have a parent when it is included in the navigation. The parent is
- # essential to correctly resolve the location where the archive and
- # category views are attached. If the entrypoint doesn't have a parent,
- # we know that the author did not include it in the navigation, so we
- # explicitly mark it as not included.
- if not self.blog.parent and self.config.blog_dir != ".":
- self.blog.file.inclusion = InclusionLevel.NOT_IN_NAV
-
- # Attach posts to entrypoint without adding them to the navigation, so
- # that the entrypoint is considered to be the active page for each post
- self._attach(self.blog, [None, *reversed(self.blog.posts), None])
- for post in self.blog.posts:
- post.file.inclusion = InclusionLevel.NOT_IN_NAV
-
- # Revert temporary exclusion of views from navigation
- for view in self._resolve_views(self.blog):
- for page in view.pages:
- page.file.inclusion = self.blog.file.inclusion
-
- # Attach views for archive
- if self.config.archive:
- title = self._translate(self.config.archive_name, config)
- views = [_ for _ in self.blog.views if isinstance(_, Archive)]
-
- # Attach and link views for archive
- if self.blog.file.inclusion.is_in_nav():
- self._attach_to(self.blog, Section(title, views), nav)
-
- # Attach views for categories
- if self.config.categories:
- title = self._translate(self.config.categories_name, config)
- views = [_ for _ in self.blog.views if isinstance(_, Category)]
-
- # Attach and link views for categories, if any
- if self.blog.file.inclusion.is_in_nav() and views:
- self._attach_to(self.blog, Section(title, views), nav)
-
- # Attach pages for views
- if self.config.pagination:
- for view in self._resolve_views(self.blog):
- for at in range(1, len(view.pages)):
- self._attach_at(view.parent, view, view.pages[at])
-
- # Prepare post for rendering (run later) - allow other plugins to alter
- # the contents or metadata of a post before it is rendered and make sure
- # that the post includes a separator, which is essential for rendering
- # excerpts that should be included in views
- @event_priority(-50)
- def on_page_markdown(self, markdown, *, page, config, files):
- if not self.config.enabled:
- return
-
- # Skip if page is not a post managed by this instance - this plugin has
- # support for multiple instances, which is why this check is necessary
- if page not in self.blog.posts:
- if not self.config.pagination:
- return
-
- # We set the contents of the view to its title if pagination should
- # not keep the content of the original view on paginated views
- if not self.config.pagination_keep_content:
- view = self._resolve_original(page)
- if view in self._resolve_views(self.blog):
-
- # If the current view is paginated, use the rendered title
- # of the original view in case the author set the title in
- # the page's contents, or it would be overridden with the
- # one set in mkdocs.yml, leading to inconsistent headings
- assert isinstance(view, View)
- if view != page:
- name = view._title_from_render or view.title
- return f"# {name}"
-
- # Nothing more to be done for views
- return
-
- # Extract and assign authors to post, if enabled
- if self.config.authors:
- for name in page.config.authors:
- if name not in self.authors:
- raise PluginError(f"Couldn't find author '{name}'")
-
- # Append to list of authors
- page.authors.append(self.authors[name])
-
- # Extract settings for excerpts
- separator = self.config.post_excerpt_separator
- max_authors = self.config.post_excerpt_max_authors
- max_categories = self.config.post_excerpt_max_categories
-
- # Ensure presence of separator and throw, if its absent and required -
- # we append the separator to the end of the contents of the post, if it
- # is not already present, so we can remove footnotes or other content
- # from the excerpt without affecting the content of the excerpt
- if separator not in page.markdown:
- path = page.file.src_path
- if self.config.post_excerpt == "required":
- raise PluginError(
- f"Couldn't find '{separator}' separator in '{path}'"
- )
- else:
- page.markdown += f"\n\n{separator}"
-
- # Create excerpt for post and inherit authors and categories - excerpts
- # can contain a subset of the authors and categories of the post
- page.excerpt = Excerpt(page, config, files)
- page.excerpt.authors = page.authors[:max_authors]
- page.excerpt.categories = page.categories[:max_categories]
-
- # Process posts
- def on_page_content(self, html, *, page, config, files):
- if not self.config.enabled:
- return
-
- # Skip if page is not a post managed by this instance - this plugin has
- # support for multiple instances, which is why this check is necessary
- if page not in self.blog.posts:
- return
-
- # Compute readtime of post, if enabled and not explicitly set
- if self.config.post_readtime:
- words_per_minute = self.config.post_readtime_words_per_minute
- if not page.config.readtime:
- page.config.readtime = readtime(html, words_per_minute)
-
- # Register template filters for plugin
- def on_env(self, env, *, config, files):
- if not self.config.enabled:
- return
-
- # Filter for formatting dates related to posts
- def date_filter(date: datetime):
- return self._format_date_for_post(date, config)
-
- # Register custom template filters
- env.filters["date"] = date_filter
- env.filters["url"] = url_filter
-
- # Prepare view for rendering (run latest) - views are rendered last, as we
- # need to mutate the navigation to account for pagination. The main problem
- # is that we need to replace the view in the navigation, because otherwise
- # the view would not be considered active.
- @event_priority(-100)
- def on_page_context(self, context, *, page, config, nav):
- if not self.config.enabled:
- return
-
- # Skip if page is not a view managed by this instance - this plugin has
- # support for multiple instances, which is why this check is necessary
- view = self._resolve_original(page)
- if view not in self._resolve_views(self.blog):
- return
-
- # If the current view is paginated, replace and rewire it - the current
- # view temporarily becomes the main view, and is reset after rendering
- assert isinstance(view, View)
- if view != page:
- prev = view.pages[view.pages.index(page) - 1]
-
- # Replace previous page with current page
- items = self._resolve_siblings(view, nav)
- items[items.index(prev)] = page
-
- # Render excerpts and prepare pagination
- posts, pagination = self._render(page)
-
- # Render pagination links
- def pager(args: object):
- return pagination.pager(
- format = self.config.pagination_format,
- show_if_single_page = self.config.pagination_if_single_page,
- **args
- )
-
- # Assign posts and pagination to context
- context["posts"] = posts
- context["pagination"] = pager if pagination else None
-
- # After rendering a paginated view, replace the URL of the paginated view
- # with the URL of the original view - since we need to replace the original
- # view with a paginated view in `on_page_context` for correct resolution of
- # the active state, we must fix the paginated view URLs after rendering
- def on_post_page(self, output, *, page, config):
- if not self.config.enabled:
- return
-
- # Skip if page is not a view managed by this instance - this plugin has
- # support for multiple instances, which is why this check is necessary
- view = self._resolve_original(page)
- if view not in self._resolve_views(self.blog):
- return
-
- # If the current view is paginated, replace the URL of the paginated
- # view with the URL of the original view - see https://t.ly/Yeh-P
- assert isinstance(view, View)
- if view != page:
- page.file.url = view.file.url
-
- # Remove temporary directory on shutdown
- def on_shutdown(self):
- rmtree(self.temp_dir)
-
- # -------------------------------------------------------------------------
-
- # Check if the given post is excluded
- def _is_excluded(self, post: Post):
- if self.config.draft:
- return False
-
- # If a post was not explicitly marked or unmarked as draft, and the
- # date should be taken into account, we automatically mark it as draft
- # if the publishing date is in the future. This, of course, is opt-in
- # and must be explicitly enabled by the author.
- if not isinstance(post.config.draft, bool):
- if self.config.draft_if_future_date:
- return post.config.date.created > datetime.now()
-
- # Post might be a draft
- return bool(post.config.draft)
-
- # -------------------------------------------------------------------------
-
- # Resolve entrypoint - the entrypoint of the blog must have been created
- # if it did not exist before, and hosts all posts sorted by descending date
- def _resolve(self, files: Files, config: MkDocsConfig):
- path = os.path.join(self.config.blog_dir, "index.md")
- path = os.path.normpath(path)
-
- # Create entrypoint, if it does not exist - note that the entrypoint is
- # created in the docs directory, not in the temporary directory
- docs = os.path.relpath(config.docs_dir)
- name = os.path.join(docs, path)
- if not os.path.isfile(name):
- file = self._path_to_file(path, config, temp = False)
- files.append(file)
-
- # Create file in docs directory
- self._save_to_file(file.abs_src_path, "# Blog\n\n")
-
- # Create and return entrypoint
- file = files.get_file_from_path(path)
- return View(None, file, config)
-
- # Resolve post - the caller must make sure that the given file points to an
- # actual post (and not a page), or behavior might be unpredictable
- def _resolve_post(self, file: File, config: MkDocsConfig):
- post = Post(file, config)
-
- # Compute path and create a temporary file for path resolution
- path = self._format_path_for_post(post, config)
- temp = self._path_to_file(path, config, temp = False)
-
- # Replace destination file system path and URL
- file.dest_uri = temp.dest_uri
- file.abs_dest_path = temp.abs_dest_path
- file.url = temp.url
-
- # Replace canonical URL and return post
- post._set_canonical_url(config.site_url)
- return post
-
- # Resolve posts from directory - traverse all documentation pages and filter
- # and yield those that are located in the posts directory
- def _resolve_posts(self, files: Files, config: MkDocsConfig):
- path = self.config.post_dir.format(blog = self.config.blog_dir)
- path = os.path.normpath(path)
-
- # Create posts directory, if it does not exist
- docs = os.path.relpath(config.docs_dir)
- name = os.path.join(docs, path)
- if not os.path.isdir(name):
- os.makedirs(name, exist_ok = True)
-
- # Filter posts from pages
- for file in files.documentation_pages():
- if not file.src_path.startswith(path):
- continue
-
- # Temporarily remove post from navigation
- file.inclusion = InclusionLevel.EXCLUDED
-
- # Resolve post - in order to determine whether a post should be
- # excluded, we must load it and analyze its metadata. All posts
- # marked as drafts are excluded, except for when the author has
- # configured drafts to be included in the navigation.
- post = self._resolve_post(file, config)
- if not self._is_excluded(post):
- yield post
-
- # Resolve authors - check if there's an authors file at the configured
- # location, and if one was found, load and validate it
- def _resolve_authors(self, config: MkDocsConfig):
- path = self.config.authors_file.format(blog = self.config.blog_dir)
- path = os.path.normpath(path)
-
- # Resolve path relative to docs directory
- docs = os.path.relpath(config.docs_dir)
- file = os.path.join(docs, path)
-
- # If the authors file does not exist, return here
- config: Authors = Authors()
- if not os.path.isfile(file):
- return config.authors
-
- # Open file and parse as YAML
- with open(file, encoding = "utf-8") as f:
- config.config_file_path = os.path.abspath(file)
- try:
- config.load_dict(yaml.load(f, SafeLoader) or {})
-
- # The authors file could not be loaded because of a syntax error,
- # which we display to the author with a nice error message
- except Exception as e:
- raise PluginError(
- f"Error reading authors file '{path}' in '{docs}':\n"
- f"{e}"
- )
-
- # Validate authors and throw if errors occurred
- errors, warnings = config.validate()
- if not config.authors and warnings:
- log.warning(
- f"Action required: the format of the authors file changed.\n"
- f"All authors must now be located under the 'authors' key.\n"
- f"Please adjust '{file}' to match:\n"
- f"\n"
- f"authors:\n"
- f" squidfunk:\n"
- f" avatar: https://avatars.githubusercontent.com/u/932156\n"
- f" description: Creator\n"
- f" name: Martin Donath\n"
- f"\n"
- )
- for _, w in warnings:
- log.warning(w)
- for _, e in errors:
- raise PluginError(
- f"Error reading authors file '{path}' in '{docs}':\n"
- f"{e}"
- )
-
- # Return authors
- return config.authors
-
- # Resolve views of the given view in pre-order
- def _resolve_views(self, view: View):
- yield view
-
- # Resolve views recursively
- for page in view.views:
- for next in self._resolve_views(page):
- assert isinstance(next, View)
- yield next
-
- # Resolve siblings of a navigation item
- def _resolve_siblings(self, item: StructureItem, nav: Navigation):
- if isinstance(item.parent, Section):
- return item.parent.children
- else:
- return nav.items
-
- # Resolve original page or view (e.g. for paginated views)
- def _resolve_original(self, page: Page):
- if isinstance(page, View):
- return page.pages[0]
- else:
- return page
-
- # -------------------------------------------------------------------------
-
- # Generate views for archive - analyze posts and generate the necessary
- # views, taking the date format provided by the author into account
- def _generate_archive(self, config: MkDocsConfig, files: Files):
- for post in self.blog.posts:
- date = post.config.date.created
-
- # Compute name and path of archive view
- name = self._format_date_for_archive(date, config)
- path = self._format_path_for_archive(post, config)
-
- # Create file for view, if it does not exist
- file = files.get_file_from_path(path)
- if not file or self.temp_dir not in file.abs_src_path:
- file = self._path_to_file(path, config)
- files.append(file)
-
- # Create file in temporary directory
- self._save_to_file(file.abs_src_path, f"# {name}")
-
- # Create and yield view - we don't explicitly set the title of
- # the view, so authors can override them in the page's content
- if not isinstance(file.page, Archive):
- yield Archive(None, file, config)
-
- # Assign post to archive
- assert isinstance(file.page, Archive)
- file.page.posts.append(post)
-
- # Generate views for categories - analyze posts and generate the necessary
- # views, taking the allowed categories as set by the author into account
- def _generate_categories(self, config: MkDocsConfig, files: Files):
- for post in self.blog.posts:
- for name in post.config.categories:
- path = self._format_path_for_category(name)
-
- # Ensure category is in non-empty allow list
- categories = self.config.categories_allowed or [name]
- if name not in categories:
- docs = os.path.relpath(config.docs_dir)
- path = os.path.relpath(post.file.abs_src_path, docs)
- raise PluginError(
- f"Error reading categories of post '{path}' in "
- f"'{docs}': category '{name}' not in allow list"
- )
-
- # Create file for view, if it does not exist
- file = files.get_file_from_path(path)
- if not file or self.temp_dir not in file.abs_src_path:
- file = self._path_to_file(path, config)
- files.append(file)
-
- # Create file in temporary directory
- self._save_to_file(file.abs_src_path, f"# {name}")
-
- # Create and yield view - we don't explicitly set the title of
- # the view, so authors can override them in the page's content
- if not isinstance(file.page, Category):
- yield Category(None, file, config)
-
- # Assign post to category and vice versa
- assert isinstance(file.page, Category)
- file.page.posts.append(post)
- post.categories.append(file.page)
-
- # Generate pages for pagination - analyze view and generate the necessary
- # pages, creating a chain of views for simple rendering and replacement
- def _generate_pages(self, view: View, config: MkDocsConfig, files: Files):
- yield view
-
- # Compute pagination boundaries and create pages - pages are internally
- # handled as copies of a view, as they map to the same source location
- step = self.config.pagination_per_page
- for at in range(step, len(view.posts), step):
- path = self._format_path_for_pagination(view, 1 + at // step)
-
- # Create file for view, if it does not exist
- file = files.get_file_from_path(path)
- if not file or self.temp_dir not in file.abs_src_path:
- file = self._path_to_file(path, config)
- files.append(file)
-
- # Copy file to temporary directory
- copy_file(view.file.abs_src_path, file.abs_src_path)
-
- # Create view and attach to previous page
- if not isinstance(file.page, View):
- yield View(None, file, config)
-
- # Assign pages and posts to view
- assert isinstance(file.page, View)
- file.page.pages = view.pages
- file.page.posts = view.posts
-
- # -------------------------------------------------------------------------
-
- # Attach a list of pages to each other and to the given parent item without
- # explicitly adding them to the navigation, which can be done by the caller
- def _attach(self, parent: StructureItem, pages: list[Page]):
- for tail, page, head in zip(pages, pages[1:], pages[2:]):
-
- # Link page to parent and siblings
- page.parent = parent
- page.previous_page = tail
- page.next_page = head
-
- # If the page is a view, we know that we generated it and need to
- # link its siblings back to the view
- if isinstance(page, View):
- view = self._resolve_original(page)
- if tail: tail.next_page = view
- if head: head.previous_page = view
-
- # Attach a page to the given parent and link it to the previous and next
- # page of the given host - this is exclusively used for paginated views
- def _attach_at(self, parent: StructureItem, host: Page, page: Page):
- self._attach(parent, [host.previous_page, page, host.next_page])
-
- # Attach a section as a sibling to the given view, make sure its pages are
- # part of the navigation, and ensure all pages are linked correctly
- def _attach_to(self, view: View, section: Section, nav: Navigation):
- section.parent = view.parent
-
- # Resolve siblings, which are the children of the parent section, or
- # the top-level list of navigation items if the view is at the root of
- # the project, and append the given section to it. It's currently not
- # possible to chose the position of a section.
- items = self._resolve_siblings(view, nav)
- items.append(section)
-
- # Find last sibling that is a page, skipping sections, as we need to
- # append the given section after all other pages
- tail = next(item for item in reversed(items) if isinstance(item, Page))
- head = tail.next_page
-
- # Attach section to navigation and pages to each other
- nav.pages.extend(section.children)
- self._attach(section, [tail, *section.children, head])
-
- # -------------------------------------------------------------------------
-
- # Render excerpts and pagination for the given view
- def _render(self, view: View):
- posts, pagination = view.posts, None
-
- # Create pagination, if enabled
- if self.config.pagination:
- at = view.pages.index(view)
-
- # Compute pagination boundaries
- step = self.config.pagination_per_page
- p, q = at * step, at * step + step
-
- # Extract posts in pagination boundaries
- posts = view.posts[p:q]
- pagination = self._render_pagination(view, (p, q))
-
- # Render excerpts for selected posts
- posts = [
- self._render_post(post.excerpt, view)
- for post in posts if post.excerpt
- ]
-
- # Return posts and pagination
- return posts, pagination
-
- # Render excerpt in the context of the given view
- def _render_post(self, excerpt: Excerpt, view: View):
- excerpt.render(view, self.config.post_excerpt_separator)
-
- # Determine whether to add posts to the table of contents of the view -
- # note that those settings can be changed individually for each type of
- # view, which is why we need to check the type of view and the table of
- # contents setting for that type of view
- toc = self.config.blog_toc
- if isinstance(view, Archive):
- toc = self.config.archive_toc
- if isinstance(view, Category):
- toc = self.config.categories_toc
-
- # Attach top-level table of contents item to view if it should be added
- # and both, the view and excerpt contain table of contents items
- if toc and excerpt.toc.items and view.toc.items:
- view.toc.items[0].children.append(excerpt.toc.items[0])
-
- # Return excerpt
- return excerpt
-
- # Create pagination for the given view and range
- def _render_pagination(self, view: View, range: tuple[int, int]):
- p, q = range
-
- # Create URL from the given page to another page
- def url_maker(n: int):
- return get_relative_url(view.pages[n - 1].url, view.url)
-
- # Return pagination
- return Pagination(
- view.posts, page = q // (q - p),
- items_per_page = q - p,
- url_maker = url_maker
- )
-
- # -------------------------------------------------------------------------
-
- # Format path for post
- def _format_path_for_post(self, post: Post, config: MkDocsConfig):
- categories = post.config.categories[:self.config.post_url_max_categories]
- categories = [self._slugify_category(name) for name in categories]
-
- # Replace placeholders in format string
- date = post.config.date.created
- path = self.config.post_url_format.format(
- categories = "/".join(categories),
- date = self._format_date_for_post_url(date, config),
- file = post.file.name,
- slug = post.config.slug or self._slugify_post(post)
- )
-
- # Normalize path and strip slashes at the beginning and end
- path = posixpath.normpath(path.strip("/"))
- return posixpath.join(self.config.blog_dir, f"{path}.md")
-
- # Format path for archive
- def _format_path_for_archive(self, post: Post, config: MkDocsConfig):
- date = post.config.date.created
- path = self.config.archive_url_format.format(
- date = self._format_date_for_archive_url(date, config)
- )
-
- # Normalize path and strip slashes at the beginning and end
- path = posixpath.normpath(path.strip("/"))
- return posixpath.join(self.config.blog_dir, f"{path}.md")
-
- # Format path for category
- def _format_path_for_category(self, name: str):
- path = self.config.categories_url_format.format(
- slug = self._slugify_category(name)
- )
-
- # Normalize path and strip slashes at the beginning and end
- path = posixpath.normpath(path.strip("/"))
- return posixpath.join(self.config.blog_dir, f"{path}.md")
-
- # Format path for pagination
- def _format_path_for_pagination(self, view: View, page: int):
- path = self.config.pagination_url_format.format(
- page = page
- )
-
- # Compute base path for pagination - if the given view is an index file,
- # we need to pop the file name from the base so it's not part of the URL
- # and we need to append `index` to the path, so the paginated view is
- # also an index page - see https://t.ly/71MKF
- base, _ = posixpath.splitext(view.file.src_uri)
- if view.is_index:
- base = posixpath.dirname(base)
- path = posixpath.join(path, "index")
-
- # Normalize path and strip slashes at the beginning and end
- path = posixpath.normpath(path.strip("/"))
- return posixpath.join(base, f"{path}.md")
-
- # -------------------------------------------------------------------------
-
- # Format date
- def _format_date(self, date: datetime, format: str, config: MkDocsConfig):
- locale = config.theme["language"]
- return format_date(date, format = format, locale = locale)
-
- # Format date for post
- def _format_date_for_post(self, date: datetime, config: MkDocsConfig):
- format = self.config.post_date_format
- return self._format_date(date, format, config)
-
- # Format date for post URL
- def _format_date_for_post_url(self, date: datetime, config: MkDocsConfig):
- format = self.config.post_url_date_format
- return self._format_date(date, format, config)
-
- # Format date for archive
- def _format_date_for_archive(self, date: datetime, config: MkDocsConfig):
- format = self.config.archive_date_format
- return self._format_date(date, format, config)
-
- # Format date for archive URL
- def _format_date_for_archive_url(self, date: datetime, config: MkDocsConfig):
- format = self.config.archive_url_date_format
- return self._format_date(date, format, config)
-
- # -------------------------------------------------------------------------
-
- # Slugify post title
- def _slugify_post(self, post: Post):
- separator = self.config.post_slugify_separator
- return self.config.post_slugify(post.title, separator)
-
- # Slugify category
- def _slugify_category(self, name: str):
- separator = self.config.categories_slugify_separator
- return self.config.categories_slugify(name, separator)
-
- # -------------------------------------------------------------------------
-
- # Create a file for the given path, which must point to a valid source file,
- # either inside the temporary directory or the docs directory
- def _path_to_file(self, path: str, config: MkDocsConfig, *, temp = True):
- assert path.endswith(".md")
- file = File(
- path,
- config.docs_dir if not temp else self.temp_dir,
- config.site_dir,
- config.use_directory_urls
- )
-
- # Hack: mark file as generated, so other plugins don't think it's part
- # of the file system. This is more or less a new quasi-standard that
- # still needs to be adopted by MkDocs, and was introduced by the
- # git-revision-date-localized-plugin - see https://bit.ly/3ZUmdBx
- if temp:
- file.generated_by = "material/blog"
-
- # Return file
- return file
-
- # Create a file with the given content on disk
- def _save_to_file(self, path: str, content: str):
- os.makedirs(os.path.dirname(path), exist_ok = True)
- with open(path, "w", encoding = "utf-8") as f:
- f.write(content)
-
- # -------------------------------------------------------------------------
-
- # Translate the placeholder referenced by the given key
- def _translate(self, key: str, config: MkDocsConfig) -> str:
- env = config.theme.get_env()
- template = env.get_template(
- "partials/language.html", globals = { "config": config }
- )
-
- # Translate placeholder
- return template.module.t(key)
-
-# -----------------------------------------------------------------------------
-# Data
-# -----------------------------------------------------------------------------
-
-# Set up logging
-log = logging.getLogger("mkdocs.material.blog")
diff --git a/dev/src/material/plugins/blog/readtime/__init__.py b/dev/src/material/plugins/blog/readtime/__init__.py
deleted file mode 100644
index a0c149b9..00000000
--- a/dev/src/material/plugins/blog/readtime/__init__.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-import re
-
-from math import ceil
-
-from .parser import ReadtimeParser
-
-# -----------------------------------------------------------------------------
-# Functions
-# -----------------------------------------------------------------------------
-
-# Compute readtime - we first used the original readtime library, but the list
-# of dependencies it brings with it increased the size of the Docker image by
-# 20 MB (packed), which is an increase of 50%. For this reason, we adapt the
-# original readtime algorithm to our needs - see https://t.ly/fPZ7L
-def readtime(html: str, words_per_minute: int):
- parser = ReadtimeParser()
- parser.feed(html)
- parser.close()
-
- # Extract words from text and compute readtime in seconds
- words = len(re.split(r"\W+", "".join(parser.text)))
- seconds = ceil(words / words_per_minute * 60)
-
- # Account for additional images
- delta = 12
- for _ in range(parser.images):
- seconds += delta
- if delta > 3: delta -= 1
-
- # Return readtime in minutes
- return ceil(seconds / 60)
diff --git a/dev/src/material/plugins/blog/readtime/parser.py b/dev/src/material/plugins/blog/readtime/parser.py
deleted file mode 100644
index b91a7b30..00000000
--- a/dev/src/material/plugins/blog/readtime/parser.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from html.parser import HTMLParser
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Readtime parser
-class ReadtimeParser(HTMLParser):
-
- # Initialize parser
- def __init__(self):
- super().__init__(convert_charrefs = True)
-
- # Keep track of text and images
- self.text = []
- self.images = 0
-
- # Collect images
- def handle_starttag(self, tag, attrs):
- if tag == "img":
- self.images += 1
-
- # Collect text
- def handle_data(self, data):
- self.text.append(data)
diff --git a/dev/src/material/plugins/blog/structure/__init__.py b/dev/src/material/plugins/blog/structure/__init__.py
deleted file mode 100644
index 2fc541fe..00000000
--- a/dev/src/material/plugins/blog/structure/__init__.py
+++ /dev/null
@@ -1,292 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from __future__ import annotations
-
-import logging
-import os
-import yaml
-
-from copy import copy
-from markdown import Markdown
-from material.plugins.blog.author import Author
-from mkdocs.config.defaults import MkDocsConfig
-from mkdocs.exceptions import PluginError
-from mkdocs.structure.files import File, Files
-from mkdocs.structure.nav import Section
-from mkdocs.structure.pages import Page, _RelativePathTreeprocessor
-from mkdocs.structure.toc import get_toc
-from mkdocs.utils.meta import YAML_RE
-from re import Match
-from yaml import SafeLoader
-
-from .config import PostConfig
-from .markdown import ExcerptTreeprocessor
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Post
-class Post(Page):
-
- # Initialize post - posts are never listed in the navigation, which is why
- # they will never include a title that was manually set, so we can omit it
- def __init__(self, file: File, config: MkDocsConfig):
- super().__init__(None, file, config)
-
- # Resolve path relative to docs directory
- docs = os.path.relpath(config.docs_dir)
- path = os.path.relpath(file.abs_src_path, docs)
-
- # Read contents and metadata immediately
- with open(file.abs_src_path, encoding = "utf-8") as f:
- self.markdown = f.read()
-
- # Sadly, MkDocs swallows any exceptions that occur during parsing.
- # As we want to provide the best possible authoring experience, we
- # need to catch errors early and display them nicely. We decided to
- # drop support for MkDocs' MultiMarkdown syntax, because it is not
- # correctly implemented anyway. When using MultiMarkdown syntax, all
- # date formats are returned as strings and list are not properly
- # supported. Thus, we just use the relevants parts of `get_data`.
- match: Match = YAML_RE.match(self.markdown)
- if not match:
- raise PluginError(
- f"Error reading metadata of post '{path}' in '{docs}':\n"
- f"Expected metadata to be defined but found nothing"
- )
-
- # Extract metadata and parse as YAML
- try:
- self.meta = yaml.load(match.group(1), SafeLoader) or {}
- self.markdown = self.markdown[match.end():].lstrip("\n")
-
- # The post's metadata could not be parsed because of a syntax error,
- # which we display to the user with a nice error message
- except Exception as e:
- raise PluginError(
- f"Error reading metadata of post '{path}' in '{docs}':\n"
- f"{e}"
- )
-
- # Initialize post configuration, but remove all keys that this plugin
- # doesn't care about, or they will be reported as invalid configuration
- self.config: PostConfig = PostConfig(file.abs_src_path)
- self.config.load_dict({
- key: self.meta[key] for key in (
- set(self.meta.keys()) &
- set(self.config.keys())
- )
- })
-
- # Validate configuration and throw if errors occurred
- errors, warnings = self.config.validate()
- for _, w in warnings:
- log.warning(w)
- for k, e in errors:
- raise PluginError(
- f"Error reading metadata '{k}' of post '{path}' in '{docs}':\n"
- f"{e}"
- )
-
- # Excerpts are subsets of posts that are used in pages like archive and
- # category views. They are not rendered as standalone pages, but are
- # rendered in the context of a view. Each post has a dedicated excerpt
- # instance which is reused when rendering views.
- self.excerpt: Excerpt = None
-
- # Initialize authors and actegories
- self.authors: list[Author] = []
- self.categories: list[Category] = []
-
- # Ensure template is set or use default
- self.meta.setdefault("template", "blog-post.html")
-
- # Ensure template hides navigation
- self.meta["hide"] = self.meta.get("hide", [])
- if "navigation" not in self.meta["hide"]:
- self.meta["hide"].append("navigation")
-
- # The contents and metadata were already read in the constructor (and not
- # in `read_source` as for pages), so this function must be set to a no-op
- def read_source(self, config: MkDocsConfig):
- pass
-
-# -----------------------------------------------------------------------------
-
-# Excerpt
-class Excerpt(Page):
-
- # Initialize an excerpt for the given post - we create the Markdown parser
- # when intitializing the excerpt in order to improve rendering performance
- # for excerpts, as they are reused across several different views, because
- # posts might be referenced from multiple different locations
- def __init__(self, post: Post, config: MkDocsConfig, files: Files):
- self.file = copy(post.file)
- self.post = post
-
- # Set canonical URL, or we can't print excerpts when debugging the
- # blog plugin, as the `abs_url` property would be missing
- self._set_canonical_url(config.site_url)
-
- # Initialize configuration and metadata
- self.config = post.config
- self.meta = post.meta
-
- # Initialize authors and categories - note that views usually contain
- # subsets of those lists, which is why we need to manage them here
- self.authors: list[Author] = []
- self.categories: list[Category] = []
-
- # Initialize parser - note that we need to patch the configuration,
- # more specifically the table of contents extension
- config = _patch(config)
- self.md = Markdown(
- extensions = config.markdown_extensions,
- extension_configs = config.mdx_configs,
- )
-
- # Register excerpt tree processor - this processor resolves anchors to
- # posts from within views, so they point to the correct location
- self.md.treeprocessors.register(
- ExcerptTreeprocessor(post),
- "excerpt",
- 0
- )
-
- # Register relative path tree processor - this processor resolves links
- # to other pages and assets, and is used by MkDocs itself
- self.md.treeprocessors.register(
- _RelativePathTreeprocessor(self.file, files, config),
- "relpath",
- 1
- )
-
- # Render an excerpt of the post on the given page - note that this is not
- # thread-safe because excerpts are shared across views, as it cuts down on
- # the cost of initialization. However, if in the future, we decide to render
- # posts and views concurrently, we must change this behavior.
- def render(self, page: Page, separator: str):
- self.file.url = page.url
-
- # Retrieve excerpt tree processor and set page as base
- at = self.md.treeprocessors.get_index_for_name("excerpt")
- processor: ExcerptTreeprocessor = self.md.treeprocessors[at]
- processor.base = page
-
- # Ensure that the excerpt includes a title in its content, since the
- # title is linked to the post when rendering - see https://t.ly/5Gg2F
- self.markdown = self.post.markdown
- if not self.post._title_from_render:
- self.markdown = "\n\n".join([f"# {self.post.title}", self.markdown])
-
- # Convert Markdown to HTML and extract excerpt
- self.content = self.md.convert(self.markdown)
- self.content, *_ = self.content.split(separator, 1)
-
- # Extract table of contents and reset post URL - if we wouldn't reset
- # the excerpt URL, linking to the excerpt from the view would not work
- self.toc = get_toc(getattr(self.md, "toc_tokens", []))
- self.file.url = self.post.url
-
-# -----------------------------------------------------------------------------
-
-# View
-class View(Page):
-
- # Initialize view
- def __init__(self, title: str | None, file: File, config: MkDocsConfig):
- super().__init__(title, file, config)
- self.parent: View | Section
-
- # Initialize posts and views
- self.posts: list[Post] = []
- self.views: list[View] = []
-
- # Initialize pages for pagination
- self.pages: list[View] = []
-
- # Set necessary metadata
- def read_source(self, config: MkDocsConfig):
- super().read_source(config)
-
- # Ensure template is set or use default
- self.meta.setdefault("template", "blog.html")
-
-# -----------------------------------------------------------------------------
-
-# Archive view
-class Archive(View):
- pass
-
-# -----------------------------------------------------------------------------
-
-# Category view
-class Category(View):
- pass
-
-# -----------------------------------------------------------------------------
-# Helper functions
-# -----------------------------------------------------------------------------
-
-# Patch configuration
-def _patch(config: MkDocsConfig):
- config = copy(config)
-
- # Copy parts of configuration that needs to be patched
- config.validation = copy(config.validation)
- config.validation.links = copy(config.validation.links)
- config.markdown_extensions = copy(config.markdown_extensions)
- config.mdx_configs = copy(config.mdx_configs)
-
- # Make sure that the author did not add another instance of the table of
- # contents extension to the configuration, as this leads to weird behavior
- if "markdown.extensions.toc" in config.markdown_extensions:
- config.markdown_extensions.remove("markdown.extensions.toc")
-
- # In order to render excerpts for posts, we need to make sure that the
- # table of contents extension is appropriately configured
- config.mdx_configs["toc"] = {
- **config.mdx_configs.get("toc", {}),
- **{
- "anchorlink": True, # Render headline as clickable
- "baselevel": 2, # Render h1 as h2 and so forth
- "permalink": False, # Remove permalinks
- "toc_depth": 2 # Remove everything below h2
- }
- }
-
- # Additionally, we disable link validation when rendering excerpts, because
- # invalid links have already been reported when rendering the page
- links = config.validation.links
- links.not_found = logging.DEBUG
- links.absolute_links = logging.DEBUG
- links.unrecognized_links = logging.DEBUG
-
- # Return patched configuration
- return config
-
-# -----------------------------------------------------------------------------
-# Data
-# -----------------------------------------------------------------------------
-
-# Set up logging
-log = logging.getLogger("mkdocs.material.blog")
diff --git a/dev/src/material/plugins/blog/structure/config.py b/dev/src/material/plugins/blog/structure/config.py
deleted file mode 100644
index 129491b9..00000000
--- a/dev/src/material/plugins/blog/structure/config.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from mkdocs.config.base import Config
-from mkdocs.config.config_options import ListOfItems, Optional, Type
-
-from .options import PostDate
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Post configuration
-class PostConfig(Config):
- authors = ListOfItems(Type(str), default = [])
- categories = ListOfItems(Type(str), default = [])
- date = PostDate()
- draft = Optional(Type(bool))
- readtime = Optional(Type(int))
- slug = Optional(Type(str))
diff --git a/dev/src/material/plugins/blog/structure/markdown.py b/dev/src/material/plugins/blog/structure/markdown.py
deleted file mode 100644
index 64ade554..00000000
--- a/dev/src/material/plugins/blog/structure/markdown.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from markdown.treeprocessors import Treeprocessor
-from mkdocs.structure.pages import Page
-from mkdocs.utils import get_relative_url
-from xml.etree.ElementTree import Element
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Excerpt tree processor
-class ExcerptTreeprocessor(Treeprocessor):
-
- # Initialize excerpt tree processor
- def __init__(self, page: Page, base: Page = None):
- self.page = page
- self.base = base
-
- # Transform HTML after Markdown processing
- def run(self, root: Element):
- main = True
-
- # We're only interested in anchors, which is why we continue when the
- # link does not start with an anchor tag
- for el in root.iter("a"):
- anchor = el.get("href")
- if not anchor.startswith("#"):
- continue
-
- # The main headline should link to the post page, not to a specific
- # anchor, which is why we remove the anchor in that case
- path = get_relative_url(self.page.url, self.base.url)
- if main:
- el.set("href", path)
- else:
- el.set("href", path + anchor)
-
- # Main headline has been seen
- main = False
diff --git a/dev/src/material/plugins/blog/structure/options.py b/dev/src/material/plugins/blog/structure/options.py
deleted file mode 100644
index 281dec9f..00000000
--- a/dev/src/material/plugins/blog/structure/options.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from datetime import date, datetime, time
-from mkdocs.config.base import BaseConfigOption, Config, ValidationError
-from typing import Dict
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Date dictionary
-class DateDict(Dict[str, datetime]):
-
- # Initialize date dictionary
- def __init__(self, data: dict):
- super().__init__(data)
-
- # Ensure presence of `date.created`
- self.created: datetime = data["created"]
-
- # Allow attribute access
- def __getattr__(self, name: str):
- if name in self:
- return self[name]
-
-# -----------------------------------------------------------------------------
-
-# Post date option
-class PostDate(BaseConfigOption[DateDict]):
-
- # Initialize post dates
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
- # Normalize the supported types for post dates to datetime
- def pre_validation(self, config: Config, key_name: str):
-
- # If the date points to a scalar value, convert it to a dictionary,
- # since we want to allow the user to specify custom and arbitrary date
- # values for posts. Currently, only the `created` date is mandatory,
- # because it's needed to sort posts for views.
- if not isinstance(config[key_name], dict):
- config[key_name] = { "created": config[key_name] }
-
- # Convert all date values to datetime
- for key, value in config[key_name].items():
- if isinstance(value, date):
- config[key_name][key] = datetime.combine(value, time())
-
- # Initialize date dictionary
- config[key_name] = DateDict(config[key_name])
-
- # Ensure each date value is of type datetime
- def run_validation(self, value: DateDict):
- for key in value:
- if not isinstance(value[key], datetime):
- raise ValidationError(
- f"Expected type: {date} or {datetime} "
- f"but received: {type(value[key])}"
- )
-
- # Ensure presence of `date.created`
- if not value.created:
- raise ValidationError(
- "Expected 'created' date when using dictionary syntax"
- )
-
- # Return date dictionary
- return value
diff --git a/dev/src/material/plugins/blog/templates/__init__.py b/dev/src/material/plugins/blog/templates/__init__.py
deleted file mode 100644
index 9f7d794b..00000000
--- a/dev/src/material/plugins/blog/templates/__init__.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from jinja2 import pass_context
-from jinja2.runtime import Context
-from material.plugins.blog.structure import View
-from mkdocs.utils.templates import url_filter as _url_filter
-
-# -----------------------------------------------------------------------------
-# Functions
-# -----------------------------------------------------------------------------
-
-# Filter for normalizing URLs with support for paginated views
-@pass_context
-def url_filter(context: Context, url: str):
- page = context["page"]
-
- # If the current page is a view, check if the URL links to the page
- # itself, and replace it with the URL of the main view
- if isinstance(page, View):
- if page.url == url:
- url = page.pages[0].url
-
- # Forward to original template filter
- return _url_filter(context, url)
diff --git a/dev/src/material/plugins/group/__init__.py b/dev/src/material/plugins/group/__init__.py
deleted file mode 100644
index d1899378..00000000
--- a/dev/src/material/plugins/group/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
diff --git a/dev/src/material/plugins/group/config.py b/dev/src/material/plugins/group/config.py
deleted file mode 100644
index fb19222a..00000000
--- a/dev/src/material/plugins/group/config.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from __future__ import annotations
-
-from mkdocs.config.config_options import Type
-from mkdocs.config.base import Config
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Group plugin configuration
-class GroupConfig(Config):
- enabled = Type(bool, default = False)
- plugins = Type(list | dict)
diff --git a/dev/src/material/plugins/group/plugin.py b/dev/src/material/plugins/group/plugin.py
deleted file mode 100644
index 4ab13dbf..00000000
--- a/dev/src/material/plugins/group/plugin.py
+++ /dev/null
@@ -1,151 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-import logging
-
-from collections.abc import Callable
-from mkdocs.config.config_options import Plugins
-from mkdocs.config.defaults import MkDocsConfig
-from mkdocs.exceptions import PluginError
-from mkdocs.plugins import BasePlugin, event_priority
-
-from .config import GroupConfig
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Group plugin
-class GroupPlugin(BasePlugin[GroupConfig]):
- supports_multiple_instances = True
-
- # Determine whether we're serving the site
- def on_startup(self, *, command, dirty):
- self.is_serve = command == "serve"
- self.is_dirty = dirty
-
- # If the group is enabled, conditionally load plugins - at first, this might
- # sound easier than it actually is, as we need to jump through some hoops to
- # ensure correct ordering among plugins. We're effectively initializing the
- # plugins that are part of the group after all MkDocs finished initializing
- # all other plugins, so we need to patch the order of the methods. Moreover,
- # we must use MkDocs existing plugin collection, or we might have collisions
- # with other plugins that are not part of the group. As so often, this is a
- # little hacky, but has huge potential making plugin configuration easier.
- # There's one little caveat: the `__init__` and `on_startup` methods of the
- # plugins that are part of the group are called after all other plugins, so
- # the `event_priority` decorator for `on_startup` events and is effectively
- # useless. However, the `on_startup` event is only intended to set up the
- # plugin and doesn't receive anything else than the invoked command and
- # whether we're running a dirty build, so there should be no problems.
- @event_priority(150)
- def on_config(self, config):
- if not self.config.enabled:
- return
-
- # Retrieve plugin collection from configuration
- option: Plugins = dict(config._schema)["plugins"]
- assert isinstance(option, Plugins)
-
- # Load all plugins in group
- self.plugins: dict[str, BasePlugin] = {}
- try:
- for name, plugin in self._load(option):
- self.plugins[name] = plugin
-
- # The plugin could not be loaded, likely because it's not installed or
- # misconfigured, so we raise a plugin error for a nicer error message
- except Exception as e:
- raise PluginError(str(e))
-
- # Patch order of plugin methods
- for events in option.plugins.events.values():
- self._patch(events, config)
-
- # Invoke `on_startup` event for plugins in group
- command = "serve" if self.is_serve else "build"
- for method in option.plugins.events["startup"]:
- plugin = self._get_plugin(method)
-
- # Ensure that we have a method bound to a plugin (and not a hook)
- if plugin and plugin in self.plugins.values():
- method(command = command, dirty = self.is_dirty)
-
- # -------------------------------------------------------------------------
-
- # Retrieve plugin instance for bound method or nothing
- def _get_plugin(self, method: Callable):
- return getattr(method, "__self__", None)
-
- # Retrieve priority of plugin method
- def _get_priority(self, method: Callable):
- return getattr(method, "mkdocs_priority", 0)
-
- # Retrieve position of plugin
- def _get_position(self, plugin: BasePlugin, config: MkDocsConfig) -> int:
- for at, (_, candidate) in enumerate(config.plugins.items()):
- if plugin == candidate:
- return at
-
- # -------------------------------------------------------------------------
-
- # Load plugins that are part of the group
- def _load(self, option: Plugins):
- for name, data in option._parse_configs(self.config.plugins):
- yield option.load_plugin_with_namespace(name, data)
-
- # -------------------------------------------------------------------------
-
- # Patch order of plugin methods - all other plugin methods are already in
- # the right order, so we only need to check those that are part of the group
- # and bubble them up into the right location. Some plugin methods may define
- # priorities, so we need to make sure to order correctly within those.
- def _patch(self, methods: list[Callable], config: MkDocsConfig):
- position = self._get_position(self, config)
- for at in reversed(range(1, len(methods))):
- tail = methods[at - 1]
- head = methods[at]
-
- # Skip if the plugin is not part of the group
- plugin = self._get_plugin(head)
- if not plugin or plugin not in self.plugins.values():
- continue
-
- # Skip if the previous method has a higher priority than the current
- # one, because we know we can't swap them anyway
- if self._get_priority(tail) > self._get_priority(head):
- continue
-
- # Ensure that we have a method bound to a plugin (and not a hook)
- plugin = self._get_plugin(tail)
- if not plugin:
- continue
-
- # Both methods have the same priority, so we check if the ordering
- # of both methods is violated, and if it is, swap them
- if (position < self._get_position(plugin, config)):
- methods[at], methods[at - 1] = tail, head
-
-# -----------------------------------------------------------------------------
-# Data
-# -----------------------------------------------------------------------------
-
-# Set up logging
-log = logging.getLogger("mkdocs.material.group")
diff --git a/dev/src/material/plugins/info/__init__.py b/dev/src/material/plugins/info/__init__.py
deleted file mode 100644
index d1899378..00000000
--- a/dev/src/material/plugins/info/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
diff --git a/dev/src/material/plugins/info/config.py b/dev/src/material/plugins/info/config.py
deleted file mode 100644
index cbd64d4c..00000000
--- a/dev/src/material/plugins/info/config.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from mkdocs.config.config_options import Type
-from mkdocs.config.base import Config
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Info plugin configuration
-class InfoConfig(Config):
- enabled = Type(bool, default = True)
- enabled_on_serve = Type(bool, default = False)
-
- # Settings for archive
- archive = Type(bool, default = True)
- archive_stop_on_violation = Type(bool, default = True)
diff --git a/dev/src/material/plugins/info/plugin.py b/dev/src/material/plugins/info/plugin.py
deleted file mode 100644
index 7c6fdc17..00000000
--- a/dev/src/material/plugins/info/plugin.py
+++ /dev/null
@@ -1,245 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-import json
-import logging
-import os
-import platform
-import requests
-import sys
-
-from colorama import Fore, Style
-from importlib.metadata import distributions, version
-from io import BytesIO
-from markdown.extensions.toc import slugify
-from mkdocs.plugins import BasePlugin, event_priority
-from mkdocs.structure.files import get_files
-from mkdocs.utils import get_theme_dir
-from zipfile import ZipFile, ZIP_DEFLATED
-
-from .config import InfoConfig
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Info plugin
-class InfoPlugin(BasePlugin[InfoConfig]):
-
- # Initialize plugin
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
- # Initialize incremental builds
- self.is_serve = False
-
- # Determine whether we're serving the site
- def on_startup(self, *, command, dirty):
- self.is_serve = command == "serve"
-
- # Create a self-contained example (run earliest) - determine all files that
- # are visible to MkDocs and are used to build the site, create an archive
- # that contains all of them, and print a summary of the archive contents.
- # The user must attach this archive to the bug report.
- @event_priority(100)
- def on_config(self, config):
- if not self.config.enabled:
- return
-
- # By default, the plugin is disabled when the documentation is served,
- # but not when it is built. This should nicely align with the expected
- # user experience when creating reproductions.
- if not self.config.enabled_on_serve and self.is_serve:
- return
-
- # Resolve latest version
- url = "https://github.com/squidfunk/mkdocs-material/releases/latest"
- res = requests.get(url, allow_redirects = False)
-
- # Check if we're running the latest version
- _, current = res.headers.get("location").rsplit("/", 1)
- present = version("mkdocs-material")
- if not present.startswith(current):
- log.error("Please upgrade to the latest version.")
- self._help_on_versions_and_exit(present, current)
-
- # Exit if archive creation is disabled
- if not self.config.archive:
- sys.exit(1)
-
- # Print message that we're creating a bug report
- log.info("Started archive creation for bug report")
-
- # Check that there are no overrides in place - we need to use a little
- # hack to detect whether the custom_dir setting was used without parsing
- # mkdocs.yml again - we check at which position the directory provided
- # by the theme resides, and if it's not the first one, abort.
- if config.theme.dirs.index(get_theme_dir(config.theme.name)):
- log.error("Please remove 'custom_dir' setting.")
- self._help_on_customizations_and_exit()
-
- # Check that there are no hooks in place - hooks can alter the behavior
- # of MkDocs in unpredictable ways, which is why they must be considered
- # being customizations. Thus, we can't offer support for debugging and
- # must abort here.
- if config.hooks:
- log.error("Please remove 'hooks' setting.")
- self._help_on_customizations_and_exit()
-
- # Create in-memory archive and prompt user to enter a short descriptive
- # name for the archive, which is also used as the directory name. Note
- # that the name is slugified for better readability and stripped of any
- # file extension that the user might have entered.
- archive = BytesIO()
- example = input("\nPlease name your bug report (2-4 words): ")
- example, _ = os.path.splitext(example)
- example = "-".join([present, slugify(example, "-")])
-
- # Create self-contained example from project
- files: list[str] = []
- with ZipFile(archive, "a", ZIP_DEFLATED, False) as f:
- for path in ["mkdocs.yml", "requirements.txt"]:
- if os.path.isfile(path):
- f.write(path, os.path.join(example, path))
-
- # Append all files visible to MkDocs
- for file in get_files(config):
- path = os.path.relpath(file.abs_src_path, os.path.curdir)
- f.write(path, os.path.join(example, path))
-
- # Add information on installed packages
- f.writestr(
- os.path.join(example, "requirements.lock.txt"),
- "\n".join(sorted([
- "==".join([package.name, package.version])
- for package in distributions()
- ]))
- )
-
- # Add information on platform
- f.writestr(
- os.path.join(example, "platform.json"),
- json.dumps(
- {
- "system": platform.platform(),
- "python": platform.python_version()
- },
- default = str,
- indent = 2
- )
- )
-
- # Retrieve list of processed files
- for a in f.filelist:
- files.append("".join([
- Fore.LIGHTBLACK_EX, a.filename, " ",
- _size(a.compress_size)
- ]))
-
- # Finally, write archive to disk
- buffer = archive.getbuffer()
- with open(f"{example}.zip", "wb") as f:
- f.write(archive.getvalue())
-
- # Print summary
- log.info("Archive successfully created:")
- print(Style.NORMAL)
-
- # Print archive file names
- files.sort()
- for file in files:
- print(f" {file}")
-
- # Print archive name
- print(Style.RESET_ALL)
- print("".join([
- " ", f.name, " ",
- _size(buffer.nbytes, 10)
- ]))
-
- # Print warning when file size is excessively large
- print(Style.RESET_ALL)
- if buffer.nbytes > 1000000:
- log.warning("Archive exceeds recommended maximum size of 1 MB")
-
- # Aaaaaand done
- sys.exit(1)
-
- # -------------------------------------------------------------------------
-
- # Print help on versions and exit
- def _help_on_versions_and_exit(self, have, need):
- print(Fore.RED)
- print(" When reporting issues, please first upgrade to the latest")
- print(" version of Material for MkDocs, as the problem might already")
- print(" be fixed in the latest version. This helps reduce duplicate")
- print(" efforts and saves us maintainers time.")
- print(Style.NORMAL)
- print(f" Please update from {have} to {need}.")
- print(Style.RESET_ALL)
- print(f" pip install --upgrade --force-reinstall mkdocs-material")
- print(Style.NORMAL)
-
- # Exit, unless explicitly told not to
- if self.config.archive_stop_on_violation:
- sys.exit(1)
-
- # Print help on customizations and exit
- def _help_on_customizations_and_exit(self):
- print(Fore.RED)
- print(" When reporting issues, you must remove all customizations")
- print(" and check if the problem persists. If not, the problem is")
- print(" caused by your overrides. Please understand that we can't")
- print(" help you debug your customizations. Please remove:")
- print(Style.NORMAL)
- print(" - theme.custom_dir")
- print(" - hooks")
- print(Fore.YELLOW)
- print(" Additionally, please remove all third-party JavaScript or")
- print(" CSS not explicitly mentioned in our documentation:")
- print(Style.NORMAL)
- print(" - extra_css")
- print(" - extra_javascript")
- print(Style.RESET_ALL)
-
- # Exit, unless explicitly told not to
- if self.config.archive_stop_on_violation:
- sys.exit(1)
-
-# -----------------------------------------------------------------------------
-# Helper functions
-# -----------------------------------------------------------------------------
-
-# Print human-readable size
-def _size(value, factor = 1):
- color = Fore.GREEN
- if value > 100000 * factor: color = Fore.RED
- elif value > 25000 * factor: color = Fore.YELLOW
- for unit in ["B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB"]:
- if abs(value) < 1000.0:
- return f"{color}{value:3.1f} {unit}"
- value /= 1000.0
-
-# -----------------------------------------------------------------------------
-# Data
-# -----------------------------------------------------------------------------
-
-# Set up logging
-log = logging.getLogger("mkdocs.material.info")
diff --git a/dev/src/material/plugins/offline/__init__.py b/dev/src/material/plugins/offline/__init__.py
deleted file mode 100644
index d1899378..00000000
--- a/dev/src/material/plugins/offline/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
diff --git a/dev/src/material/plugins/offline/config.py b/dev/src/material/plugins/offline/config.py
deleted file mode 100644
index 49f51a94..00000000
--- a/dev/src/material/plugins/offline/config.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from mkdocs.config.config_options import Type
-from mkdocs.config.base import Config
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Offline plugin configuration
-class OfflineConfig(Config):
- enabled = Type(bool, default = True)
diff --git a/dev/src/material/plugins/offline/plugin.py b/dev/src/material/plugins/offline/plugin.py
deleted file mode 100644
index abcb2598..00000000
--- a/dev/src/material/plugins/offline/plugin.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-import os
-
-from mkdocs.plugins import BasePlugin, event_priority
-
-from .config import OfflineConfig
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Offline plugin
-class OfflinePlugin(BasePlugin[OfflineConfig]):
-
- # Set configuration for offline build
- def on_config(self, config):
- if not self.config.enabled:
- return
-
- # Ensure correct resolution of links when viewing the site from the
- # file system by disabling directory URLs
- config.use_directory_urls = False
-
- # Append iframe-worker to polyfills/shims
- config.extra["polyfills"] = config.extra.get("polyfills", [])
- if not any("iframe-worker" in url for url in config.extra["polyfills"]):
- script = "https://unpkg.com/iframe-worker/shim"
- config.extra["polyfills"].append(script)
-
- # Add support for offline search (run latest) - the search index is copied
- # and inlined into a script, so that it can be used without a server
- @event_priority(-100)
- def on_post_build(self, *, config):
- if not self.config.enabled:
- return
-
- # Ensure presence of search index
- path = os.path.join(config.site_dir, "search")
- file = os.path.join(path, "search_index.json")
- if not os.path.isfile(file):
- return
-
- # Obtain search index contents
- with open(file, encoding = "utf-8") as f:
- data = f.read()
-
- # Inline search index contents into script
- file = os.path.join(path, "search_index.js")
- with open(file, "w", encoding = "utf-8") as f:
- f.write(f"var __index = {data}")
diff --git a/dev/src/material/plugins/search/__init__.py b/dev/src/material/plugins/search/__init__.py
deleted file mode 100644
index d1899378..00000000
--- a/dev/src/material/plugins/search/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
diff --git a/dev/src/material/plugins/search/config.py b/dev/src/material/plugins/search/config.py
deleted file mode 100644
index e150fbb3..00000000
--- a/dev/src/material/plugins/search/config.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from mkdocs.config.config_options import (
- Choice,
- Deprecated,
- Optional,
- ListOfItems,
- Type
-)
-from mkdocs.config.base import Config
-from mkdocs.contrib.search import LangOption
-
-# -----------------------------------------------------------------------------
-# Options
-# -----------------------------------------------------------------------------
-
-# Options for search pipeline
-pipeline = ("stemmer", "stopWordFilter", "trimmer")
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Search plugin configuration
-class SearchConfig(Config):
- enabled = Type(bool, default = True)
-
- # Settings for search
- lang = Optional(LangOption())
- separator = Optional(Type(str))
- pipeline = ListOfItems(Choice(pipeline), default = [])
-
- # Settings for text segmentation (Chinese)
- jieba_dict = Optional(Type(str))
- jieba_dict_user = Optional(Type(str))
-
- # Unsupported settings, originally implemented in MkDocs
- indexing = Deprecated(message = "Unsupported option")
- prebuild_index = Deprecated(message = "Unsupported option")
- min_search_length = Deprecated(message = "Unsupported option")
diff --git a/dev/src/material/plugins/search/plugin.py b/dev/src/material/plugins/search/plugin.py
deleted file mode 100644
index 5c254e3f..00000000
--- a/dev/src/material/plugins/search/plugin.py
+++ /dev/null
@@ -1,580 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-import json
-import logging
-import os
-import regex as re
-
-from html import escape
-from html.parser import HTMLParser
-from mkdocs import utils
-from mkdocs.plugins import BasePlugin
-
-from .config import SearchConfig
-
-try:
- import jieba
-except ImportError:
- jieba = None
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Search plugin
-class SearchPlugin(BasePlugin[SearchConfig]):
-
- # Initialize plugin
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
- # Initialize incremental builds
- self.is_dirtyreload = False
-
- # Initialize search index cache
- self.search_index_prev = None
-
- # Determine whether we're serving the site
- def on_startup(self, *, command, dirty):
- self.is_dirty = dirty
-
- # Initialize plugin
- def on_config(self, config):
- if not self.config.enabled:
- return
-
- # Retrieve default value for language
- if not self.config.lang:
- self.config.lang = [self._translate(
- config, "search.config.lang"
- )]
-
- # Retrieve default value for separator
- if not self.config.separator:
- self.config.separator = self._translate(
- config, "search.config.separator"
- )
-
- # Retrieve default value for pipeline
- if not self.config.pipeline:
- self.config.pipeline = list(filter(len, re.split(
- r"\s*,\s*", self._translate(config, "search.config.pipeline")
- )))
-
- # Initialize search index
- self.search_index = SearchIndex(**self.config)
-
- # Set jieba dictionary, if given
- if self.config.jieba_dict:
- path = os.path.normpath(self.config.jieba_dict)
- if os.path.isfile(path):
- jieba.set_dictionary(path)
- log.debug(f"Loading jieba dictionary: {path}")
- else:
- log.warning(
- f"Configuration error for 'search.jieba_dict': "
- f"'{self.config.jieba_dict}' does not exist."
- )
-
- # Set jieba user dictionary, if given
- if self.config.jieba_dict_user:
- path = os.path.normpath(self.config.jieba_dict_user)
- if os.path.isfile(path):
- jieba.load_userdict(path)
- log.debug(f"Loading jieba user dictionary: {path}")
- else:
- log.warning(
- f"Configuration error for 'search.jieba_dict_user': "
- f"'{self.config.jieba_dict_user}' does not exist."
- )
-
- # Add page to search index
- def on_page_context(self, context, *, page, config, nav):
- if not self.config.enabled:
- return
-
- # Index page
- self.search_index.add_entry_from_context(page)
- page.content = re.sub(
- r"\s?data-search-\w+=\"[^\"]+\"",
- "",
- page.content
- )
-
- # Generate search index
- def on_post_build(self, *, config):
- if not self.config.enabled:
- return
-
- # Write search index
- base = os.path.join(config.site_dir, "search")
- path = os.path.join(base, "search_index.json")
-
- # Generate and write search index to file
- data = self.search_index.generate_search_index(self.search_index_prev)
- utils.write_file(data.encode("utf-8"), path)
-
- # Persist search index for repeated invocation
- if self.is_dirty:
- self.search_index_prev = self.search_index
-
- # Determine whether we're running under dirty reload
- def on_serve(self, server, *, config, builder):
- self.is_dirtyreload = self.is_dirty
-
- # -------------------------------------------------------------------------
-
- # Translate the given placeholder value
- def _translate(self, config, value):
- env = config.theme.get_env()
-
- # Load language template and return translation for placeholder
- language = "partials/language.html"
- template = env.get_template(language, None, { "config": config })
- return template.module.t(value)
-
-# -----------------------------------------------------------------------------
-
-# Search index with support for additional fields
-class SearchIndex:
-
- # Initialize search index
- def __init__(self, **config):
- self.config = config
- self.entries = []
-
- # Add page to search index
- def add_entry_from_context(self, page):
- search = page.meta.get("search", {})
- if search.get("exclude"):
- return
-
- # Divide page content into sections
- parser = Parser()
- parser.feed(page.content)
- parser.close()
-
- # Add sections to index
- for section in parser.data:
- if not section.is_excluded():
- self.create_entry_for_section(section, page.toc, page.url, page)
-
- # Override: graceful indexing and additional fields
- def create_entry_for_section(self, section, toc, url, page):
- item = self._find_toc_by_id(toc, section.id)
- if item:
- url = url + item.url
- elif section.id:
- url = url + "#" + section.id
-
- # Set page title as section title if none was given, which happens when
- # the first headline in a Markdown document is not a h1 headline. Also,
- # if a page title was set via front matter, use that even though a h1
- # might be given or the page name was specified in nav in mkdocs.yml
- if not section.title:
- section.title = [str(page.meta.get("title", page.title))]
-
- # Compute title and text
- title = "".join(section.title).strip()
- text = "".join(section.text).strip()
-
- # Segment Chinese characters if jieba is available
- if jieba:
- title = self._segment_chinese(title)
- text = self._segment_chinese(text)
-
- # Create entry for section
- entry = {
- "location": url,
- "title": title,
- "text": text
- }
-
- # Set document tags
- tags = page.meta.get("tags")
- if isinstance(tags, list):
- entry["tags"] = []
- for name in tags:
- if name and isinstance(name, (str, int, float, bool)):
- entry["tags"].append(name)
-
- # Set document boost
- search = page.meta.get("search", {})
- if "boost" in search:
- entry["boost"] = search["boost"]
-
- # Add entry to index
- self.entries.append(entry)
-
- # Generate search index
- def generate_search_index(self, prev):
- config = {
- key: self.config[key]
- for key in ["lang", "separator", "pipeline"]
- }
-
- # Hack: if we're running under dirty reload, the search index will only
- # include the entries for the current page. However, MkDocs > 1.4 allows
- # us to persist plugin state across rebuilds, which is exactly what we
- # do by passing the previously built index to this method. Thus, we just
- # remove the previous entries for the current page, and append the new
- # entries to the end of the index, as order doesn't matter.
- if prev and self.entries:
- path = self.entries[0]["location"]
-
- # Since we're sure that we're running under dirty reload, the list
- # of entries will only contain sections for a single page. Thus, we
- # use the first entry to remove all entries from the previous run
- # that belong to the current page. The rationale behind this is that
- # authors might add or remove section headers, so we need to make
- # sure that sections are synchronized correctly.
- entries = [
- entry for entry in prev.entries
- if not entry["location"].startswith(path)
- ]
-
- # Merge previous with current entries
- self.entries = entries + self.entries
-
- # Otherwise just set previous entries
- if prev and not self.entries:
- self.entries = prev.entries
-
- # Return search index as JSON
- data = { "config": config, "docs": self.entries }
- return json.dumps(
- data,
- separators = (",", ":"),
- default = str
- )
-
- # -------------------------------------------------------------------------
-
- # Retrieve item for anchor
- def _find_toc_by_id(self, toc, id):
- for toc_item in toc:
- if toc_item.id == id:
- return toc_item
-
- # Recurse into children of item
- toc_item = self._find_toc_by_id(toc_item.children, id)
- if toc_item is not None:
- return toc_item
-
- # No item found
- return None
-
- # Find and segment Chinese characters in string
- def _segment_chinese(self, data):
- expr = re.compile(r"(\p{IsHan}+)", re.UNICODE)
-
- # Replace callback
- def replace(match):
- value = match.group(0)
-
- # Replace occurrence in original string with segmented version and
- # surround with zero-width whitespace for efficient indexing
- return "".join([
- "\u200b",
- "\u200b".join(jieba.cut(value.encode("utf-8"))),
- "\u200b",
- ])
-
- # Return string with segmented occurrences
- return expr.sub(replace, data).strip("\u200b")
-
-# -----------------------------------------------------------------------------
-
-# HTML element
-class Element:
- """
- An element with attributes, essentially a small wrapper object for the
- parser to access attributes in other callbacks than handle_starttag.
- """
-
- # Initialize HTML element
- def __init__(self, tag, attrs = {}):
- self.tag = tag
- self.attrs = attrs
-
- # String representation
- def __repr__(self):
- return self.tag
-
- # Support comparison (compare by tag only)
- def __eq__(self, other):
- if other is Element:
- return self.tag == other.tag
- else:
- return self.tag == other
-
- # Support set operations
- def __hash__(self):
- return hash(self.tag)
-
- # Check whether the element should be excluded
- def is_excluded(self):
- return "data-search-exclude" in self.attrs
-
-# -----------------------------------------------------------------------------
-
-# HTML section
-class Section:
- """
- A block of text with markup, preceded by a title (with markup), i.e., a
- headline with a certain level (h1-h6). Internally used by the parser.
- """
-
- # Initialize HTML section
- def __init__(self, el, depth = 0):
- self.el = el
- self.depth = depth
-
- # Initialize section data
- self.text = []
- self.title = []
- self.id = None
-
- # String representation
- def __repr__(self):
- if self.id:
- return "#".join([self.el.tag, self.id])
- else:
- return self.el.tag
-
- # Check whether the section should be excluded
- def is_excluded(self):
- return self.el.is_excluded()
-
-# -----------------------------------------------------------------------------
-
-# HTML parser
-class Parser(HTMLParser):
- """
- This parser divides the given string of HTML into a list of sections, each
- of which are preceded by a h1-h6 level heading. A white- and blacklist of
- tags dictates which tags should be preserved as part of the index, and
- which should be ignored in their entirety.
- """
-
- # Initialize HTML parser
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
- # Tags to skip
- self.skip = set([
- "object", # Objects
- "script", # Scripts
- "style" # Styles
- ])
-
- # Tags to keep
- self.keep = set([
- "p", # Paragraphs
- "code", "pre", # Code blocks
- "li", "ol", "ul", # Lists
- "sub", "sup" # Sub- and superscripts
- ])
-
- # Current context and section
- self.context = []
- self.section = None
-
- # All parsed sections
- self.data = []
-
- # Called at the start of every HTML tag
- def handle_starttag(self, tag, attrs):
- attrs = dict(attrs)
-
- # Ignore self-closing tags
- el = Element(tag, attrs)
- if not tag in void:
- self.context.append(el)
- else:
- return
-
- # Handle heading
- if tag in ([f"h{x}" for x in range(1, 7)]):
- depth = len(self.context)
- if "id" in attrs:
-
- # Ensure top-level section
- if tag != "h1" and not self.data:
- self.section = Section(Element("hx"), depth)
- self.data.append(self.section)
-
- # Set identifier, if not first section
- self.section = Section(el, depth)
- if self.data:
- self.section.id = attrs["id"]
-
- # Append section to list
- self.data.append(self.section)
-
- # Handle preface - ensure top-level section
- if not self.section:
- self.section = Section(Element("hx"))
- self.data.append(self.section)
-
- # Handle special cases to skip
- for key, value in attrs.items():
-
- # Skip block if explicitly excluded from search
- if key == "data-search-exclude":
- self.skip.add(el)
- return
-
- # Skip line numbers - see https://bit.ly/3GvubZx
- if key == "class" and value == "linenodiv":
- self.skip.add(el)
- return
-
- # Render opening tag if kept
- if not self.skip.intersection(self.context):
- if tag in self.keep:
-
- # Check whether we're inside the section title
- data = self.section.text
- if self.section.el in self.context:
- data = self.section.title
-
- # Append to section title or text
- data.append(f"<{tag}>")
-
- # Called at the end of every HTML tag
- def handle_endtag(self, tag):
- if not self.context or self.context[-1] != tag:
- return
-
- # Check whether we're exiting the current context, which happens when
- # a headline is nested in another element. In that case, we close the
- # current section, continuing to append data to the previous section,
- # which could also be a nested section – see https://bit.ly/3IxxIJZ
- if self.section.depth > len(self.context):
- for section in reversed(self.data):
- if section.depth <= len(self.context):
-
- # Set depth to infinity in order to denote that the current
- # section is exited and must never be considered again.
- self.section.depth = float("inf")
- self.section = section
- break
-
- # Remove element from skip list
- el = self.context.pop()
- if el in self.skip:
- if el.tag not in ["script", "style", "object"]:
- self.skip.remove(el)
- return
-
- # Render closing tag if kept
- if not self.skip.intersection(self.context):
- if tag in self.keep:
-
- # Check whether we're inside the section title
- data = self.section.text
- if self.section.el in self.context:
- data = self.section.title
-
- # Search for corresponding opening tag
- index = data.index(f"<{tag}>")
- for i in range(index + 1, len(data)):
- if not data[i].isspace():
- index = len(data)
- break
-
- # Remove element if empty (or only whitespace)
- if len(data) > index:
- while len(data) > index:
- data.pop()
-
- # Append to section title or text
- else:
- data.append(f"</{tag}>")
-
- # Called for the text contents of each tag
- def handle_data(self, data):
- if self.skip.intersection(self.context):
- return
-
- # Collapse whitespace in non-pre contexts
- if not "pre" in self.context:
- if not data.isspace():
- data = data.replace("\n", " ")
- else:
- data = " "
-
- # Handle preface - ensure top-level section
- if not self.section:
- self.section = Section(Element("hx"))
- self.data.append(self.section)
-
- # Handle section headline
- if self.section.el in self.context:
- permalink = False
- for el in self.context:
- if el.tag == "a" and el.attrs.get("class") == "headerlink":
- permalink = True
-
- # Ignore permalinks
- if not permalink:
- self.section.title.append(
- escape(data, quote = False)
- )
-
- # Collapse adjacent whitespace
- elif data.isspace():
- if not self.section.text or not self.section.text[-1].isspace():
- self.section.text.append(data)
- elif "pre" in self.context:
- self.section.text.append(data)
-
- # Handle everything else
- else:
- self.section.text.append(
- escape(data, quote = False)
- )
-
-# -----------------------------------------------------------------------------
-# Data
-# -----------------------------------------------------------------------------
-
-# Set up logging
-log = logging.getLogger("mkdocs.material.search")
-
-# Tags that are self-closing
-void = set([
- "area", # Image map areas
- "base", # Document base
- "br", # Line breaks
- "col", # Table columns
- "embed", # External content
- "hr", # Horizontal rules
- "img", # Images
- "input", # Input fields
- "link", # Links
- "meta", # Metadata
- "param", # External parameters
- "source", # Image source sets
- "track", # Text track
- "wbr" # Line break opportunities
-])
diff --git a/dev/src/material/plugins/social/__init__.py b/dev/src/material/plugins/social/__init__.py
deleted file mode 100644
index d1899378..00000000
--- a/dev/src/material/plugins/social/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
diff --git a/dev/src/material/plugins/social/config.py b/dev/src/material/plugins/social/config.py
deleted file mode 100644
index 2d87c25e..00000000
--- a/dev/src/material/plugins/social/config.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from mkdocs.config.base import Config
-from mkdocs.config.config_options import Deprecated, Type
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Social plugin configuration
-class SocialConfig(Config):
- enabled = Type(bool, default = True)
- cache_dir = Type(str, default = ".cache/plugin/social")
-
- # Settings for social cards
- cards = Type(bool, default = True)
- cards_dir = Type(str, default = "assets/images/social")
- cards_layout_options = Type(dict, default = {})
-
- # Deprecated settings
- cards_color = Deprecated(
- option_type = Type(dict, default = {}),
- message =
- "Deprecated, use 'cards_layout_options.background_color' "
- "and 'cards_layout_options.color' with 'default' layout"
- )
- cards_font = Deprecated(
- option_type = Type(str),
- message = "Deprecated, use 'cards_layout_options.font_family'"
- )
diff --git a/dev/src/material/plugins/social/plugin.py b/dev/src/material/plugins/social/plugin.py
deleted file mode 100644
index 3cdfa3ce..00000000
--- a/dev/src/material/plugins/social/plugin.py
+++ /dev/null
@@ -1,516 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-# -----------------------------------------------------------------------------
-# Disclaimer
-# -----------------------------------------------------------------------------
-# Please note: this version of the social plugin is not actively development
-# anymore. Instead, Material for MkDocs Insiders ships a complete rewrite of
-# the plugin which is much more powerful and addresses all shortcomings of
-# this implementation. Additionally, the new social plugin allows to create
-# entirely custom social cards. You can probably imagine, that this was a lot
-# of work to pull off. If you run into problems, or want to have additional
-# functionality, please consider sponsoring the project. You can then use the
-# new version of the plugin immediately.
-# -----------------------------------------------------------------------------
-
-import concurrent.futures
-import functools
-import logging
-import os
-import posixpath
-import re
-import requests
-import sys
-
-from collections import defaultdict
-from hashlib import md5
-from io import BytesIO
-from mkdocs.commands.build import DuplicateFilter
-from mkdocs.exceptions import PluginError
-from mkdocs.plugins import BasePlugin
-from shutil import copyfile
-from tempfile import TemporaryFile
-from zipfile import ZipFile
-try:
- from cairosvg import svg2png
- from PIL import Image, ImageDraw, ImageFont
-except ImportError:
- pass
-
-from .config import SocialConfig
-
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Social plugin
-class SocialPlugin(BasePlugin[SocialConfig]):
-
- def __init__(self):
- self._executor = concurrent.futures.ThreadPoolExecutor(4)
-
- # Retrieve configuration
- def on_config(self, config):
- self.color = colors.get("indigo")
- self.config.cards = self.config.enabled
- if not self.config.cards:
- return
-
- # Check dependencies
- if "Image" not in globals():
- raise PluginError(
- "Required dependencies of \"social\" plugin not found. "
- "Install with: pip install \"mkdocs-material[imaging]\""
- )
-
- # Move color options
- if self.config.cards_color:
-
- # Move background color to new option
- value = self.config.cards_color.get("fill")
- if value:
- self.config.cards_layout_options["background_color"] = value
-
- # Move color to new option
- value = self.config.cards_color.get("text")
- if value:
- self.config.cards_layout_options["color"] = value
-
- # Move font family to new option
- if self.config.cards_font:
- value = self.config.cards_font
- self.config.cards_layout_options["font_family"] = value
-
- # Check if site URL is defined
- if not config.site_url:
- log.warning(
- "The \"site_url\" option is not set. The cards are generated, "
- "but not linked, so they won't be visible on social media."
- )
-
- # Ensure presence of cache directory
- self.cache = self.config.cache_dir
- if not os.path.isdir(self.cache):
- os.makedirs(self.cache)
-
- # Retrieve palette from theme configuration
- theme = config.theme
- if "palette" in theme:
- palette = theme["palette"]
-
- # Use first palette, if multiple are defined
- if isinstance(palette, list):
- palette = palette[0]
-
- # Set colors according to palette
- if "primary" in palette and palette["primary"]:
- primary = palette["primary"].replace(" ", "-")
- self.color = colors.get(primary, self.color)
-
- # Retrieve color overrides
- options = self.config.cards_layout_options
- self.color = {
- "fill": options.get("background_color", self.color["fill"]),
- "text": options.get("color", self.color["text"])
- }
-
- # Retrieve logo and font
- self._resized_logo_promise = self._executor.submit(self._load_resized_logo, config)
- self.font = self._load_font(config)
-
- self._image_promises = []
-
- # Create social cards
- def on_page_markdown(self, markdown, page, config, files):
- if not self.config.cards:
- return
-
- # Resolve image directory
- directory = self.config.cards_dir
- file, _ = os.path.splitext(page.file.src_path)
-
- # Resolve path of image
- path = "{}.png".format(os.path.join(
- config.site_dir,
- directory,
- file
- ))
-
- # Resolve path of image directory
- directory = os.path.dirname(path)
- if not os.path.isdir(directory):
- os.makedirs(directory)
-
- # Compute site name
- site_name = config.site_name
-
- # Compute page title and description
- title = page.meta.get("title", page.title)
- description = config.site_description or ""
- if "description" in page.meta:
- description = page.meta["description"]
-
- # Check type of meta title - see https://t.ly/m1Us
- if not isinstance(title, str):
- log.error(
- f"Page meta title of page '{page.file.src_uri}' must be a "
- f"string, but is of type \"{type(title)}\"."
- )
- sys.exit(1)
-
- # Check type of meta description - see https://t.ly/m1Us
- if not isinstance(description, str):
- log.error(
- f"Page meta description of '{page.file.src_uri}' must be a "
- f"string, but is of type \"{type(description)}\"."
- )
- sys.exit(1)
-
- # Generate social card if not in cache
- hash = md5("".join([
- site_name,
- str(title),
- description
- ]).encode("utf-8"))
- file = os.path.join(self.cache, f"{hash.hexdigest()}.png")
- self._image_promises.append(self._executor.submit(
- self._cache_image,
- cache_path = file, dest_path = path,
- render_function = lambda: self._render_card(site_name, title, description)
- ))
-
- # Inject meta tags into page
- meta = page.meta.get("meta", [])
- page.meta["meta"] = meta + self._generate_meta(page, config)
-
- def on_post_build(self, config):
- if not self.config.cards:
- return
-
- # Check for exceptions
- for promise in self._image_promises:
- promise.result()
-
- # -------------------------------------------------------------------------
-
- # Render image to cache (if not present), then copy from cache to site
- def _cache_image(self, cache_path, dest_path, render_function):
- if not os.path.isfile(cache_path):
- image = render_function()
- image.save(cache_path)
-
- # Copy file from cache
- copyfile(cache_path, dest_path)
-
- @functools.lru_cache(maxsize=None)
- def _get_font(self, kind, size):
- return ImageFont.truetype(self.font[kind], size)
-
- # Render social card
- def _render_card(self, site_name, title, description):
- # Render background and logo
- image = self._render_card_background((1200, 630), self.color["fill"])
- image.alpha_composite(
- self._resized_logo_promise.result(),
- (1200 - 228, 64 - 4)
- )
-
- # Render site name
- font = self._get_font("Bold", 36)
- image.alpha_composite(
- self._render_text((826, 48), font, site_name, 1, 20),
- (64 + 4, 64)
- )
-
- # Render page title
- font = self._get_font("Bold", 92)
- image.alpha_composite(
- self._render_text((826, 328), font, title, 3, 30),
- (64, 160)
- )
-
- # Render page description
- font = self._get_font("Regular", 28)
- image.alpha_composite(
- self._render_text((826, 80), font, description, 2, 14),
- (64 + 4, 512)
- )
-
- # Return social card image
- return image
-
- # Render social card background
- def _render_card_background(self, size, fill):
- return Image.new(mode = "RGBA", size = size, color = fill)
-
- @functools.lru_cache(maxsize=None)
- def _tmp_context(self):
- image = Image.new(mode = "RGBA", size = (50, 50))
- return ImageDraw.Draw(image)
-
- @functools.lru_cache(maxsize=None)
- def _text_bounding_box(self, text, font):
- return self._tmp_context().textbbox((0, 0), text, font = font)
-
- # Render social card text
- def _render_text(self, size, font, text, lmax, spacing = 0):
- width = size[0]
- lines, words = [], []
-
- # Remove remnant HTML tags
- text = re.sub(r"(<[^>]+>)", "", text)
-
- # Retrieve y-offset of textbox to correct for spacing
- yoffset = 0
-
- # Create drawing context and split text into lines
- for word in text.split(" "):
- combine = " ".join(words + [word])
- textbox = self._text_bounding_box(combine, font = font)
- yoffset = textbox[1]
- if not words or textbox[2] <= width:
- words.append(word)
- else:
- lines.append(words)
- words = [word]
-
- # Join words for each line and create image
- lines.append(words)
- lines = [" ".join(line) for line in lines]
- image = Image.new(mode = "RGBA", size = size)
-
- # Create drawing context and split text into lines
- context = ImageDraw.Draw(image)
- context.text(
- (0, spacing / 2 - yoffset), "\n".join(lines[:lmax]),
- font = font, fill = self.color["text"], spacing = spacing - yoffset
- )
-
- # Return text image
- return image
-
- # -------------------------------------------------------------------------
-
- # Generate meta tags
- def _generate_meta(self, page, config):
- directory = self.config.cards_dir
- file, _ = os.path.splitext(page.file.src_uri)
-
- # Compute page title
- title = page.meta.get("title", page.title)
- if not page.is_homepage:
- title = f"{title} - {config.site_name}"
-
- # Compute page description
- description = config.site_description
- if "description" in page.meta:
- description = page.meta["description"]
-
- # Resolve image URL
- url = "{}.png".format(posixpath.join(
- config.site_url or ".",
- directory,
- file
- ))
-
- # Ensure forward slashes
- url = url.replace(os.path.sep, "/")
-
- # Return meta tags
- return [
-
- # Meta tags for Open Graph
- { "property": "og:type", "content": "website" },
- { "property": "og:title", "content": title },
- { "property": "og:description", "content": description },
- { "property": "og:image", "content": url },
- { "property": "og:image:type", "content": "image/png" },
- { "property": "og:image:width", "content": "1200" },
- { "property": "og:image:height", "content": "630" },
- { "property": "og:url", "content": page.canonical_url },
-
- # Meta tags for Twitter
- { "name": "twitter:card", "content": "summary_large_image" },
- # { "name": "twitter:site", "content": user },
- # { "name": "twitter:creator", "content": user },
- { "name": "twitter:title", "content": title },
- { "name": "twitter:description", "content": description },
- { "name": "twitter:image", "content": url }
- ]
-
- def _load_resized_logo(self, config, width = 144):
- logo = self._load_logo(config)
- height = int(width * logo.height / logo.width)
- return logo.resize((width, height))
-
- # Retrieve logo image or icon
- def _load_logo(self, config):
- theme = config.theme
-
- # Handle images (precedence over icons)
- if "logo" in theme:
- _, extension = os.path.splitext(theme["logo"])
-
- path = os.path.join(config.docs_dir, theme["logo"])
-
- # Allow users to put the logo inside their custom_dir (theme["logo"] case)
- if theme.custom_dir:
- custom_dir_logo = os.path.join(theme.custom_dir, theme["logo"])
- if os.path.exists(custom_dir_logo):
- path = custom_dir_logo
-
- # Load SVG and convert to PNG
- if extension == ".svg":
- return self._load_logo_svg(path)
-
- # Load PNG, JPEG, etc.
- return Image.open(path).convert("RGBA")
-
- # Handle icons
- icon = theme["icon"] or {}
- if "logo" in icon and icon["logo"]:
- logo = icon["logo"]
- else:
- logo = "material/library"
-
- # Resolve path of package
- base = os.path.abspath(os.path.join(
- os.path.dirname(__file__),
- "../.."
- ))
-
- path = f"{base}/templates/.icons/{logo}.svg"
-
- # Allow users to put the logo inside their custom_dir (theme["icon"]["logo"] case)
- if theme.custom_dir:
- custom_dir_logo = os.path.join(theme.custom_dir, ".icons", f"{logo}.svg")
- if os.path.exists(custom_dir_logo):
- path = custom_dir_logo
-
- # Load icon data and fill with color
- return self._load_logo_svg(path, self.color["text"])
-
- # Load SVG file and convert to PNG
- def _load_logo_svg(self, path, fill = None):
- file = BytesIO()
- data = open(path).read()
-
- # Fill with color, if given
- if fill:
- data = data.replace("<svg", f"<svg fill=\"{fill}\"")
-
- # Convert to PNG and return image
- svg2png(bytestring = data, write_to = file, scale = 10)
- return Image.open(file)
-
- # Retrieve font
- def _load_font(self, config):
- name = self.config.cards_layout_options.get("font_family")
- if not name:
-
- # Retrieve from theme (default: Roboto)
- theme = config.theme
- if isinstance(theme["font"], dict) and "text" in theme["font"]:
- name = theme["font"]["text"]
- else:
- name = "Roboto"
-
- # Google fonts can return varients like OpenSans_Condensed-Regular.ttf so
- # we only use the font requested e.g. OpenSans-Regular.ttf
- font_filename_base = name.replace(' ', '')
- filename_regex = re.escape(font_filename_base)+r"-(\w+)\.[ot]tf$"
-
- font = {}
- # Check for cached files - note these may be in subfolders
- for currentpath, folders, files in os.walk(self.cache):
- for file in files:
- # Map available font weights to file paths
- fname = os.path.join(currentpath, file)
- match = re.search(filename_regex, fname)
- if match:
- font[match.group(1)] = fname
-
- # If none found, fetch from Google and try again
- if len(font) == 0:
- self._load_font_from_google(name)
- for currentpath, folders, files in os.walk(self.cache):
- for file in files:
- # Map available font weights to file paths
- fname = os.path.join(currentpath, file)
- match = re.search(filename_regex, fname)
- if match:
- font[match.group(1)] = fname
-
- # Return available font weights with fallback
- return defaultdict(lambda: font["Regular"], font)
-
- # Retrieve font from Google Fonts
- def _load_font_from_google(self, name):
- url = "https://fonts.google.com/download?family={}"
- res = requests.get(url.format(name.replace(" ", "+")), stream = True)
-
- # Write archive to temporary file
- tmp = TemporaryFile()
- for chunk in res.iter_content(chunk_size = 32768):
- tmp.write(chunk)
-
- # Unzip fonts from temporary file
- zip = ZipFile(tmp)
- files = [file for file in zip.namelist() if file.endswith(".ttf") or file.endswith(".otf")]
- zip.extractall(self.cache, files)
-
- # Close and delete temporary file
- tmp.close()
- return files
-
-# -----------------------------------------------------------------------------
-# Data
-# -----------------------------------------------------------------------------
-
-# Set up logging
-log = logging.getLogger("mkdocs")
-log.addFilter(DuplicateFilter())
-
-# Color palette
-colors = dict({
- "red": { "fill": "#ef5552", "text": "#ffffff" },
- "pink": { "fill": "#e92063", "text": "#ffffff" },
- "purple": { "fill": "#ab47bd", "text": "#ffffff" },
- "deep-purple": { "fill": "#7e56c2", "text": "#ffffff" },
- "indigo": { "fill": "#4051b5", "text": "#ffffff" },
- "blue": { "fill": "#2094f3", "text": "#ffffff" },
- "light-blue": { "fill": "#02a6f2", "text": "#ffffff" },
- "cyan": { "fill": "#00bdd6", "text": "#ffffff" },
- "teal": { "fill": "#009485", "text": "#ffffff" },
- "green": { "fill": "#4cae4f", "text": "#ffffff" },
- "light-green": { "fill": "#8bc34b", "text": "#ffffff" },
- "lime": { "fill": "#cbdc38", "text": "#000000" },
- "yellow": { "fill": "#ffec3d", "text": "#000000" },
- "amber": { "fill": "#ffc105", "text": "#000000" },
- "orange": { "fill": "#ffa724", "text": "#000000" },
- "deep-orange": { "fill": "#ff6e42", "text": "#ffffff" },
- "brown": { "fill": "#795649", "text": "#ffffff" },
- "grey": { "fill": "#757575", "text": "#ffffff" },
- "blue-grey": { "fill": "#546d78", "text": "#ffffff" },
- "black": { "fill": "#000000", "text": "#ffffff" },
- "white": { "fill": "#ffffff", "text": "#000000" }
-})
diff --git a/dev/src/material/plugins/tags/__init__.py b/dev/src/material/plugins/tags/__init__.py
deleted file mode 100644
index 19994c95..00000000
--- a/dev/src/material/plugins/tags/__init__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-# -----------------------------------------------------------------------------
-# Functions
-# -----------------------------------------------------------------------------
-
-# Casefold a string for comparison when sorting
-def casefold(tag: str):
- return tag.casefold()
diff --git a/dev/src/material/plugins/tags/config.py b/dev/src/material/plugins/tags/config.py
deleted file mode 100644
index f2d95084..00000000
--- a/dev/src/material/plugins/tags/config.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-from functools import partial
-from markdown.extensions.toc import slugify
-from mkdocs.config.config_options import Optional, Type
-from mkdocs.config.base import Config
-
-from . import casefold
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Tags plugin configuration
-class TagsConfig(Config):
- enabled = Type(bool, default = True)
-
- # Settings for tags
- tags = Type(bool, default = True)
- tags_file = Optional(Type(str))
diff --git a/dev/src/material/plugins/tags/plugin.py b/dev/src/material/plugins/tags/plugin.py
deleted file mode 100644
index e5ce6bde..00000000
--- a/dev/src/material/plugins/tags/plugin.py
+++ /dev/null
@@ -1,182 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-import logging
-import sys
-
-from collections import defaultdict
-from markdown.extensions.toc import slugify
-from mkdocs import utils
-from mkdocs.plugins import BasePlugin
-
-# deprecated, but kept for downward compatibility. Use 'material.plugins.tags'
-# as an import source instead. This import is removed in the next major version.
-from . import casefold
-from .config import TagsConfig
-
-# -----------------------------------------------------------------------------
-# Classes
-# -----------------------------------------------------------------------------
-
-# Tags plugin
-class TagsPlugin(BasePlugin[TagsConfig]):
- supports_multiple_instances = True
-
- # Initialize plugin
- def on_config(self, config):
- if not self.config.enabled:
- return
-
- # Skip if tags should not be built
- if not self.config.tags:
- return
-
- # Initialize tags
- self.tags = defaultdict(list)
- self.tags_file = None
-
- # Retrieve tags mapping from configuration
- self.tags_map = config.extra.get("tags")
-
- # Use override of slugify function
- toc = { "slugify": slugify, "separator": "-" }
- if "toc" in config.mdx_configs:
- toc = { **toc, **config.mdx_configs["toc"] }
-
- # Partially apply slugify function
- self.slugify = lambda value: (
- toc["slugify"](str(value), toc["separator"])
- )
-
- # Hack: 2nd pass for tags index page(s)
- def on_nav(self, nav, config, files):
- if not self.config.enabled:
- return
-
- # Skip if tags should not be built
- if not self.config.tags:
- return
-
- # Resolve tags index page
- file = self.config.tags_file
- if file:
- self.tags_file = self._get_tags_file(files, file)
-
- # Build and render tags index page
- def on_page_markdown(self, markdown, page, config, files):
- if not self.config.enabled:
- return
-
- # Skip if tags should not be built
- if not self.config.tags:
- return
-
- # Skip, if page is excluded
- if page.file.inclusion.is_excluded():
- return
-
- # Render tags index page
- if page.file == self.tags_file:
- return self._render_tag_index(markdown)
-
- # Add page to tags index
- for tag in page.meta.get("tags", []):
- self.tags[tag].append(page)
-
- # Inject tags into page (after search and before minification)
- def on_page_context(self, context, page, config, nav):
- if not self.config.enabled:
- return
-
- # Skip if tags should not be built
- if not self.config.tags:
- return
-
- # Provide tags for page
- if "tags" in page.meta:
- context["tags"] = [
- self._render_tag(tag)
- for tag in page.meta["tags"]
- ]
-
- # -------------------------------------------------------------------------
-
- # Obtain tags file
- def _get_tags_file(self, files, path):
- file = files.get_file_from_path(path)
- if not file:
- log.error(f"Tags file '{path}' does not exist.")
- sys.exit(1)
-
- # Add tags file to files
- files.append(file)
- return file
-
- # Render tags index
- def _render_tag_index(self, markdown):
- if not "[TAGS]" in markdown:
- markdown += "\n[TAGS]"
-
- # Replace placeholder in Markdown with rendered tags index
- return markdown.replace("[TAGS]", "\n".join([
- self._render_tag_links(*args)
- for args in sorted(self.tags.items())
- ]))
-
- # Render the given tag and links to all pages with occurrences
- def _render_tag_links(self, tag, pages):
- classes = ["md-tag"]
- if isinstance(self.tags_map, dict):
- classes.append("md-tag-icon")
- type = self.tags_map.get(tag)
- if type:
- classes.append(f"md-tag--{type}")
-
- # Render section for tag and a link to each page
- classes = " ".join(classes)
- content = [f"## <span class=\"{classes}\">{tag}</span>", ""]
- for page in pages:
- url = utils.get_relative_url(
- page.file.src_uri,
- self.tags_file.src_uri
- )
-
- # Render link to page
- title = page.meta.get("title", page.title)
- content.append(f"- [{title}]({url})")
-
- # Return rendered tag links
- return "\n".join(content)
-
- # Render the given tag, linking to the tags index (if enabled)
- def _render_tag(self, tag):
- type = self.tags_map.get(tag) if self.tags_map else None
- if not self.tags_file or not self.slugify:
- return dict(name = tag, type = type)
- else:
- url = f"{self.tags_file.url}#{self.slugify(tag)}"
- return dict(name = tag, type = type, url = url)
-
-# -----------------------------------------------------------------------------
-# Data
-# -----------------------------------------------------------------------------
-
-# Set up logging
-log = logging.getLogger("mkdocs.material.tags")
diff --git a/dev/src/material/templates/404.html b/dev/src/material/templates/404.html
deleted file mode 100644
index ae765c44..00000000
--- a/dev/src/material/templates/404.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% extends "main.html" %}
-{% block content %}
- <h1>404 - Not found</h1>
-{% endblock %}
diff --git a/dev/src/material/templates/__init__.py b/dev/src/material/templates/__init__.py
deleted file mode 100644
index d1899378..00000000
--- a/dev/src/material/templates/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
diff --git a/dev/src/material/templates/assets/images/favicon.png b/dev/src/material/templates/assets/images/favicon.png
deleted file mode 100644
index 1cf13b9f..00000000
--- a/dev/src/material/templates/assets/images/favicon.png
+++ /dev/null
Binary files differ
diff --git a/dev/src/material/templates/base.html b/dev/src/material/templates/base.html
deleted file mode 100644
index e1f7ae5b..00000000
--- a/dev/src/material/templates/base.html
+++ /dev/null
@@ -1,258 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% import "partials/language.html" as lang with context %}
-<!doctype html>
-<html lang="{{ lang.t('language') }}" class="no-js">
- <head>
- {% block site_meta %}
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- {% if page.meta and page.meta.description %}
- <meta name="description" content="{{ page.meta.description }}">
- {% elif config.site_description %}
- <meta name="description" content="{{ config.site_description }}">
- {% endif %}
- {% if page.meta and page.meta.author %}
- <meta name="author" content="{{ page.meta.author }}">
- {% elif config.site_author %}
- <meta name="author" content="{{ config.site_author }}">
- {% endif %}
- {% if page.canonical_url %}
- <link rel="canonical" href="{{ page.canonical_url }}">
- {% endif %}
- {% if page.previous_page %}
- <link rel="prev" href="{{ page.previous_page.url | url }}">
- {% endif %}
- {% if page.next_page %}
- <link rel="next" href="{{ page.next_page.url | url }}">
- {% endif %}
- {% if "rss" in config.plugins %}
- <link rel="alternate" type="application/rss+xml" title="{{ lang.t('rss.created') }}" href="{{ 'feed_rss_created.xml' | url }}">
- <link rel="alternate" type="application/rss+xml" title="{{ lang.t('rss.updated') }}" href="{{ 'feed_rss_updated.xml' | url }}">
- {% endif %}
- <link rel="icon" href="{{ config.theme.favicon | url }}">
- <meta name="generator" content="mkdocs-{{ mkdocs_version }}, mkdocs-material-9.4.4">
- {% endblock %}
- {% block htmltitle %}
- {% if page.meta and page.meta.title %}
- <title>{{ page.meta.title }} - {{ config.site_name }}</title>
- {% elif page.title and not page.is_homepage %}
- <title>{{ page.title | striptags }} - {{ config.site_name }}</title>
- {% else %}
- <title>{{ config.site_name }}</title>
- {% endif %}
- {% endblock %}
- {% block styles %}
- <link rel="stylesheet" href="{{ 'assets/stylesheets/main.bd3936ea.min.css' | url }}">
- {% if config.theme.palette %}
- {% set palette = config.theme.palette %}
- <link rel="stylesheet" href="{{ 'assets/stylesheets/palette.356b1318.min.css' | url }}">
- {% endif %}
- {% include "partials/icons.html" %}
- {% endblock %}
- {% block libs %}
- {% for script in config.extra.polyfills %}
- {{ script | script_tag }}
- {% endfor %}
- {% endblock %}
- {% block fonts %}
- {% if config.theme.font != false %}
- {% set text = config.theme.font.get("text", "Roboto") %}
- {% set code = config.theme.font.get("code", "Roboto Mono") %}
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family={{
- text | replace(' ', '+') + ':300,300i,400,400i,700,700i%7C' +
- code | replace(' ', '+') + ':400,400i,700,700i'
- }}&display=fallback">
- <style>:root{--md-text-font:"{{ text }}";--md-code-font:"{{ code }}"}</style>
- {% endif %}
- {% endblock %}
- {% for path in config.extra_css %}
- <link rel="stylesheet" href="{{ path | url }}">
- {% endfor %}
- {% include "partials/javascripts/base.html" %}
- {% block analytics %}
- {% include "partials/integrations/analytics.html" %}
- {% endblock %}
- {% if page.meta and page.meta.meta %}
- {% for tag in page.meta.meta %}
- <meta {% for key, value in tag.items() %} {{ key }}="{{value}}" {% endfor %}>
- {% endfor %}
- {% endif %}
- {% block extrahead %}{% endblock %}
- </head>
- {% set direction = config.theme.direction or lang.t("direction") %}
- {% if config.theme.palette %}
- {% set palette = config.theme.palette %}
- {% if not palette is mapping %}
- {% set palette = palette | first %}
- {% endif %}
- {% set scheme = palette.scheme | d("default", true) %}
- {% set primary = palette.primary | d("indigo", true) %}
- {% set accent = palette.accent | d("indigo", true) %}
- <body dir="{{ direction }}" data-md-color-scheme="{{ scheme | replace(' ', '-') }}" data-md-color-primary="{{ primary | replace(' ', '-') }}" data-md-color-accent="{{ accent | replace(' ', '-') }}">
- {% else %}
- <body dir="{{ direction }}">
- {% endif %}
- {% set features = config.theme.features or [] %}
- {% if not config.theme.palette is mapping %}
- {% include "partials/javascripts/palette.html" %}
- {% endif %}
- <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
- <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
- <label class="md-overlay" for="__drawer"></label>
- <div data-md-component="skip">
- {% if page.toc | first is defined %}
- {% set skip = page.toc | first %}
- <a href="{{ skip.url | url }}" class="md-skip">
- {{ lang.t("action.skip") }}
- </a>
- {% endif %}
- </div>
- <div data-md-component="announce">
- {% if self.announce() %}
- <aside class="md-banner">
- <div class="md-banner__inner md-grid md-typeset">
- {% if "announce.dismiss" in features %}
- <button class="md-banner__button md-icon" aria-label="{{ lang.t('announce.dismiss') }}">
- {% set icon = config.theme.icon.close or "material/close" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </button>
- {% endif %}
- {% block announce %}{% endblock %}
- </div>
- {% if "announce.dismiss" in features %}
- {% include "partials/javascripts/announce.html" %}
- {% endif %}
- </aside>
- {% endif %}
- </div>
- {% if config.extra.version %}
- <div data-md-color-scheme="default" data-md-component="outdated" hidden>
- {% if self.outdated() %}
- <aside class="md-banner md-banner--warning">
- <div class="md-banner__inner md-grid md-typeset">
- {% block outdated %}{% endblock %}
- </div>
- {% include "partials/javascripts/outdated.html" %}
- </aside>
- {% endif %}
- </div>
- {% endif %}
- {% block header %}
- {% include "partials/header.html" %}
- {% endblock %}
- <div class="md-container" data-md-component="container">
- {% block hero %}{% endblock %}
- {% block tabs %}
- {% if "navigation.tabs.sticky" not in features %}
- {% if "navigation.tabs" in features %}
- {% include "partials/tabs.html" %}
- {% endif %}
- {% endif %}
- {% endblock %}
- <main class="md-main" data-md-component="main">
- <div class="md-main__inner md-grid">
- {% block site_nav %}
- {% if nav %}
- {% if page.meta and page.meta.hide %}
- {% set hidden = "hidden" if "navigation" in page.meta.hide %}
- {% endif %}
- <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" {{ hidden }}>
- <div class="md-sidebar__scrollwrap">
- <div class="md-sidebar__inner">
- {% include "partials/nav.html" %}
- </div>
- </div>
- </div>
- {% endif %}
- {% if "toc.integrate" not in features %}
- {% if page.meta and page.meta.hide %}
- {% set hidden = "hidden" if "toc" in page.meta.hide %}
- {% endif %}
- <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" {{ hidden }}>
- <div class="md-sidebar__scrollwrap">
- <div class="md-sidebar__inner">
- {% include "partials/toc.html" %}
- </div>
- </div>
- </div>
- {% endif %}
- {% endblock %}
- {% block container %}
- <div class="md-content" data-md-component="content">
- <article class="md-content__inner md-typeset">
- {% block content %}
- {% include "partials/content.html" %}
- {% endblock %}
- </article>
- </div>
- {% endblock %}
- {% include "partials/javascripts/content.html" %}
- </div>
- {% if "navigation.top" in features %}
- {% include "partials/top.html" %}
- {% endif %}
- </main>
- {% block footer %}
- {% include "partials/footer.html" %}
- {% endblock %}
- </div>
- <div class="md-dialog" data-md-component="dialog">
- <div class="md-dialog__inner md-typeset"></div>
- </div>
- {% if "navigation.instant.progress" in features %}
- {% include "partials/progress.html" %}
- {% endif %}
- {% if config.extra.consent %}
- <div class="md-consent" data-md-component="consent" id="__consent" hidden>
- <div class="md-consent__overlay"></div>
- <aside class="md-consent__inner">
- <form class="md-consent__form md-grid md-typeset" name="consent">
- {% include "partials/consent.html" %}
- </form>
- </aside>
- </div>
- {% include "partials/javascripts/consent.html" %}
- {% endif %}
- {% block config %}
- {%- set app = {
- "base": base_url,
- "features": features,
- "translations": {},
- "search": "assets/javascripts/workers/search.f886a092.min.js" | url
- } -%}
- {%- if config.extra.version -%}
- {%- set _ = app.update({ "version": config.extra.version }) -%}
- {%- endif -%}
- {%- if config.extra.tags -%}
- {%- set _ = app.update({ "tags": config.extra.tags }) -%}
- {%- endif -%}
- {%- set translations = app.translations -%}
- {%- for key in [
- "clipboard.copy",
- "clipboard.copied",
- "search.result.placeholder",
- "search.result.none",
- "search.result.one",
- "search.result.other",
- "search.result.more.one",
- "search.result.more.other",
- "search.result.term.missing",
- "select.version"
- ] -%}
- {%- set _ = translations.update({ key: lang.t(key) }) -%}
- {%- endfor -%}
- <script id="__config" type="application/json">
- {{- app | tojson -}}
- </script>
- {% endblock %}
- {% block scripts %}
- <script src="{{ 'assets/javascripts/bundle.94c44541.min.js' | url }}"></script>
- {% for script in config.extra_javascript %}
- {{ script | script_tag }}
- {% endfor %}
- {% endblock %}
- </body>
-</html>
diff --git a/dev/src/material/templates/blog-post.html b/dev/src/material/templates/blog-post.html
deleted file mode 100644
index 8e3e5f2c..00000000
--- a/dev/src/material/templates/blog-post.html
+++ /dev/null
@@ -1,112 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% extends "main.html" %}
-{% import "partials/nav-item.html" as item with context %}
-{% block container %}
- <div class="md-content md-content--post" data-md-component="content">
- <div class="md-sidebar md-sidebar--post" data-md-component="sidebar" data-md-type="navigation">
- <div class="md-sidebar__scrollwrap">
- <div class="md-sidebar__inner md-post">
- <nav class="md-nav md-nav--primary">
- <div class="md-post__back">
- <div class="md-nav__title md-nav__container">
- <a href="{{ page.parent.url | url }}" class="md-nav__link">
- {% include ".icons/material/arrow-left.svg" %}
- <span class="md-ellipsis">
- {{ lang.t("blog.index") }}
- </span>
- </a>
- </div>
- </div>
- {% if page.authors %}
- <div class="md-post__authors md-typeset">
- {% for author in page.authors %}
- <div class="md-profile md-post__profile">
- <span class="md-author md-author--long">
- <img src="{{ author.avatar }}" alt="{{ author.name }}">
- </span>
- <span class="md-profile__description">
- <strong>{{ author.name }}</strong><br>
- {{ author.description }}
- </span>
- </div>
- {% endfor %}
- </div>
- {% endif %}
- <ul class="md-post__meta md-nav__list">
- <li class="md-nav__item md-nav__item--section">
- <div class="md-post__title">
- <span class="md-ellipsis">
- {{ lang.t("blog.meta") }}
- </span>
- </div>
- <nav class="md-nav">
- <ul class="md-nav__list">
- <li class="md-nav__item">
- <div class="md-nav__link">
- {% include ".icons/material/calendar.svg" %}
- <time datetime="{{ page.config.date.created }}" class="md-ellipsis">
- {{- page.config.date.created | date -}}
- </time>
- </div>
- </li>
- {% if page.config.date.updated %}
- <li class="md-nav__item">
- <div class="md-nav__link">
- {% include ".icons/material/calendar-clock.svg" %}
- <time datetime="{{ page.config.date.updated }}" class="md-ellipsis">
- {{- page.config.date.updated | date -}}
- </time>
- </div>
- </li>
- {% endif %}
- {% if page.categories %}
- <li class="md-nav__item">
- <div class="md-nav__link">
- {% include ".icons/material/bookshelf.svg" %}
- <span class="md-ellipsis">
- {{ lang.t("blog.categories.in") }}
- {% for category in page.categories %}
- <a href="{{ category.url | url }}">
- {{- category.title -}}
- </a>
- {%- if loop.revindex > 1 %}, {% endif -%}
- {% endfor -%}
- </span>
- </div>
- </li>
- {% endif %}
- {% if page.config.readtime %}
- {% set time = page.config.readtime %}
- <li class="md-nav__item">
- <div class="md-nav__link">
- {% include ".icons/material/clock-outline.svg" %}
- <span class="md-ellipsis">
- {% if time == 1 %}
- {{ lang.t("readtime.one") }}
- {% else %}
- {{ lang.t("readtime.other") | replace("#", time) }}
- {% endif %}
- </span>
- </div>
- </li>
- {% endif %}
- </ul>
- </nav>
- </li>
- </ul>
- </nav>
- {% if "toc.integrate" in features %}
- {% include "partials/toc.html" %}
- {% endif %}
- </div>
- </div>
- </div>
- <article class="md-content__inner md-typeset">
- {% block content %}
- {% include "partials/content.html" %}
- {% endblock %}
- </article>
- </div>
-{% endblock %}
diff --git a/dev/src/material/templates/blog.html b/dev/src/material/templates/blog.html
deleted file mode 100644
index cbcf2d89..00000000
--- a/dev/src/material/templates/blog.html
+++ /dev/null
@@ -1,21 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% extends "main.html" %}
-{% block container %}
- <div class="md-content" data-md-component="content">
- <div class="md-content__inner">
- <header class="md-typeset">
- {{ page.content }}
- </header>
- {% for post in posts %}
- {% include "partials/post.html" %}
- {% endfor %}
- {% if pagination %}
- {% block pagination %}
- {% include "partials/pagination.html" %}
- {% endblock %}
- {% endif %}
- </div>
- </div>
-{% endblock %}
diff --git a/dev/src/material/templates/main.html b/dev/src/material/templates/main.html
deleted file mode 100644
index 094a197b..00000000
--- a/dev/src/material/templates/main.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% extends "base.html" %}
diff --git a/dev/src/material/templates/mkdocs_theme.yml b/dev/src/material/templates/mkdocs_theme.yml
deleted file mode 100644
index aaa47f5e..00000000
--- a/dev/src/material/templates/mkdocs_theme.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-# Language for theme localization
-language: en
-
-# Text direction (can be ltr or rtl), default: ltr
-direction:
-
-# Feature flags for functionality that alters behavior significantly, and thus
-# may be a matter of taste
-features: []
-
-# Fonts used by Material, automatically loaded from Google Fonts - see the site
-# for a list of available fonts
-font:
-
- # Default font for text
- text: Roboto
-
- # Fixed-width font for code listings
- code: Roboto Mono
-
-# From Material 5.x on, icons are inlined into the HTML and CSS as SVGs.
-# Icons that are part of the HTML can be configured and replaced
-icon:
-
-# Favicon to be rendered
-favicon: assets/images/favicon.png
-
-# Static pages to build
-static_templates:
- - 404.html
diff --git a/dev/src/material/templates/partials/actions.html b/dev/src/material/templates/partials/actions.html
deleted file mode 100644
index 1031f151..00000000
--- a/dev/src/material/templates/partials/actions.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% if page.edit_url %}
- {% if "content.action.edit" in features %}
- <a href="{{ page.edit_url }}" title="{{ lang.t('action.edit') }}" class="md-content__button md-icon">
- {% set icon = config.theme.icon.edit or "material/file-edit-outline" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </a>
- {% endif %}
- {% if "content.action.view" in features %}
- {% if "/blob/" in page.edit_url %}
- {% set part = "blob" %}
- {% else %}
- {% set part = "edit" %}
- {% endif %}
- <a href="{{ page.edit_url | replace(part, 'raw') }}" title="{{ lang.t('action.view') }}" class="md-content__button md-icon">
- {% set icon = config.theme.icon.view or "material/file-eye-outline" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </a>
- {% endif %}
-{% endif %}
diff --git a/dev/src/material/templates/partials/alternate.html b/dev/src/material/templates/partials/alternate.html
deleted file mode 100644
index 4492d657..00000000
--- a/dev/src/material/templates/partials/alternate.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<div class="md-header__option">
- <div class="md-select">
- {% set icon = config.theme.icon.alternate or "material/translate" %}
- <button class="md-header__button md-icon" aria-label="{{ lang.t('select.language') }}">
- {% include ".icons/" ~ icon ~ ".svg" %}
- </button>
- <div class="md-select__inner">
- <ul class="md-select__list">
- {% for alt in config.extra.alternate %}
- <li class="md-select__item">
- <a href="{{ alt.link | url }}" hreflang="{{ alt.lang }}" class="md-select__link">
- {{ alt.name }}
- </a>
- </li>
- {% endfor %}
- </ul>
- </div>
- </div>
-</div>
diff --git a/dev/src/material/templates/partials/comments.html b/dev/src/material/templates/partials/comments.html
deleted file mode 100644
index fae1698d..00000000
--- a/dev/src/material/templates/partials/comments.html
+++ /dev/null
@@ -1,3 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
diff --git a/dev/src/material/templates/partials/consent.html b/dev/src/material/templates/partials/consent.html
deleted file mode 100644
index 4ac5cb77..00000000
--- a/dev/src/material/templates/partials/consent.html
+++ /dev/null
@@ -1,66 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% set cookies = config.extra.consent.cookies | d({}) %}
-{% if config.extra.analytics %}
- {% if "analytics" not in cookies %}
- {% set _ = cookies.update({ "analytics": "Google Analytics" }) %}
- {% endif %}
-{% endif %}
-{% if config.repo_url and "github.com" in config.repo_url %}
- {% if "github" not in cookies %}
- {% set _ = cookies.update({ "github": "GitHub" }) %}
- {% endif %}
-{% endif %}
-{% set actions = config.extra.consent.actions %}
-{% if not actions %}
- {% set actions = ["accept", "manage"] %}
-{% endif %}
-{% if "manage" not in actions %}
- {% set checked = "checked" %}
-{% endif %}
-<h4>{{ config.extra.consent.title }}</h4>
-<p>{{ config.extra.consent.description }}</p>
-<input class="md-toggle" type="checkbox" id="__settings" {{ checked }}>
-<div class="md-consent__settings">
- <ul class="task-list">
- {% for type in cookies %}
- {% set checked = "" %}
- {% if cookies[type] is string %}
- {% set name = cookies[type] %}
- {% set checked = "checked" %}
- {% else %}
- {% set name = cookies[type].name %}
- {% if cookies[type].checked %}
- {% set checked = "checked" %}
- {% endif %}
- {% endif %}
- <li class="task-list-item">
- <label class="task-list-control">
- <input type="checkbox" name="{{ type }}" {{ checked }}>
- <span class="task-list-indicator"></span>
- {{ name }}
- </label>
- </li>
- {% endfor %}
- </ul>
-</div>
-<div class="md-consent__controls">
- {% for action in actions %}
- {% if action == "accept" %}
- <button class="md-button md-button--primary">
- {{- lang.t("consent.accept") -}}
- </button>
- {% endif %}
- {% if action == "reject" %}
- <button type="reset" class="md-button md-button--primary">
- {{- lang.t("consent.reject") -}}
- </button>
- {% endif %}
- {% if action == "manage" %}
- <label class="md-button" for="__settings">
- {{- lang.t("consent.manage") -}}
- </label>
- {% endif %}
- {% endfor %}
-</div>
diff --git a/dev/src/material/templates/partials/content.html b/dev/src/material/templates/partials/content.html
deleted file mode 100644
index 351ec986..00000000
--- a/dev/src/material/templates/partials/content.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% if "material/tags" in config.plugins and tags %}
- {% include "partials/tags.html" %}
-{% endif %}
-{% include "partials/actions.html" %}
-{% if "\x3ch1" not in page.content %}
- <h1>{{ page.title | d(config.site_name, true)}}</h1>
-{% endif %}
-{{ page.content }}
-{% if page.meta and (
- page.meta.git_revision_date_localized or
- page.meta.revision_date
-) %}
- {% include "partials/source-file.html" %}
-{% endif %}
-{% include "partials/feedback.html" %}
-{% include "partials/comments.html" %}
diff --git a/dev/src/material/templates/partials/copyright.html b/dev/src/material/templates/partials/copyright.html
deleted file mode 100644
index 5da0dc4b..00000000
--- a/dev/src/material/templates/partials/copyright.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<div class="md-copyright">
- {% if config.copyright %}
- <div class="md-copyright__highlight">
- {{ config.copyright }}
- </div>
- {% endif %}
- {% if not config.extra.generator == false %}
- Made with
- <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
- Material for MkDocs
- </a>
- {% endif %}
-</div>
diff --git a/dev/src/material/templates/partials/feedback.html b/dev/src/material/templates/partials/feedback.html
deleted file mode 100644
index 2cde98c7..00000000
--- a/dev/src/material/templates/partials/feedback.html
+++ /dev/null
@@ -1,42 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% if config.extra.analytics %}
- {% set feedback = config.extra.analytics.feedback %}
-{% endif %}
-{% if page.meta and page.meta.hide %}
- {% if "feedback" in page.meta.hide %}
- {% set feedback = None %}
- {% endif %}
-{% endif %}
-{% if feedback %}
- <form class="md-feedback" name="feedback" hidden>
- <fieldset>
- <legend class="md-feedback__title">
- {{ feedback.title }}
- </legend>
- <div class="md-feedback__inner">
- <div class="md-feedback__list">
- {% for rating in feedback.ratings %}
- <button class="md-feedback__icon md-icon" type="submit" title="{{ rating.name }}" data-md-value="{{ rating.data }}">
- {% include ".icons/" ~ rating.icon ~ ".svg" %}
- </button>
- {% endfor %}
- </div>
- <div class="md-feedback__note">
- {% for rating in feedback.ratings %}
- <div data-md-value="{{ rating.data }}" hidden>
- {% set url = "/" ~ page.url %}
- {% if page.meta and page.meta.title %}
- {% set title = page.meta.title | urlencode %}
- {% else %}
- {% set title = page.title | urlencode %}
- {% endif %}
- {{ rating.note.format(url = url, title = title) }}
- </div>
- {% endfor %}
- </div>
- </div>
- </fieldset>
- </form>
-{% endif %}
diff --git a/dev/src/material/templates/partials/footer.html b/dev/src/material/templates/partials/footer.html
deleted file mode 100644
index 37783bcf..00000000
--- a/dev/src/material/templates/partials/footer.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<footer class="md-footer">
- {% if "navigation.footer" in features %}
- {% if page.previous_page or page.next_page %}
- {% if page.meta and page.meta.hide %}
- {% set hidden = "hidden" if "footer" in page.meta.hide %}
- {% endif %}
- <nav class="md-footer__inner md-grid" aria-label="{{ lang.t('footer') }}" {{ hidden }}>
- {% if page.previous_page %}
- {% set direction = lang.t("footer.previous") %}
- <a href="{{ page.previous_page.url | url }}" class="md-footer__link md-footer__link--prev" aria-label="{{ direction }}: {{ page.previous_page.title | e }}">
- <div class="md-footer__button md-icon">
- {% set icon = config.theme.icon.previous or "material/arrow-left" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </div>
- <div class="md-footer__title">
- <span class="md-footer__direction">
- {{ direction }}
- </span>
- <div class="md-ellipsis">
- {{ page.previous_page.title }}
- </div>
- </div>
- </a>
- {% endif %}
- {% if page.next_page %}
- {% set direction = lang.t("footer.next") %}
- <a href="{{ page.next_page.url | url }}" class="md-footer__link md-footer__link--next" aria-label="{{ direction }}: {{ page.next_page.title | e }}">
- <div class="md-footer__title">
- <span class="md-footer__direction">
- {{ direction }}
- </span>
- <div class="md-ellipsis">
- {{ page.next_page.title }}
- </div>
- </div>
- <div class="md-footer__button md-icon">
- {% set icon = config.theme.icon.next or "material/arrow-right" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </div>
- </a>
- {% endif %}
- </nav>
- {% endif %}
- {% endif %}
- <div class="md-footer-meta md-typeset">
- <div class="md-footer-meta__inner md-grid">
- {% include "partials/copyright.html" %}
- {% if config.extra.social %}
- {% include "partials/social.html" %}
- {% endif %}
- </div>
- </div>
-</footer>
diff --git a/dev/src/material/templates/partials/header.html b/dev/src/material/templates/partials/header.html
deleted file mode 100644
index 86311ad3..00000000
--- a/dev/src/material/templates/partials/header.html
+++ /dev/null
@@ -1,63 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% set class = "md-header" %}
-{% if "navigation.tabs.sticky" in features %}
- {% set class = class ~ " md-header--shadow md-header--lifted" %}
-{% elif "navigation.tabs" not in features %}
- {% set class = class ~ " md-header--shadow" %}
-{% endif %}
-<header class="{{ class }}" data-md-component="header">
- <nav class="md-header__inner md-grid" aria-label="{{ lang.t('header') }}">
- <a href="{{ config.extra.homepage | d(nav.homepage.url, true) | url }}" title="{{ config.site_name | e }}" class="md-header__button md-logo" aria-label="{{ config.site_name }}" data-md-component="logo">
- {% include "partials/logo.html" %}
- </a>
- <label class="md-header__button md-icon" for="__drawer">
- {% set icon = config.theme.icon.menu or "material/menu" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </label>
- <div class="md-header__title" data-md-component="header-title">
- <div class="md-header__ellipsis">
- <div class="md-header__topic">
- <span class="md-ellipsis">
- {{ config.site_name }}
- </span>
- </div>
- <div class="md-header__topic" data-md-component="header-topic">
- <span class="md-ellipsis">
- {% if page.meta and page.meta.title %}
- {{ page.meta.title }}
- {% else %}
- {{ page.title }}
- {% endif %}
- </span>
- </div>
- </div>
- </div>
- {% if config.theme.palette %}
- {% if not config.theme.palette is mapping %}
- {% include "partials/palette.html" %}
- {% endif %}
- {% endif %}
- {% if config.extra.alternate %}
- {% include "partials/alternate.html" %}
- {% endif %}
- {% if "material/search" in config.plugins %}
- <label class="md-header__button md-icon" for="__search">
- {% set icon = config.theme.icon.search or "material/magnify" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </label>
- {% include "partials/search.html" %}
- {% endif %}
- {% if config.repo_url %}
- <div class="md-header__source">
- {% include "partials/source.html" %}
- </div>
- {% endif %}
- </nav>
- {% if "navigation.tabs.sticky" in features %}
- {% if "navigation.tabs" in features %}
- {% include "partials/tabs.html" %}
- {% endif %}
- {% endif %}
-</header>
diff --git a/dev/src/material/templates/partials/icons.html b/dev/src/material/templates/partials/icons.html
deleted file mode 100644
index 3fb55a6e..00000000
--- a/dev/src/material/templates/partials/icons.html
+++ /dev/null
@@ -1,48 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% if config.theme.icon.admonition %}
- {% set style = ["\x3cstyle\x3e:root{"] %}
- {% for type, icon in config.theme.icon.admonition.items() %}
- {% import ".icons/" ~ icon ~ ".svg" as icon %}
- {% set _ = style.append(
- "--md-admonition-icon--" ~ type ~ ":" ~
- "url('data:image/svg+xml;charset=utf-8," ~
- icon | replace("\n", "") ~
- "');"
- ) %}
- {% endfor %}
- {% set _ = style.append("}\x3c/style\x3e") %}
- {{ style | join }}
-{% endif %}
-{% if config.theme.icon.annotation %}
- {% set style = ["\x3cstyle\x3e:root{"] %}
- {% import ".icons/" ~ config.theme.icon.annotation ~ ".svg" as icon %}
- {% set _ = style.append(
- "--md-annotation-icon:" ~
- "url('data:image/svg+xml;charset=utf-8," ~
- icon | replace("\n", "") ~
- "');"
- ) %}
- {% set _ = style.append("}\x3c/style\x3e") %}
- {{ style | join }}
-{% endif %}
-{% if config.theme.icon.tag %}
- {% set style = ["\x3cstyle\x3e"] %}
- {% for type, icon in config.theme.icon.tag.items() %}
- {% import ".icons/" ~ icon ~ ".svg" as icon %}
- {% if type != "default" %}
- {% set modifier = "--" ~ type %}
- {% endif %}
- {% set _ = style.append(
- ".md-tag" ~ modifier ~ "{" ~
- "--md-tag-icon:" ~
- "url('data:image/svg+xml;charset=utf-8," ~
- icon | replace("\n", "") ~
- "');" ~
- "}"
- ) %}
- {% endfor %}
- {% set _ = style.append("\x3c/style\x3e") %}
- {{ style | join }}
-{% endif %}
diff --git a/dev/src/material/templates/partials/integrations/analytics.html b/dev/src/material/templates/partials/integrations/analytics.html
deleted file mode 100644
index ea27ef0c..00000000
--- a/dev/src/material/templates/partials/integrations/analytics.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% if config.extra.analytics %}
- {% set provider = config.extra.analytics.provider %}
-{% endif %}
-{% if provider %}
- {% include "partials/integrations/analytics/" ~ provider ~ ".html" %}
- {% if config.extra.consent %}
- <script>var consent;"undefined"==typeof __md_analytics||(consent=__md_get("__consent"))&&consent.analytics&&__md_analytics()</script>
- {% else %}
- <script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
- {% endif %}
-{% endif %}
diff --git a/dev/src/material/templates/partials/integrations/analytics/google.html b/dev/src/material/templates/partials/integrations/analytics/google.html
deleted file mode 100644
index 128854da..00000000
--- a/dev/src/material/templates/partials/integrations/analytics/google.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% if config.extra.analytics %}
- {% set property = config.extra.analytics.property | d("", true) %}
-{% endif %}
-<script id="__analytics">function __md_analytics(){function n(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],n("js",new Date),n("config","{{ property }}"),document.addEventListener("DOMContentLoaded",function(){document.forms.search&&document.forms.search.query.addEventListener("blur",function(){this.value&&n("event","search",{search_term:this.value})}),document$.subscribe(function(){var a=document.forms.feedback;if(void 0!==a)for(var e of a.querySelectorAll("[type=submit]"))e.addEventListener("click",function(e){e.preventDefault();var t=document.location.pathname,e=this.getAttribute("data-md-value");n("event","feedback",{page:t,data:e}),a.firstElementChild.disabled=!0;e=a.querySelector(".md-feedback__note [data-md-value='"+e+"']");e&&(e.hidden=!1)}),a.hidden=!1}),location$.subscribe(function(e){n("config","{{ property }}",{page_path:e.pathname})})});var e=document.createElement("script");e.async=!0,e.src="https://www.googletagmanager.com/gtag/js?id={{ property }}",document.getElementById("__analytics").insertAdjacentElement("afterEnd",e)}</script>
diff --git a/dev/src/material/templates/partials/javascripts/announce.html b/dev/src/material/templates/partials/javascripts/announce.html
deleted file mode 100644
index b62a131e..00000000
--- a/dev/src/material/templates/partials/javascripts/announce.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script>
diff --git a/dev/src/material/templates/partials/javascripts/base.html b/dev/src/material/templates/partials/javascripts/base.html
deleted file mode 100644
index 7625632d..00000000
--- a/dev/src/material/templates/partials/javascripts/base.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<script>__md_scope=new URL("{{ config.extra.scope | d(base_url) }}",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
diff --git a/dev/src/material/templates/partials/javascripts/consent.html b/dev/src/material/templates/partials/javascripts/consent.html
deleted file mode 100644
index 538a38c7..00000000
--- a/dev/src/material/templates/partials/javascripts/consent.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script>
diff --git a/dev/src/material/templates/partials/javascripts/content.html b/dev/src/material/templates/partials/javascripts/content.html
deleted file mode 100644
index 32021d0b..00000000
--- a/dev/src/material/templates/partials/javascripts/content.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% if "content.tabs.link" in features %}
- <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
-{% endif %}
diff --git a/dev/src/material/templates/partials/javascripts/outdated.html b/dev/src/material/templates/partials/javascripts/outdated.html
deleted file mode 100644
index 640a3669..00000000
--- a/dev/src/material/templates/partials/javascripts/outdated.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script>
diff --git a/dev/src/material/templates/partials/javascripts/palette.html b/dev/src/material/templates/partials/javascripts/palette.html
deleted file mode 100644
index b7e6f4dd..00000000
--- a/dev/src/material/templates/partials/javascripts/palette.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
diff --git a/dev/src/material/templates/partials/language.html b/dev/src/material/templates/partials/language.html
deleted file mode 100644
index e497e66b..00000000
--- a/dev/src/material/templates/partials/language.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% import "partials/languages/" ~ config.theme.language ~ ".html" as lang %}
-{% import "partials/languages/en.html" as fallback %}
-{% macro t(key) %}{{ lang.t(key) or fallback.t(key) or key }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/af.html b/dev/src/material/templates/partials/languages/af.html
deleted file mode 100644
index bc4a0232..00000000
--- a/dev/src/material/templates/partials/languages/af.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "af",
- "action.edit": "Wysig hierdie bladsy",
- "action.skip": "Slaan oor na inhoud",
- "action.view": "Bekyk bron van hierdie bladsy",
- "announce.dismiss": "Moenie dit weer wys nie",
- "blog.archive": "Argief",
- "blog.categories": "Kategorieë",
- "blog.categories.in": "binne",
- "blog.continue": "Lees verder",
- "blog.draft": "Konsep",
- "blog.index": "Terug na indeks",
- "blog.meta": "Metadata",
- "blog.references": "Verwante skakels",
- "clipboard.copy": "Kopieer na knipbord",
- "clipboard.copied": "gekopieer na knipbord",
- "consent.accept": "Aanvaar",
- "consent.manage": "Bestuur instellings",
- "consent.reject": "Verwerp",
- "footer": "Voetskrif",
- "footer.next": "Volgende",
- "footer.previous": "Vorige",
- "header": "Kopskrif",
- "meta.comments": "Kommentaar",
- "meta.source": "Bron",
- "nav": "Navigasie",
- "readtime.one": "1 minuut se lees",
- "readtime.other": "# minuut se lees",
- "rss.created": "RSS-voer geskep",
- "rss.updated": "RSS-voer van opgedateerde inhoud",
- "search": "Soek",
- "search.config.lang": "nl",
- "search.placeholder": "Soek",
- "search.share": "Deel",
- "search.reset": "Terugstel",
- "search.result.initializer": "Inisialisering van soektog",
- "search.result.placeholder": "Tik om te begin soek",
- "search.result.none": "Geen ooreenstemmende dokumente",
- "search.result.one": "1 ooreenstemmende dokument",
- "search.result.other": "# ooreenstemmende dokumente",
- "search.result.more.one": "1 meer op hierdie bladsy",
- "search.result.more.other": "# meer op hierdie bladsy",
- "search.result.term.missing": "Vermis",
- "select.language": "Kies taal",
- "select.version": "Kies weergawe",
- "source": "Slaan oor na inhoud",
- "source.file.contributors": "Medewerkers",
- "source.file.date.created": "Geskep",
- "source.file.date.updated": "Laaste opdatering",
- "tabs": "Duimgids",
- "toc": "Inhoudsopgawe",
- "top": "Terug na bo"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ar.html b/dev/src/material/templates/partials/languages/ar.html
deleted file mode 100644
index 580f0d77..00000000
--- a/dev/src/material/templates/partials/languages/ar.html
+++ /dev/null
@@ -1,57 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ar",
- "direction": "rtl",
- "action.edit": "عدل الصفحة",
- "action.skip": "انتقل إلى المحتوى",
- "action.view": "عرض مصدر هذه الصفحة",
- "announce.dismiss": "لا تظهر هذا مرة أخرى",
- "blog.archive": "أرشيف",
- "blog.categories": "فئات",
- "blog.categories.in": "ضمن",
- "blog.continue": "أكمل القراءة",
- "blog.draft": "مسودة",
- "blog.index": "رجوع إلى الفهرس",
- "blog.meta": "بيانات وصفية",
- "blog.references": "روابط ذات علاقة",
- "clipboard.copy": "نسخ إلى الحافظة",
- "clipboard.copied": "تم النسخ الى الحافظة",
- "consent.accept": "قبول",
- "consent.manage": "إدارة الإعدادات",
- "consent.reject": "رفض",
- "footer": "هامش سفلي",
- "footer.next": "التالية",
- "footer.previous": "السابقة",
- "header": "عنوان العارضة",
- "meta.comments": "التعليقات",
- "meta.source": "المصدر",
- "nav": "تصفح",
- "readtime.one": "قراءة لمدة دقيقة",
- "readtime.other": "دقائق قراءة #",
- "rss.created": "ملقم بالخلاصات",
- "rss.updated": "ملقم بالخلاصات المحدثة",
- "search": "إبحث",
- "search.config.pipeline": " ",
- "search.placeholder": "بحث",
- "search.share": "شارك",
- "search.reset": "مسح كلي",
- "search.result.initializer": "بدء البحث",
- "search.result.placeholder": "اكتب لبدء البحث",
- "search.result.none": "لا توجد نتائج",
- "search.result.one": "نتائج البحث مستند واحد",
- "search.result.other": "نتائج البحث # مستندات",
- "search.result.more.one": "أكثر من 1 في هذه الصفحة",
- "search.result.more.other": "أكثر من # في هذه الصفحة",
- "search.result.term.missing": "مفقود",
- "select.language": "إختر اللغة",
- "select.version": "إختر الإصدار",
- "source": "اذهب إلى المصدر",
- "source.file.contributors": "المساهمون",
- "source.file.date.created": "خلقت",
- "source.file.date.updated": "اخر تحديث",
- "tabs": "نوافذ",
- "toc": "جدول المحتويات",
- "top": "عد إلى الأعلى"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/be.html b/dev/src/material/templates/partials/languages/be.html
deleted file mode 100644
index fa89f2a1..00000000
--- a/dev/src/material/templates/partials/languages/be.html
+++ /dev/null
@@ -1,57 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "be",
- "direction": "ltr",
- "action.edit": "Правіць старонку",
- "action.skip": "Перайсці да зместа",
- "action.view": "Паглядзець зыходны код старонкі",
- "announce.dismiss": "Больш не паказваць",
- "blog.archive": "Заархіваваць",
- "blog.categories": "Катэгорыі",
- "blog.categories.in": "у",
- "blog.continue": "Працягнуць чытаць",
- "blog.draft": "Чарнавік",
- "blog.index": "Вярнуцца на хатнюю",
- "blog.meta": "Метаданыя",
- "blog.references": "Спасылкі па тэме",
- "clipboard.copy": "Скапіраваць у буфер абмена",
- "clipboard.copied": "Скапіравана ў буфер абмена",
- "consent.accept": "Прыняць",
- "consent.manage": "Кіраваць наладамі",
- "consent.reject": "Адхіліць",
- "footer": "Ніжні калантытул",
- "footer.next": "Наступная",
- "footer.previous": "Папярэдняя",
- "header": "Верхні калантытул",
- "meta.comments": "Каментарыі",
- "meta.source": "Зыходны код",
- "nav": "Навігацыя",
- "readtime.one": "Прачытанне зойме 1 хв",
- "readtime.other": "Прачытанне зойме # хв",
- "rss.created": "RSS стужка",
- "rss.updated": "RSS стужка з абноўленым зместам",
- "search": "Пошук",
- "search.config.lang": "ru",
- "search.placeholder": "Пошук",
- "search.share": "Падзяліцца",
- "search.reset": "Ачысціць",
- "search.result.initializer": "Пачынаем пошук",
- "search.result.placeholder": "Пачніце друкаваць для пошуку",
- "search.result.none": "Нічога ня знойдзена",
- "search.result.one": "Адзін адпаведны дакумент",
- "search.result.other": "Адпаведных дакументаў: #",
- "search.result.more.one": "Яшчэ 1 на гэтай старонцы",
- "search.result.more.other": "Яшчэ # на гэтай старонцы",
- "search.result.term.missing": "Адсутнічае",
- "select.language": "Выберыце мову",
- "select.version": "Выберыце версію",
- "source": "Перайсці ў рэпазітар",
- "source.file.contributors": "Укладальнікі",
- "source.file.date.created": "Створана",
- "source.file.date.updated": "Апошняе абнаўленне",
- "tabs": "Укладкі",
- "toc": "Змест",
- "top": "Вярнуцца да пачатку"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/bg.html b/dev/src/material/templates/partials/languages/bg.html
deleted file mode 100644
index 4fc20a98..00000000
--- a/dev/src/material/templates/partials/languages/bg.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "bg",
- "action.edit": "Редактирай тази страница",
- "action.skip": "Към съдържанието",
- "action.view": "Виж съдържанието на тази страница",
- "announce.dismiss": "Не показвай повече",
- "blog.archive": "Архив",
- "blog.categories": "Категории",
- "blog.categories.in": "В",
- "blog.continue": "Продължи четенето",
- "blog.draft": "Чернова",
- "blog.index": "Назад към индекса",
- "blog.meta": "Метаданни",
- "blog.references": "Свързани линкове",
- "clipboard.copy": "Копирай",
- "clipboard.copied": "Копирано",
- "consent.accept": "Приеми",
- "consent.manage": "Управление на настойките",
- "consent.reject": "Откажи",
- "footer": "Долен колонтитул",
- "footer.next": "Следваща",
- "footer.previous": "Предишна",
- "header": "Горен колонтитул",
- "meta.comments": "Коментари",
- "meta.source": "Код",
- "nav": "Навигация",
- "readtime.one": "1 мин четено",
- "readtime.other": "# мин четено",
- "rss.created": "RSS публикации",
- "rss.updated": "RSS публикации с актуализирано съдържание",
- "search": "Търси",
- "search.config.lang": "ru",
- "search.placeholder": "Търси",
- "search.share": "Сподели",
- "search.reset": "Изчисти",
- "search.result.initializer": "Инициализирано търсене",
- "search.result.placeholder": "Започнете да пишете, за да търсите",
- "search.result.none": "Няма резултати",
- "search.result.one": "1 резултат",
- "search.result.other": "# резултата",
- "search.result.more.one": "още 1 на тази страница",
- "search.result.more.other": "още # на тази страница",
- "search.result.term.missing": "Липсващо",
- "select.language": "Избери език",
- "select.version": "Избери версия",
- "source": "Към хранилището",
- "source.file.contributors": "Участници",
- "source.file.date.created": "Създаден",
- "source.file.date.updated": "Последна промяна",
- "tabs": "Табове",
- "toc": "Съдържание",
- "top": "Върни се в началото"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/bn.html b/dev/src/material/templates/partials/languages/bn.html
deleted file mode 100644
index b5fed867..00000000
--- a/dev/src/material/templates/partials/languages/bn.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "bn",
- "action.edit": "এই পেজ এডিট করুন",
- "action.skip": "কনটেন্টে যান",
- "action.view": "পেজের ভিউ",
- "announce.dismiss": "আর কখনো দেখাবে না",
- "blog.archive": "সংরক্ষণাগার",
- "blog.categories": "বিভাগ",
- "blog.categories.in": "বিভাগের মধ্যে",
- "blog.continue": "পড়তে থাকুন",
- "blog.draft": "খসড়া",
- "blog.index": "ইনডেক্সে ফিরে যান",
- "blog.meta": "মেটাডেটা",
- "blog.references": "সম্পর্কিত লিংক",
- "clipboard.copy": "ক্লিপবোর্ডে কপি করুন",
- "clipboard.copied": "ক্লিপবোর্ডে কপি হয়েছে",
- "consent.accept": "গ্রহণ",
- "consent.manage": "সেটিংস ব্যবস্থাপনা",
- "consent.reject": "প্রত্যাখ্যান",
- "footer": "ফুটার",
- "footer.next": "পরে",
- "footer.previous": "পূর্ববর্তী",
- "header": "হেডার",
- "meta.comments": "মন্তব্য",
- "meta.source": "উৎস",
- "nav": "ন্যাভিগেশন",
- "readtime.one": "১ মিনিট পড়া",
- "readtime.other": "# মিনিট পড়া",
- "rss.created": "আরএসএস ফিড",
- "rss.updated": "আপডেট করা বিষয়বস্তুর আরএসএস ফিড",
- "search": "অনুসন্ধান করুন",
- "search.config.pipeline": " ",
- "search.placeholder": "অনুসন্ধান করুন",
- "search.share": "শেয়ার",
- "search.reset": "রিসেট",
- "search.result.initializer": "অনুসন্ধান শুরু করা হচ্ছে",
- "search.result.placeholder": "সার্চ টাইপ করুন",
- "search.result.none": "কিছু পাওয়া যায়নি",
- "search.result.one": "১ টা ডকুমেন্ট",
- "search.result.other": "# টা ডকুমেন্ট",
- "search.result.more.one": "এই পৃষ্ঠায় আরও ১টি আছে",
- "search.result.more.other": "এই পৃষ্ঠায় আরও #টি আছে",
- "search.result.term.missing": "অনুপস্থিত",
- "select.language": "ভাষা নির্বাচন করুণ",
- "select.version": "সংস্করণ নির্বাচন করুণ",
- "source": "রিপোজিটরিতে যান",
- "source.file.contributors": "অবদানকারী",
- "source.file.date.created": "তৈরি হয়েছে",
- "source.file.date.updated": "শেষ আপডেট",
- "tabs": "ট্যাব",
- "toc": "সূচি তালিকা",
- "top": "উপরে ফিরে যাও"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ca.html b/dev/src/material/templates/partials/languages/ca.html
deleted file mode 100644
index 5f70ef17..00000000
--- a/dev/src/material/templates/partials/languages/ca.html
+++ /dev/null
@@ -1,55 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ca",
- "action.edit": "Edita aquesta pàgina",
- "action.skip": "Salta el contingut",
- "action.view": "Visualitza el codi font",
- "announce.dismiss": "No ho tornis a mostrar",
- "blog.archive": "Arxiva",
- "blog.categories": "Categories",
- "blog.categories.in": "a",
- "blog.continue": "Continua llegint",
- "blog.draft": "Esborrany",
- "blog.index": "Torna a l'índex",
- "blog.meta": "Metadades",
- "blog.references": "Enllaços relacionats",
- "clipboard.copy": "Còpia al porta-retalls",
- "clipboard.copied": "Copiat al porta-retalls",
- "consent.accept": "Accepta",
- "consent.manage": "Gestiona la configuració",
- "consent.reject": "Rebutja",
- "footer": "Peu de pàgina",
- "footer.next": "Següent",
- "footer.previous": "Anterior",
- "header": "Capçalera",
- "meta.comments": "Comentaris",
- "meta.source": "Codi font",
- "nav": "Navegació",
- "readtime.one": "1 min de lectura",
- "readtime.other": "# min de lectura",
- "rss.created": "Canal RSS",
- "rss.updated": "Canal RSS de contingut actualitzat",
- "search": "Cerca",
- "search.placeholder": "Cerca",
- "search.share": "Comparteix",
- "search.reset": "Neteja",
- "search.result.initializer": "Inicialitzant cerca",
- "search.result.placeholder": "Escriu per a començar a cercar",
- "search.result.none": "Cap document coincideix",
- "search.result.one": "1 document coincident",
- "search.result.other": "# documents coincidents",
- "search.result.more.one": "1 més en aquesta pàgina",
- "search.result.more.other": "# més en aquesta pàgina",
- "search.result.term.missing": "Desaparegut",
- "select.language": "Selecciona la llengua",
- "select.version": "Selecciona la versió",
- "source": "Ves al repositori",
- "source.file.contributors": "Col·laboradors",
- "source.file.date.created": "Creada",
- "source.file.date.updated": "Darrera actualització",
- "tabs": "Pestanyes",
- "toc": "Taula de continguts",
- "top": "Torna a l'inici"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/cs.html b/dev/src/material/templates/partials/languages/cs.html
deleted file mode 100644
index e8e89822..00000000
--- a/dev/src/material/templates/partials/languages/cs.html
+++ /dev/null
@@ -1,55 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "cs",
- "action.edit": "Upravit tuto stránku",
- "action.skip": "Přeskočit obsah",
- "action.view": "Zobrazit zdroj této stránky",
- "announce.dismiss": "Již nezobrazovat",
- "blog.archive": "Archiv",
- "blog.categories": "Kategorie",
- "blog.categories.in": "v",
- "blog.continue": "Pokračovat ve čtení",
- "blog.draft": "Návrh",
- "blog.index": "Zpět na index",
- "blog.meta": "Metadata",
- "blog.references": "Související odkazy",
- "clipboard.copy": "Kopírovat do schránky",
- "clipboard.copied": "Zkopírováno do schránky",
- "consent.accept": "Akceptovat",
- "consent.manage": "Spravovat nastavení",
- "consent.reject": "Odmítnout",
- "footer": "Zápatí",
- "footer.next": "Další",
- "footer.previous": "Předchozí",
- "header": "Záhlaví",
- "meta.comments": "Komentáře",
- "meta.source": "Zdroj",
- "nav": "Navigace",
- "readtime.one": "1 min čtení",
- "readtime.other": "# min čtení",
- "rss.created": "RSS kanál",
- "rss.updated": "RSS zdroj aktualizovaného obsahu",
- "search": "Vyhledávání",
- "search.placeholder": "Hledat",
- "search.share": "Sdílet",
- "search.reset": "Vyčistit",
- "search.result.initializer": "Inicializace vyhledávání",
- "search.result.placeholder": "Pište co se má vyhledat",
- "search.result.none": "Nenalezeny žádné dokumenty",
- "search.result.one": "Nalezený dokument: 1",
- "search.result.other": "Nalezené dokumenty: #",
- "search.result.more.one": "1 další na této stránce",
- "search.result.more.other": "# více na této stránce",
- "search.result.term.missing": "Chybějící",
- "select.language": "Zvolte jazyk",
- "select.version": "Vyberte verzi",
- "source": "Přejít do repozitáře",
- "source.file.contributors": "Přispěvatelé",
- "source.file.date.created": "Vytvořeno",
- "source.file.date.updated": "Poslední aktualizace",
- "tabs": "Karty",
- "toc": "Obsah",
- "top": "Zpět na začátek"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/da.html b/dev/src/material/templates/partials/languages/da.html
deleted file mode 100644
index 3538aa8c..00000000
--- a/dev/src/material/templates/partials/languages/da.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "da",
- "action.edit": "Redigér denne side",
- "action.skip": "Gå til indholdet",
- "action.view": "Vis kildetekst på denne side",
- "announce.dismiss": "Vis ikke dette igen",
- "blog.archive": "Arkiv",
- "blog.categories": "Kategorier",
- "blog.categories.in": "i",
- "blog.continue": "Læs mere",
- "blog.draft": "Udkast",
- "blog.index": "Gå tilbage",
- "blog.meta": "Metadata",
- "blog.references": "Relateret indhold",
- "clipboard.copy": "Kopiér til udklipsholderen",
- "clipboard.copied": "Kopieret til udklipsholderen",
- "consent.accept": "Accepter",
- "consent.manage": "Administrer indstillinger",
- "consent.reject": "Afvis",
- "footer": "Sidefod",
- "footer.next": "Næste",
- "footer.previous": "Forrige",
- "header": "Sidehoved",
- "meta.comments": "Kommentarer",
- "meta.source": "Kilde",
- "nav": "Navigation",
- "readtime.one": "1 minuts læsetid",
- "readtime.other": "# minuts læstid",
- "rss.created": "RSS feed",
- "rss.updated": "RSS feed af opdateret indhold",
- "search": "Søg",
- "search.config.lang": "da",
- "search.placeholder": "Søg",
- "search.share": "Del",
- "search.reset": "Nulstil søgning",
- "search.result.initializer": "Start søgning",
- "search.result.placeholder": "Indtast søgeord",
- "search.result.none": "Ingen resultater fundet",
- "search.result.one": "1 resultat",
- "search.result.other": "# resultater",
- "search.result.more.one": "1 resultat mere på denne side",
- "search.result.more.other": "# resultater mere på denne side",
- "search.result.term.missing": "Mangler",
- "select.language": "Vælg sprog",
- "select.version": "Vælg version",
- "source": "Åbn arkiv",
- "source.file.contributors": "Bidragydere",
- "source.file.date.created": "Oprettet",
- "source.file.date.updated": "Sidste ændring",
- "tabs": "Faner",
- "toc": "Indholdsfortegnelse",
- "top": "Tilbage til start"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/de.html b/dev/src/material/templates/partials/languages/de.html
deleted file mode 100644
index c5df419f..00000000
--- a/dev/src/material/templates/partials/languages/de.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "de",
- "action.edit": "Seite editieren",
- "action.skip": "Zum Inhalt",
- "action.view": "Quellcode der Seite anzeigen",
- "announce.dismiss": "Nicht mehr anzeigen",
- "blog.archive": "Archiv",
- "blog.categories": "Kategorien",
- "blog.categories.in": "in",
- "blog.continue": "Weiterlesen",
- "blog.draft": "Entwurf",
- "blog.index": "Zur Übersicht",
- "blog.meta": "Metadaten",
- "blog.references": "Weiterführende Links",
- "clipboard.copy": "In Zwischenablage kopieren",
- "clipboard.copied": "In Zwischenablage kopiert",
- "consent.accept": "Akzeptieren",
- "consent.manage": "Einstellungen",
- "consent.reject": "Ablehnen",
- "footer": "Fußzeile",
- "footer.next": "Weiter",
- "footer.previous": "Zurück",
- "header": "Kopfzeile",
- "meta.comments": "Kommentare",
- "meta.source": "Quellcode",
- "nav": "Navigation",
- "readtime.one": "1 Min. Lesezeit",
- "readtime.other": "# Min. Lesezeit",
- "rss.created": "RSS Feed",
- "rss.updated": "RSS Feed der aktualisierten Inhalte",
- "search": "Suche",
- "search.config.lang": "de",
- "search.placeholder": "Suche",
- "search.share": "Teilen",
- "search.reset": "Zurücksetzen",
- "search.result.initializer": "Suche wird initialisiert",
- "search.result.placeholder": "Suchbegriff eingeben",
- "search.result.none": "Keine Suchergebnisse",
- "search.result.one": "1 Suchergebnis",
- "search.result.other": "# Suchergebnisse",
- "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite",
- "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite",
- "search.result.term.missing": "Es fehlt",
- "select.language": "Sprache wechseln",
- "select.version": "Version auswählen",
- "source": "Zum Repository",
- "source.file.contributors": "Mitwirkende",
- "source.file.date.created": "Erstellt",
- "source.file.date.updated": "Letztes Update",
- "tabs": "Hauptnavigation",
- "toc": "Inhaltsverzeichnis",
- "top": "Zurück zum Seitenanfang"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/el.html b/dev/src/material/templates/partials/languages/el.html
deleted file mode 100644
index ab3b5d08..00000000
--- a/dev/src/material/templates/partials/languages/el.html
+++ /dev/null
@@ -1,54 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "el",
- "action.edit": "Επεξεργασία αυτής της σελίδας",
- "action.skip": "Μετάβαση στο περιεχόμενο",
- "action.view": "Προβολή πηγαίου κώδικα",
- "announce.dismiss": "Μην το ξαναδείξετε αυτό",
- "blog.archive": "Aρχείο",
- "blog.categories": "Κατηγορίες",
- "blog.categories.in": "Στο",
- "blog.continue": "Περισσότερα",
- "blog.draft": "Πρόχειρο",
- "blog.index": "Eπιστροφή",
- "blog.references": "Σχετικοί σύνδεσμοι",
- "clipboard.copy": "Αντιγραφή στο πρόχειρο",
- "clipboard.copied": "Αντιγράφηκε στο πρόχειρο",
- "consent.accept": "Αποδοχή",
- "consent.manage": "Περισσότερες επιλογές",
- "consent.reject": "Απόρριψη",
- "footer": "Υποσέλιδο",
- "footer.next": "Επόμενο",
- "footer.previous": "Προηγούμενο",
- "header": "Κεφαλίδα",
- "meta.comments": "Σχόλια",
- "meta.source": "Πηγή",
- "nav": "Πλοήγηση",
- "readtime.one": "1 λεπτό διάβασμα",
- "readtime.other": "# λεπτά διάβασμα",
- "rss.created": "Ροές Δεδομένων RSS",
- "rss.updated": "Ροές Δεδομένων RSS. Τελευταία νέα",
- "search": "Αναζήτηση",
- "search.placeholder": "Αναζήτηση",
- "search.share": "Διαμοίραση",
- "search.reset": "Καθαρισμός",
- "search.result.initializer": "Αρχικοποίηση αναζήτησης",
- "search.result.placeholder": "Πληκτρολογήστε για να αρχίσει η αναζήτηση",
- "search.result.none": "δεν βρήκε κάποιο έγγραφο",
- "search.result.one": "1 έγγραφο που ταιριάζει",
- "search.result.other": "# έγγραφα που ταιριάζουν",
- "search.result.more.one": "1 ακόμα σε αυτήν τη σελίδα",
- "search.result.more.other": "# ακόμα σε αυτήν τη σελίδα",
- "search.result.term.missing": "Λείπει",
- "select.language": "Επιλογή γλώσσας",
- "select.version": "Επιλογή έκδοσης",
- "source": "Μετάβαση στο αποθετήριο",
- "source.file.contributors": "Συνεισφέροντες",
- "source.file.date.created": "Δημιουργήθηκε",
- "source.file.date.updated": "τελευταία ενημέρωση",
- "tabs": "Καρτέλες",
- "toc": "Πίνακας περιεχομένων",
- "top": "Επιστροφή στην αρχή"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/en.html b/dev/src/material/templates/partials/languages/en.html
deleted file mode 100644
index 7f8eb9e9..00000000
--- a/dev/src/material/templates/partials/languages/en.html
+++ /dev/null
@@ -1,59 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "en",
- "direction": "ltr",
- "action.edit": "Edit this page",
- "action.skip": "Skip to content",
- "action.view": "View source of this page",
- "announce.dismiss": "Don't show this again",
- "blog.archive": "Archive",
- "blog.categories": "Categories",
- "blog.categories.in": "in",
- "blog.continue": "Continue reading",
- "blog.draft": "Draft",
- "blog.index": "Back to index",
- "blog.meta": "Metadata",
- "blog.references": "Related links",
- "clipboard.copy": "Copy to clipboard",
- "clipboard.copied": "Copied to clipboard",
- "consent.accept": "Accept",
- "consent.manage": "Manage settings",
- "consent.reject": "Reject",
- "footer": "Footer",
- "footer.next": "Next",
- "footer.previous": "Previous",
- "header": "Header",
- "meta.comments": "Comments",
- "meta.source": "Source",
- "nav": "Navigation",
- "readtime.one": "1 min read",
- "readtime.other": "# min read",
- "rss.created": "RSS feed",
- "rss.updated": "RSS feed of updated content",
- "search": "Search",
- "search.config.lang": "en",
- "search.config.pipeline": "stopWordFilter",
- "search.config.separator": "[\\s\\-]+",
- "search.placeholder": "Search",
- "search.share": "Share",
- "search.reset": "Clear",
- "search.result.initializer": "Initializing search",
- "search.result.placeholder": "Type to start searching",
- "search.result.none": "No matching documents",
- "search.result.one": "1 matching document",
- "search.result.other": "# matching documents",
- "search.result.more.one": "1 more on this page",
- "search.result.more.other": "# more on this page",
- "search.result.term.missing": "Missing",
- "select.language": "Select language",
- "select.version": "Select version",
- "source": "Go to repository",
- "source.file.contributors": "Contributors",
- "source.file.date.created": "Created",
- "source.file.date.updated": "Last update",
- "tabs": "Tabs",
- "toc": "Table of contents",
- "top": "Back to top"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/eo.html b/dev/src/material/templates/partials/languages/eo.html
deleted file mode 100644
index 65b8a423..00000000
--- a/dev/src/material/templates/partials/languages/eo.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "eo",
- "action.edit": "Redakti ĉi tiun paĝon",
- "action.skip": "Saltu al enhavo",
- "clipboard.copy": "Kopii al tondujo",
- "clipboard.copied": "Kopiado al klipo",
- "footer": "Piedlinio",
- "footer.next": "Sekva",
- "footer.previous": "Antaŭa",
- "header": "Kaplinio",
- "meta.comments": "Komentoj",
- "meta.source": "Fontkodo",
- "nav": "Navigado",
- "search.config.lang": "es",
- "search.placeholder": "Serĉo",
- "search.reset": "Klara",
- "search.result.placeholder": "Tajpu por komenci serĉadon",
- "search.result.none": "Neniuj kongruaj dokumentoj",
- "search.result.one": "1 kongrua dokumento",
- "search.result.other": "# kongruaj dokumentoj",
- "source": "Iru al deponejo",
- "source.file.date.created": "Kreita",
- "source.file.date.updated": "Lasta ĝisdatigo",
- "tabs": "Langetoj",
- "toc": "Enhavtabelo"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/es.html b/dev/src/material/templates/partials/languages/es.html
deleted file mode 100644
index 78cae750..00000000
--- a/dev/src/material/templates/partials/languages/es.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "es",
- "action.edit": "Editar esta página",
- "action.skip": "Saltar a contenido",
- "action.view": "Ver código fuente de esta página",
- "announce.dismiss": "No mostrar esto de nuevo",
- "blog.archive": "Archivo",
- "blog.categories": "Categorías",
- "blog.categories.in": "en",
- "blog.continue": "Seguir leyendo",
- "blog.draft": "Borrador",
- "blog.index": "Regresar al índice",
- "blog.meta": "Metadata",
- "blog.references": "Enlaces relacionados",
- "clipboard.copy": "Copiar al portapapeles",
- "clipboard.copied": "Copiado al portapapeles",
- "consent.accept": "Aceptar",
- "consent.manage": "Gestionar cookies",
- "consent.reject": "Rechazar",
- "footer": "Pie",
- "footer.next": "Siguiente",
- "footer.previous": "Anterior",
- "header": "Cabecera",
- "meta.comments": "Comentarios",
- "meta.source": "Fuente",
- "nav": "Navegación",
- "readtime.one": "1 minuto de lectura",
- "readtime.other": "# minutos de lectura",
- "rss.created": "Fuente RSS",
- "rss.updated": "Fuente RSS de contenido actualizado",
- "search": "Buscar",
- "search.config.lang": "es",
- "search.placeholder": "Búsqueda",
- "search.share": "Compartir",
- "search.reset": "Limpiar",
- "search.result.initializer": "Inicializando búsqueda",
- "search.result.placeholder": "Teclee para comenzar búsqueda",
- "search.result.none": "No se encontraron documentos",
- "search.result.one": "1 documento encontrado",
- "search.result.other": "# documentos encontrados",
- "search.result.more.one": "1 más en esta página",
- "search.result.more.other": "# más en esta página",
- "search.result.term.missing": "Falta",
- "select.language": "Seleccionar idioma",
- "select.version": "Seleccionar versión",
- "source": "Ir al repositorio",
- "source.file.contributors": "Contribuidores",
- "source.file.date.created": "Creado",
- "source.file.date.updated": "Última actualización",
- "tabs": "Pestañas",
- "toc": "Tabla de contenidos",
- "top": "Volver al principio"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/et.html b/dev/src/material/templates/partials/languages/et.html
deleted file mode 100644
index 3e23129b..00000000
--- a/dev/src/material/templates/partials/languages/et.html
+++ /dev/null
@@ -1,23 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "et",
- "action.edit": "Muuda seda lehte",
- "action.skip": "Keri sisuni",
- "clipboard.copy": "Kopeeri lõikelauale",
- "clipboard.copied": "Kopeeritud",
- "footer.next": "Järgmine",
- "footer.previous": "Eelmine",
- "meta.comments": "Kommentaarid",
- "meta.source": "Lähtekood",
- "search.placeholder": "Otsi",
- "search.result.placeholder": "Otsimiseks kirjuta siia",
- "search.result.none": "Otsingule ei leitud ühtegi vastet",
- "search.result.one": "Leiti üks tulemus",
- "search.result.other": "Leiti # tulemust",
- "source": "Ava repositooriumis",
- "source.file.date.created": "Loodud",
- "source.file.date.updated": "Viimane uuendus",
- "toc": "Sisukord"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/eu.html b/dev/src/material/templates/partials/languages/eu.html
deleted file mode 100644
index 9b97a732..00000000
--- a/dev/src/material/templates/partials/languages/eu.html
+++ /dev/null
@@ -1,55 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "eu",
- "action.edit": "Editatu orri hau",
- "action.skip": "Joan zuzenean edukira",
- "action.view": "Ikusi orri honen iturburua",
- "announce.dismiss": "Ez erakutsi hau berriro",
- "blog.archive": "Artxiboa",
- "blog.categories": "Kategoriak",
- "blog.categories.in": "kategoria",
- "blog.continue": "Jarraitu irakurtzen",
- "blog.draft": "Zirriborroa",
- "blog.index": "Itzuli aurkibidera",
- "blog.meta": "Metadatuak",
- "blog.references": "Erlazionatutako estekak",
- "clipboard.copy": "Kopiatu arbelean",
- "clipboard.copied": "Arbelean kopiatuta",
- "consent.accept": "Onartu",
- "consent.manage": "Kudeatu ezarpenak",
- "consent.reject": "Ukatu",
- "footer": "Orri-oina",
- "footer.next": "Hurrengoa",
- "footer.previous": "Aurrekoa",
- "header": "Atalburua",
- "meta.comments": "Iruzkinak",
- "meta.source": "Iturburua",
- "nav": "Nabigazioa",
- "readtime.one": "Minutu batean irakurtzeko",
- "readtime.other": "# minututan irakurtzeko",
- "rss.created": "RSS jarioa",
- "rss.updated": "Eduki eguneratuen RSS jarioa",
- "search": "Bilatu",
- "search.placeholder": "Bilatu",
- "search.share": "Partekatu",
- "search.reset": "Garbitu",
- "search.result.initializer": "Bilaketa hasieratzen",
- "search.result.placeholder": "Idatzi bilatzen hasteko",
- "search.result.none": "Bat datorren dokumenturik ez",
- "search.result.one": "Bat datorren dokumentu bat",
- "search.result.other": "Bat datozen # dokumentu",
- "search.result.more.one": "Bat gehiago orri honetan",
- "search.result.more.other": "# gehiago orri honetan",
- "search.result.term.missing": "Falta da",
- "select.language": "Hautatu hizkuntza",
- "select.version": "Hautatu bertsioa",
- "source": "Joan biltegira",
- "source.file.contributors": "Kolaboratzaileak",
- "source.file.date.created": "Sortze data",
- "source.file.date.updated": "Azken eguneratzea",
- "tabs": "Fitxak",
- "toc": "Edukiak",
- "top": "Igo goraino"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/fa.html b/dev/src/material/templates/partials/languages/fa.html
deleted file mode 100644
index d61b273e..00000000
--- a/dev/src/material/templates/partials/languages/fa.html
+++ /dev/null
@@ -1,57 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "fa",
- "direction": "rtl",
- "action.edit": "این صفحه را ویرایش کنید",
- "action.skip": "پرش به محتویات",
- "action.view": "محتویات این صفحه را نشان بده",
- "announce.dismiss": "این را دیگر نشان نده",
- "blog.archive": "بایگانی",
- "blog.categories": "دسته‌بندی‌ها",
- "blog.categories.in": "در",
- "blog.continue": "ادامه به خواندن",
- "blog.draft": "پیش‌نویس",
- "blog.index": "برگشت به فهرست",
- "blog.meta": "فراداده",
- "blog.references": "پیوندهای مربوط",
- "clipboard.copy": "کپی کردن",
- "clipboard.copied": "کپی شد",
- "consent.accept": "تایید",
- "consent.manage": "مدیریت تنظیمات",
- "consent.reject": "رد کردن",
- "footer": "پاورقی",
- "footer.next": "بعدی",
- "footer.previous": "قبلی",
- "header": "سرتیتر",
- "meta.comments": "نظرات",
- "meta.source": "منبع",
- "nav": "هدایت",
- "readtime.one": "1 دقیقه زمان خواندن",
- "readtime.other": "# دقیقه زمان خواندن",
- "rss.created": "خوراک آراس‌اس",
- "rss.updated": "خوراک آراساس محتویات به‌روز شده",
- "search": "جستجو",
- "search.config.pipeline": " ",
- "search.placeholder": "جستجو",
- "search.share": "هم‌رسانی",
- "search.reset": "بازنشانی",
- "search.result.initializer": "راه‌اندازی جستجو",
- "search.result.placeholder": "برای شروع جستجو تایپ کنید",
- "search.result.none": "سندی یافت نشد",
- "search.result.one": "1 سند یافت شد",
- "search.result.other": "# سند یافت شد",
- "search.result.more.one": "1 مورد دیگر در این صفحه",
- "search.result.more.other": "# مورد دیگر در این صفحه",
- "search.result.term.missing": "موجود نیست",
- "select.language": "انتخاب زبان",
- "select.version": "انتخاب ویرایش",
- "source": "رفتن به مخزن",
- "source.file.contributors": "مشارکت کنندگان",
- "source.file.date.created": "ایجاد شده",
- "source.file.date.updated": "اخرین بروزرسانی",
- "tabs": "زبانه‌ها",
- "toc": "فهرست موضوعات",
- "top": "برگشت به بالا"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/fi.html b/dev/src/material/templates/partials/languages/fi.html
deleted file mode 100644
index d5fc895e..00000000
--- a/dev/src/material/templates/partials/languages/fi.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "fi",
- "action.edit": "Muokkaa tätä sivua",
- "action.skip": "Hyppää sisältöön",
- "clipboard.copy": "Kopioi leikepöydälle",
- "clipboard.copied": "Kopioitu leikepöydälle",
- "footer.next": "Seuraava",
- "footer.previous": "Edellinen",
- "meta.comments": "Kommentit",
- "meta.source": "Lähdekodi",
- "search.config.lang": "fi",
- "search.placeholder": "Hae",
- "search.result.placeholder": "Kirjoita aloittaaksesi haun",
- "search.result.none": "Ei täsmääviä dokumentteja",
- "search.result.one": "1 täsmäävä dokumentti",
- "search.result.other": "# täsmäävää dokumenttia",
- "source": "Mene repositoryyn",
- "source.file.date.created": "Luotu",
- "source.file.date.updated": "Viimeisin päivitys",
- "toc": "Sisällysluettelo"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/fr.html b/dev/src/material/templates/partials/languages/fr.html
deleted file mode 100644
index 6c762b53..00000000
--- a/dev/src/material/templates/partials/languages/fr.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "fr",
- "action.edit": "Editer cette page",
- "action.skip": "Aller au contenu",
- "action.view": "Consulter la source de cette page",
- "announce.dismiss": "Ne plus montrer cela",
- "blog.archive": "Archive",
- "blog.categories": "Catégories",
- "blog.categories.in": "dans",
- "blog.continue": "Continuer à lire",
- "blog.draft": "Brouillon",
- "blog.index": "Retourner à l'index",
- "blog.meta": "Metadonnées",
- "blog.references": "Liens connexes",
- "clipboard.copy": "Copier dans le presse-papier",
- "clipboard.copied": "Copié dans le presse-papier",
- "consent.accept": "Accepter",
- "consent.manage": "Paramétrer vos choix",
- "consent.reject": "Refuser",
- "footer": "Pied de page",
- "footer.next": "Suivant",
- "footer.previous": "Précédent",
- "header": "En-tête",
- "meta.comments": "Commentaires",
- "meta.source": "Source",
- "nav": "Navigation",
- "readtime.one": "1 min de lecture",
- "readtime.other": "# min de lecture",
- "rss.created": "Flux RSS",
- "rss.updated": "Flux RSS du contenu mis à jour",
- "search": "Recherche",
- "search.config.lang": "fr",
- "search.placeholder": "Rechercher",
- "search.share": "Partager",
- "search.reset": "Effacer",
- "search.result.initializer": "Initialisation de la recherche",
- "search.result.placeholder": "Taper pour démarrer la recherche",
- "search.result.none": "Aucun document trouvé",
- "search.result.one": "1 document trouvé",
- "search.result.other": "# documents trouvés",
- "search.result.more.one": "1 de plus sur cette page",
- "search.result.more.other": "# de plus sur cette page",
- "search.result.term.missing": "Non trouvé",
- "select.language": "Sélectionner la langue",
- "select.version": "Sélectionner la version",
- "source": "Aller au dépôt",
- "source.file.contributors": "Contributeurs",
- "source.file.date.created": "Créé",
- "source.file.date.updated": "Dernière mise à jour",
- "tabs": "Onglets",
- "toc": "Table des matières",
- "top": "Retour en haut de la page"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/gl.html b/dev/src/material/templates/partials/languages/gl.html
deleted file mode 100644
index c43caf1a..00000000
--- a/dev/src/material/templates/partials/languages/gl.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "gl",
- "action.edit": "Editar esta páxina",
- "action.skip": "Ir ao contido",
- "clipboard.copy": "Copiar no cortapapeis",
- "clipboard.copied": "Copiado no cortapapeis",
- "footer": "Pé",
- "footer.next": "Seguinte",
- "footer.previous": "Anterior",
- "header": "Cabeceira",
- "meta.comments": "Comentarios",
- "meta.source": "Fonte",
- "nav": "Navegación",
- "search.config.lang": "es",
- "search.placeholder": "Procura",
- "search.reset": "Limpar",
- "search.result.initializer": "Inicializando procura",
- "search.result.placeholder": "Insira un termo",
- "search.result.none": "Sen resultados",
- "search.result.one": "1 resultado atopado",
- "search.result.other": "# resultados atopados",
- "search.result.more.one": "1 máis nesta páxina",
- "search.result.more.other": "# máis nesta páxina",
- "search.result.term.missing": "Falta",
- "select.language": "Seleccionar idioma",
- "select.version": "Seleccionar version",
- "source": "Ir ao repositorio",
- "source.file.date.created": "Creada",
- "source.file.date.updated": "Última actualización",
- "tabs": "Pestanas",
- "toc": "Táboa de contidos",
- "top": "Volver ao principio"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/he.html b/dev/src/material/templates/partials/languages/he.html
deleted file mode 100644
index e25dc614..00000000
--- a/dev/src/material/templates/partials/languages/he.html
+++ /dev/null
@@ -1,57 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "he",
- "direction": "rtl",
- "action.edit": "עריכת הדף הזה",
- "action.skip": "לדלג לתוכן",
- "action.view": "צפה במקור של דף זה",
- "announce.dismiss": "לא להציג את זה שוב",
- "blog.archive": "ארכיון",
- "blog.categories": "קטגוריות",
- "blog.categories.in": "בתוך",
- "blog.continue": "המשך לקרוא",
- "blog.draft": "טיוטה",
- "blog.index": "חזרה לאינדקס",
- "blog.meta": "מטא-נתונים",
- "blog.references": "קישורים קשורים",
- "clipboard.copy": "העתקה ללוח",
- "clipboard.copied": "הועתק ללוח",
- "consent.accept": "לקבל",
- "consent.manage": "לנהל הגדרות",
- "consent.reject": "לדחות",
- "footer": "כותרת תחתונה",
- "footer.next": "הבא",
- "footer.previous": "הקודם",
- "header": "כותרת עליונה",
- "meta.comments": "הערות",
- "meta.source": "מקור",
- "nav": "ניווט",
- "readtime.one": "קריאה 1 דקות",
- "readtime.other": "# דקות קריאה",
- "rss.created": "RSS הזנת",
- "rss.updated": "הזנת RSS של תוכן מעודכן",
- "search": "חיפוש",
- "search.config.pipeline": " ",
- "search.placeholder": "חיפוש",
- "search.share": "שיתוף",
- "search.reset": "ניקוי",
- "search.result.initializer": "אתחול חיפוש",
- "search.result.placeholder": "יש להקליד כדי להתחיל לחפש",
- "search.result.none": "אין מסמכים תואמים",
- "search.result.one": "מסמך1 תואם",
- "search.result.other": "# מסמך תואם",
- "search.result.more.one": "עוד אחד בדף הזה",
- "search.result.more.other": "עוד # בדף הזה",
- "search.result.term.missing": "חסר",
- "select.language": "בחירת שפה",
- "select.version": "בחירת גרסה",
- "source": "לעבור אל המאגר",
- "source.file.contributors": "תורמים",
- "source.file.date.created": "נוצר",
- "source.file.date.updated": "עדכון אחרון",
- "tabs": "לשוניות",
- "toc": "תוכן העניינים",
- "top": "חזרה למעלה"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/hi.html b/dev/src/material/templates/partials/languages/hi.html
deleted file mode 100644
index 081a32f6..00000000
--- a/dev/src/material/templates/partials/languages/hi.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "hi",
- "action.edit": "इस पृष्ठ को संपादित करें",
- "action.skip": "विषय पर बढ़ें",
- "action.view": "इस पृष्ठ का सूत्र देखें",
- "announce.dismiss": "इसे पुनः न दिखायें",
- "blog.archive": "पुरालेख",
- "blog.categories": "वर्ग",
- "blog.categories.in": "में",
- "blog.continue": "पढ़ते रहिये",
- "blog.draft": "मसौदा",
- "blog.index": "सूचि को लौटें",
- "blog.meta": "मेटाडेटा",
- "blog.references": "सम्बंधित लिंक",
- "clipboard.copy": "क्लिपबोर्ड पर कॉपी करें",
- "clipboard.copied": "क्लिपबोर्ड पर कॉपी कर दिया गया",
- "consent.accept": "स्वीकार करें",
- "consent.manage": "सेटिंग्स मैनेज करें",
- "consent.reject": "अस्वीकार करें",
- "footer": "फुटर",
- "footer.next": "आगामी",
- "footer.previous": "पिछला",
- "header": "शीर्षक",
- "meta.comments": "टिप्पणियाँ",
- "meta.source": "स्रोत",
- "nav": "नैविगेशन",
- "readtime.one": "1 मिनट पढ़ने को",
- "readtime.other": "# मिनट पढ़ने को",
- "rss.created": "RSS फीड",
- "rss.updated": "नवीनतम विषयवस्तु का RSS feed",
- "search": "खोजें",
- "search.config.lang": "hi",
- "search.placeholder": "खोज",
- "search.share": "शेयर करें",
- "search.reset": "हटा दें",
- "search.result.initializer": "खोज शुरू करें",
- "search.result.placeholder": "खोज शुरू करने के लिए टाइप करें",
- "search.result.none": "कोई मिलान डॉक्यूमेंट नहीं",
- "search.result.one": "1 मिलान डॉक्यूमेंट",
- "search.result.other": "# मिलान डाक्यूमेंट्स",
- "search.result.more.one": "1 और इस पृष्ठ पर",
- "search.result.more.other": "# और इस पृष्ठ पर",
- "search.result.term.missing": "ग़ायब",
- "select.language": "भाषा चुनें",
- "select.version": "वर्शन चुनें",
- "source": "रिपॉजिटरी पर जाएं",
- "source.file.contributors": "योगदाता",
- "source.file.date.created": "बनाया था",
- "source.file.date.updated": "आखिरी अपडेट",
- "tabs": "टैब",
- "toc": "विषय - सूची",
- "top": "शीर्षभाग पर लौटें"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/hr.html b/dev/src/material/templates/partials/languages/hr.html
deleted file mode 100644
index e10df662..00000000
--- a/dev/src/material/templates/partials/languages/hr.html
+++ /dev/null
@@ -1,55 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "hr",
- "action.edit": "Uredi stranicu",
- "action.skip": "Preskoči na sadržaj",
- "action.view": "Pregledaj izvorni kod ove stranice",
- "announce.dismiss": "Ne prikazuj ovo opet",
- "blog.archive": "Arhiva",
- "blog.categories": "Kategorije",
- "blog.categories.in": "u",
- "blog.continue": "Nastavi čitati",
- "blog.draft": "Nacrt",
- "blog.index": "Natrag na indeks",
- "blog.meta": "Metapodaci",
- "blog.references": "Srodne poveznice",
- "clipboard.copy": "Kopiraj u međuspremnik",
- "clipboard.copied": "Kopirano u međuspremnik",
- "consent.accept": "Prihvati",
- "consent.manage": "Upravljaj postavkama",
- "consent.reject": "Odbij",
- "footer": "Podnožje",
- "footer.next": "Sljedeće",
- "footer.previous": "Prethodno",
- "header": "Zaglavlje",
- "meta.comments": "Komentari",
- "meta.source": "Izvor",
- "nav": "Navigacija",
- "readtime.one": "1 minuta čitanja",
- "readtime.other": "# minut(a/e) čitanja",
- "rss.created": "RSS izvor",
- "rss.updated": "RSS izvor osvježenog sadržaja",
- "search": "Pretraživanje",
- "search.placeholder": "Pretraži",
- "search.share": "Podijeli",
- "search.reset": "Očisti",
- "search.result.initializer": "Inicijaliziranje pretraživanja",
- "search.result.placeholder": "Unesite pojam pretraživanja",
- "search.result.none": "Ništa nije pronađeno",
- "search.result.one": "1 rezultat pretraživanja",
- "search.result.other": "# rezultat(a) pretraživanja",
- "search.result.more.one": "1 rezultat na ovoj stranici",
- "search.result.more.other": "# rezultat(a) na ovoj stranici",
- "search.result.term.missing": "Nedostaje",
- "select.language": "Odabir jezika",
- "select.version": "Odabir verzije",
- "source": "Idi u repozitorij",
- "source.file.contributors": "Suradnici",
- "source.file.date.created": "Stvaranje",
- "source.file.date.updated": "Posljednje ažuriranje",
- "tabs": "Kartice",
- "toc": "Sadržaj",
- "top": "Vrati se na vrh"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/hu.html b/dev/src/material/templates/partials/languages/hu.html
deleted file mode 100644
index 46bdec9a..00000000
--- a/dev/src/material/templates/partials/languages/hu.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "hu",
- "action.edit": "Oldal szerkesztése",
- "action.skip": "Kihagyás",
- "action.view": "Oldal forrásának megtekintése",
- "announce.dismiss": "Ne mutasd többet",
- "blog.archive": "Archívum",
- "blog.categories": "Kategóriák",
- "blog.categories.in": "Kategória:",
- "blog.continue": "Folytatás",
- "blog.draft": "Piszkozat",
- "blog.index": "Vissza a főoldalra",
- "blog.meta": "Metaadat",
- "blog.references": "Kapcsolódó linkek",
- "clipboard.copy": "Másolás vágólapra",
- "clipboard.copied": "Vágólapra másolva",
- "consent.accept": "Elfogadás",
- "consent.manage": "Beállítások",
- "consent.reject": "Visszautasítás",
- "footer": "Élőláb",
- "footer.next": "Következő",
- "footer.previous": "Előző",
- "header": "Élőfej",
- "meta.comments": "Hozzászólások",
- "meta.source": "Forrás",
- "nav": "Navigáció",
- "readtime.one": "1 percnyi",
- "readtime.other": "# percnyi",
- "rss.created": "RSS feed",
- "rss.updated": "Frissített tartalom RSS feedje",
- "search": "Keresés",
- "search.config.lang": "hu",
- "search.placeholder": "Keresés",
- "search.share": "Megosztás",
- "search.reset": "Törlés",
- "search.result.initializer": "Keresés inicializálása",
- "search.result.placeholder": "Kereséshez írj ide valamit",
- "search.result.none": "Nincs találat",
- "search.result.one": "1 egyező dokumentum",
- "search.result.other": "# egyező dokumentum",
- "search.result.more.one": "1 további találat az oldalon",
- "search.result.more.other": "# további találat az oldalon",
- "search.result.term.missing": "Üres",
- "select.language": "Nyelvváltás",
- "select.version": "Verzióváltás",
- "source": "Főoldalra ugrás",
- "source.file.contributors": "Szerzők",
- "source.file.date.created": "Létrehozva",
- "source.file.date.updated": "Utolsó frissítés",
- "tabs": "Lapok",
- "toc": "Tartalomjegyzék",
- "top": "Vissza a tetejére"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/hy.html b/dev/src/material/templates/partials/languages/hy.html
deleted file mode 100644
index 076fcb6c..00000000
--- a/dev/src/material/templates/partials/languages/hy.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "hy",
- "action.edit": "Խմբագրել այս էջը",
- "action.skip": "Անցնել պարունակությանը",
- "action.view": "Դիտել այս էջի սկզբնաղբյուրը",
- "announce.dismiss": "Այլևս չցուցադրել",
- "blog.archive": "Արխիվ",
- "blog.categories": "Կատեգորիաներ",
- "blog.categories.in": "in",
- "blog.continue": "Շարունակել կարդալ",
- "blog.draft": "Սևագիր",
- "blog.index": "Հետ դեպի ինդեքս",
- "blog.meta": "Մետատվյալներ",
- "blog.references": "Առնչվող հղումներ",
- "clipboard.copy": "Պատճենել",
- "clipboard.copied": "Պատճենված է",
- "consent.accept": "Ընդունել",
- "consent.manage": "Կառավարել կարգավորումները",
- "consent.reject": "Մերժել",
- "footer": "Էջատակ",
- "footer.next": "Հաջորդը",
- "footer.previous": "Նախորդը",
- "header": "Գլխագիր",
- "meta.comments": "Մեկնաբանությունները",
- "meta.source": "Աղբյուր",
- "nav": "Տեղորոշում",
- "readtime.one": "Ընթերցում՝ 1 րոպե",
- "readtime.other": "Ընթերցում՝ # րոպե",
- "rss.created": "RSS հոսք",
- "rss.updated": "Արդիացված բովանդակության RSS հոսք",
- "search": "Որոնում",
- "search.config.pipeline": " ",
- "search.placeholder": "Որոնում",
- "search.share": "Կիսվել",
- "search.reset": "Ջնջել",
- "search.result.initializer": "Որոնում",
- "search.result.placeholder": "Մուտքագրեք որոնելու համար",
- "search.result.none": "Արդյունքներ չկան",
- "search.result.one": "1 արդյունք",
- "search.result.other": "# արդյունք",
- "search.result.more.one": "ևս 1-ը այս էջում",
- "search.result.more.other": "ևս #-ը այս էջում",
- "search.result.term.missing": "Բացակայում է",
- "select.language": "Ընտրել լեզուն",
- "select.version": "Ընտրել տարբերակը",
- "source": "Դեպի պահոց",
- "source.file.contributors": "Հեղինակողներ",
- "source.file.date.created": "Ստեղծված է",
- "source.file.date.updated": "Վերջին թարմացումը",
- "tabs": "Ներդիրներ",
- "toc": "Բովանդակություն",
- "top": "Վերադառնալ սկիզբ"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/id.html b/dev/src/material/templates/partials/languages/id.html
deleted file mode 100644
index 876d894e..00000000
--- a/dev/src/material/templates/partials/languages/id.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "id",
- "action.edit": "Ubah halaman ini",
- "action.skip": "Lewati ke isi",
- "action.view": "Lihat sumber halaman ini",
- "announce.dismiss": "Jangan lihat ini lagi",
- "blog.archive": "Arsip",
- "blog.categories": "Kategori",
- "blog.categories.in": "dalam",
- "blog.continue": "Lanjut membaca",
- "blog.draft": "Draf",
- "blog.index": "Kembali ke indeks",
- "blog.meta": "Metadata",
- "blog.references": "Tautan yang berhubungan",
- "clipboard.copy": "Salin ke clipboard",
- "clipboard.copied": "Tersalin ke clipboard",
- "consent.accept": "Terima",
- "consent.manage": "Kelola pengaturan",
- "consent.reject": "Tolak",
- "footer": "Footer",
- "footer.next": "Selanjutnya",
- "footer.previous": "Sebelumnya",
- "header": "Header",
- "meta.comments": "Komentar",
- "meta.source": "Sumber",
- "nav": "Navigasi",
- "readtime.one": "1 menit baca",
- "readtime.other": "# menit baca",
- "rss.created": "Umpan RSS",
- "rss.updated": "Umpan RSS dari konten yang diperbarui",
- "search": "Cari",
- "search.config.pipeline": " ",
- "search.placeholder": "Cari",
- "search.share": "Bagikan",
- "search.reset": "Kosongkan",
- "search.result.initializer": "Mempersiapkan pencarian",
- "search.result.placeholder": "Ketik untuk mulai pencarian",
- "search.result.none": "Tidak ada dokumen yang sesuai",
- "search.result.one": "1 dokumen ditemukan",
- "search.result.other": "# dokumen ditemukan",
- "search.result.more.one": "1 lagi di halaman ini",
- "search.result.more.other": "# lagi di halaman ini",
- "search.result.term.missing": "Tidak ada",
- "select.language": "Pilih bahasa",
- "select.version": "Pilih versi",
- "source": "Ke repositori",
- "source.file.contributors": "Kontributor",
- "source.file.date.created": "Dibuat",
- "source.file.date.updated": "Pembaruan terakhir",
- "tabs": "Tab",
- "toc": "Daftar isi",
- "top": "Kembali ke atas"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/is.html b/dev/src/material/templates/partials/languages/is.html
deleted file mode 100644
index c353fe35..00000000
--- a/dev/src/material/templates/partials/languages/is.html
+++ /dev/null
@@ -1,55 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "is",
- "action.edit": "Breyta þessari síðu",
- "action.skip": "Hoppa yfir í efnið",
- "action.view": "Skoða frumgögn þessarar síðu",
- "announce.dismiss": "Ekki sýna þetta aftur",
- "blog.archive": "Safn",
- "blog.categories": "Flokkar",
- "blog.categories.in": "í",
- "blog.continue": "Lesa meira",
- "blog.draft": "Uppkast",
- "blog.index": "Til baka í yfirlit",
- "blog.meta": "Lýsigögn",
- "blog.references": "Þessu tengt",
- "clipboard.copy": "Afrita á klemmuspjald",
- "clipboard.copied": "Afritað á klemmuspjald",
- "consent.accept": "Samþykkja",
- "consent.manage": "Breyta stillingum",
- "consent.reject": "Hafna",
- "footer": "Síðufótur",
- "footer.next": "Næsta",
- "footer.previous": "Fyrri",
- "header": "Haus",
- "meta.comments": "Umræður",
- "meta.source": "Frumgögn",
- "nav": "Valmynd",
- "readtime.one": "1 mín lestur",
- "readtime.other": "# mín lestur",
- "rss.created": "RSS veita",
- "rss.updated": "RSS veita fyrir uppfært innihald",
- "search": "Leita",
- "search.placeholder": "Leita",
- "search.share": "Deila",
- "search.reset": "Hreinsa",
- "search.result.initializer": "Ræsi leitarvél",
- "search.result.placeholder": "Byrjaðu að skrifa til að hefja leit",
- "search.result.none": "Engar síður fundust",
- "search.result.one": "1 síða fannst",
- "search.result.other": "# síður fundust",
- "search.result.more.one": "1 til viðbótar á þessari síðu",
- "search.result.more.other": "# til viðbótar á þessari síðu",
- "search.result.term.missing": "Vantar",
- "select.language": "Veldu tungumál",
- "select.version": "Veldu útgáfu",
- "source": "Fara í gagnageymslu",
- "source.file.contributors": "Meðhöfundar",
- "source.file.date.created": "Búið til",
- "source.file.date.updated": "Síðast uppfært",
- "tabs": "Flipar",
- "toc": "Efnisyfirlit",
- "top": "Fara aftur efst"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/it.html b/dev/src/material/templates/partials/languages/it.html
deleted file mode 100644
index 0472dab0..00000000
--- a/dev/src/material/templates/partials/languages/it.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "it",
- "action.edit": "Modifica",
- "action.skip": "Vai al contenuto",
- "action.view": "Vedi il sorgente di questa pagina",
- "announce.dismiss": "Non mostrare più",
- "blog.archive": "Archivio",
- "blog.categories": "Categorie",
- "blog.categories.in": "in",
- "blog.continue": "Continua a leggere",
- "blog.draft": "Bozza",
- "blog.index": "Torna all'indice",
- "blog.meta": "Metadati",
- "blog.references": "Collegamenti",
- "clipboard.copy": "Copia",
- "clipboard.copied": "Copiato",
- "consent.accept": "Accetta",
- "consent.manage": "Gestisci le opzioni",
- "consent.reject": "Rifiuta",
- "footer": "Piede",
- "footer.next": "Successivo",
- "footer.previous": "Precedente",
- "header": "Intestazione",
- "meta.comments": "Commenti",
- "meta.source": "Sorgente",
- "nav": "Navigazione",
- "readtime.one": "1 minuto di lettura",
- "readtime.other": "# minuti di lettura",
- "rss.created": "Feed RSS",
- "rss.updated": "Contenuto aggiornato del feed RSS",
- "search": "Cerca",
- "search.config.lang": "it",
- "search.placeholder": "Cerca",
- "search.share": "Condividi",
- "search.reset": "Cancella",
- "search.result.initializer": "Inizializza la ricerca",
- "search.result.placeholder": "Scrivi per iniziare a cercare",
- "search.result.none": "Nessun documento trovato",
- "search.result.one": "1 documento trovato",
- "search.result.other": "# documenti trovati",
- "search.result.more.one": "1 altro in questa pagina",
- "search.result.more.other": "# altri in questa pagina",
- "search.result.term.missing": "Non presente",
- "select.language": "Seleziona la lingua",
- "select.version": "Seleziona la versione",
- "source": "Apri repository",
- "source.file.contributors": "Contributori",
- "source.file.date.created": "Creata",
- "source.file.date.updated": "Ultimo aggiornamento",
- "tabs": "Tabs",
- "toc": "Indice",
- "top": "Torna su"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ja.html b/dev/src/material/templates/partials/languages/ja.html
deleted file mode 100644
index f2368574..00000000
--- a/dev/src/material/templates/partials/languages/ja.html
+++ /dev/null
@@ -1,58 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ja",
- "action.edit": "編集",
- "action.skip": "コンテンツにスキップ",
- "action.view": "このページの原文を表示",
- "announce.dismiss": "非表示にします",
- "blog.archive": "過去の投稿",
- "blog.categories": "カテゴリー",
- "blog.categories.in": "",
- "blog.continue": "続きを読む",
- "blog.draft": "下書き",
- "blog.index": "ブログトップへ戻る",
- "blog.meta": "メタデータ",
- "blog.references": "関連リンク",
- "clipboard.copy": "クリップボードへコピー",
- "clipboard.copied": "コピーしました",
- "consent.accept": "同意",
- "consent.manage": "サイトの設定",
- "consent.reject": "拒否",
- "footer": "フッター",
- "footer.next": "次",
- "footer.previous": "前",
- "header": "ヘッダー",
- "meta.comments": "コメント",
- "meta.source": "ソース",
- "nav": "ナビゲーション",
- "readtime.one": "このページは約1分で読めます",
- "readtime.other": "このページは約#分で読めます",
- "rss.created": "新しいページのRSSフィード",
- "rss.updated": "更新されたページのRSSフィード",
- "search": "検索",
- "search.config.lang": "ja",
- "search.config.pipeline": "stemmer",
- "search.config.separator": "[\\s\\- 、。,.]+",
- "search.placeholder": "検索",
- "search.share": "共有",
- "search.reset": "クリア",
- "search.result.initializer": "検索を初期化",
- "search.result.placeholder": "検索キーワードを入力してください",
- "search.result.none": "何も見つかりませんでした",
- "search.result.one": "1件見つかりました",
- "search.result.other": "#件見つかりました",
- "search.result.more.one": "このページ内にもう1件見つかりました",
- "search.result.more.other": "このページ内にあと#件見つかりました",
- "search.result.term.missing": "検索に含まれない",
- "select.language": "言語切り替え",
- "select.version": "バージョン切り替え",
- "source": "リポジトリへ",
- "source.file.contributors": "投稿者",
- "source.file.date.created": "作成日",
- "source.file.date.updated": "最終更新日",
- "tabs": "タブ",
- "toc": "目次",
- "top": "ページトップへ戻る"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ka.html b/dev/src/material/templates/partials/languages/ka.html
deleted file mode 100644
index d8e0a731..00000000
--- a/dev/src/material/templates/partials/languages/ka.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ka",
- "action.edit": "გვერდის რედარქირება",
- "action.skip": "კონტენტზე გადასვლა",
- "clipboard.copy": "კოპირება",
- "clipboard.copied": "კოპირებულია",
- "footer.next": "შემდეგი",
- "footer.previous": "წინა",
- "meta.comments": "კომენტარები",
- "meta.source": "წყარო",
- "nav": "ნავიგაცია",
- "search.config.pipeline": " ",
- "search.placeholder": "ძებნა",
- "search.reset": "გასუფთავება",
- "search.result.placeholder": "ჩაწერე ძებნის დასაწყებად",
- "search.result.none": "დოკუმენტი ვერ მოიძებნა",
- "search.result.one": "მოიძებნა 1 დოკუმენტი",
- "search.result.other": "მოიძებნა # დოკუმენტი",
- "search.result.more.one": "კიდევ 1 ამ გვერდზე",
- "search.result.more.other": "კიდევ # ამ გვერდზე",
- "source": "საცავში გადასვლა",
- "source.file.date.created": "შეიქმნა",
- "source.file.date.updated": "ბოლო განახლება",
- "tabs": "ტაბები",
- "toc": "სარჩევი"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/kn.html b/dev/src/material/templates/partials/languages/kn.html
deleted file mode 100644
index 876a7e0e..00000000
--- a/dev/src/material/templates/partials/languages/kn.html
+++ /dev/null
@@ -1,55 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "kn",
- "action.edit": "ಈ ಪುಟವನ್ನು ತಿದ್ದುಪಡಿ ಮಾಡಿ",
- "action.skip": "ವಿಷಯಕ್ಕೆ ತೆರಳಿ",
- "action.view": "ಈ ಪುಟದ ಮೂಲವನ್ನು ವೀಕ್ಷಿಸಿ",
- "announce.dismiss": "ಇದನ್ನು ಮತ್ತೊಮ್ಮೆ ತೋರಿಸಬೇಡಿ",
- "blog.archive": "ಹಳೆಯ ಲೇಖನ",
- "blog.categories": "ವರ್ಗಗಳು",
- "blog.categories.in": "ರಲ್ಲಿ",
- "blog.continue": "ಓದು ಮುಂದುವರೆಸಿ",
- "blog.draft": "ಆರಂಭಿಕ ಬರವಣಿಗೆ",
- "blog.index": "ಸೂಚ್ಯಂಕಕ್ಕೆ ಹಿಂತಿರುಗಿ",
- "blog.meta": "ಮಾಹಿತಿಯ ಬಗ್ಗೆ ಮಾಹಿತಿ",
- "blog.references": "ಸಂಬಂಧಿತ ಉಲ್ಲೇಖಗಳು",
- "clipboard.copy": "ಇದನ್ನು ನಕಲಿಸಿ",
- "clipboard.copied": "ಇದನ್ನು ನಕಲು ಮಾಡಿದೆ",
- "consent.accept": "ನಾನು ಇದನ್ನು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೇನೆ",
- "consent.manage": "ಸಂರಚನೆಯನ್ನು ನಿರ್ವಹಿಸಿ",
- "consent.reject": "ನಾನು ಇದನ್ನು ತಿರಸ್ಕರಿಸುತ್ತೇನೆ",
- "footer": "ಅಡಿಟಿಪ್ಪಣಿ",
- "footer.next": "ಮುಂದಿನ ಸಂಚಿಕೆ",
- "footer.previous": "ಹಿಂದಿನ ಸಂಚಿಕೆ",
- "header": "ಮೇಲ್ಟಿಪ್ಪಣಿ",
- "meta.comments": "ಪ್ರತಿಕ್ರಿಯೆಗಳು",
- "meta.source": "ಮೂಲ",
- "nav": "ಸಂಚರಣೆ",
- "readtime.one": "ಓದಲು ೧ ನಿಮಿಷ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ",
- "readtime.other": "ಓದಲು # ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ",
- "rss.created": "ಆರ್ಎಸ್ಎಸ್ ಸೇವೆ",
- "rss.updated": "ಆರ್ಎಸ್ಎಸ್ ಸೇವೆಯಿಂದ ಇತ್ತೀಚಿನ ನವೀಕರಣ",
- "search": "ಹುಡುಕಿ",
- "search.placeholder": "ಹುಡುಕಿ",
- "search.share": "ಹಂಚಿಕೊಳ್ಳಿ",
- "search.reset": "ಅಳಿಸು",
- "search.result.initializer": "ಹುಡುಕಾಟವನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ",
- "search.result.placeholder": "ಬರೆಯುವ ಮೂಲಕ ಹುಡುಕಲು ಪ್ರಾರಂಭಿಸಿ",
- "search.result.none": "ಹೊಂದಾಣಿಕೆಯಾಗುವ ದಾಖಲೆಗಳಿಲ್ಲ",
- "search.result.one": "೧ ಹೊಂದಾಣಿಕೆಯ ದಾಖಲೆಯಿದೆ",
- "search.result.other": "# ಹೊಂದಾಣಿಕೆಯ ದಾಖಲೆಗಳಿವೆ",
- "search.result.more.one": "ಈ ಪುಟದಲ್ಲಿ ಇನ್ನೂ ಒಂದು ಕಂಡುಬಂದಿದೆ",
- "search.result.more.other": "ಈ ಪುಟದಲ್ಲಿ ಇನ್ನೂ # ಇವೆ",
- "search.result.term.missing": "ಕಾಣೆಯಾಗಿದೆ",
- "select.language": "ಭಾಷೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ",
- "select.version": "ಆವೃತ್ತಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ",
- "source": "ಭಂಡಾರಕ್ಕೆ ಹೋಗಿ",
- "source.file.contributors": "ಕೊಡುಗೆದಾರರು",
- "source.file.date.created": "ರಚಿಸಿದ ದಿನಾಂಕ",
- "source.file.date.updated": "ಕೊನೆಯ ನವೀಕರಣ ದಿನಾಂಕ",
- "tabs": "ವಿವಿಧ ಕಿಟಕಿಗಳು",
- "toc": "ವಿಷಯಗಳ ಪಟ್ಟಿ",
- "top": "ಮೇಲಕ್ಕೆ ಹಿಂತಿರುಗಿ"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ko.html b/dev/src/material/templates/partials/languages/ko.html
deleted file mode 100644
index 06e973f7..00000000
--- a/dev/src/material/templates/partials/languages/ko.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ko",
- "action.edit": "이 페이지를 편집",
- "action.skip": "콘텐츠로 이동",
- "action.view": "페이지소스 보기",
- "announce.dismiss": "다시 안보기",
- "blog.archive": "아카이브",
- "blog.categories": "카테고리",
- "blog.categories.in": "카테고리",
- "blog.continue": "계속 읽기",
- "blog.draft": "임시 저장",
- "blog.index": "Index로 돌아가기",
- "blog.meta": "메타데이터",
- "blog.references": "관련 링크",
- "clipboard.copy": "클립보드로 복사",
- "clipboard.copied": "클립보드에 복사됨",
- "consent.accept": "동의 허락",
- "consent.manage": "동의 허락 관리",
- "consent.reject": "동의 거부",
- "footer": "하단/푸터",
- "footer.next": "다음",
- "footer.previous": "이전",
- "header": "상단/헤더",
- "meta.comments": "댓글",
- "meta.source": "출처",
- "nav": "네비게이션",
- "readtime.one": "읽는시간 1분",
- "readtime.other": "읽는시간 #분",
- "rss.created": "RSS 피드 생성완료",
- "rss.updated": "RSS 피드 업데이트완료",
- "search": "검색",
- "search.config.pipeline": " ",
- "search.placeholder": "검색",
- "search.share": "공유",
- "search.reset": "지우기",
- "search.result.initializer": "검색 초기화",
- "search.result.placeholder": "검색어를 입력하세요",
- "search.result.none": "검색어와 일치하는 문서가 없습니다",
- "search.result.one": "1개의 일치하는 문서",
- "search.result.other": "#개의 일치하는 문서",
- "search.result.more.one": "이 문서에서 1개의 검색 결과 더 보기",
- "search.result.more.other": "이 문서에서 #개의 검색 결과 더 보기",
- "search.result.term.missing": "포함되지 않은 검색어",
- "select.language": "언어설정",
- "select.version": "버전 선택",
- "source": "저장소로 이동",
- "source.file.contributors": "참여자들",
- "source.file.date.created": "작성일",
- "source.file.date.updated": "마지막 업데이트",
- "tabs": "탭",
- "toc": "목차",
- "top": "맨위로"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ku-IQ.html b/dev/src/material/templates/partials/languages/ku-IQ.html
deleted file mode 100644
index a1ebbcd8..00000000
--- a/dev/src/material/templates/partials/languages/ku-IQ.html
+++ /dev/null
@@ -1,44 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ku",
- "direction": "rtl",
- "action.edit": "دەستکاری ئەم پەڕە بکە",
- "action.skip": "ئەم ناوەڕۆکە بپەڕێنە",
- "action.view": "سەرچاوەی ئەم لاپەڕەیە نیشان بدە",
- "announce.dismiss": "دووبارە ئەمە پیشان مەدە",
- "clipboard.copy": "لەبەرگتنەوە بۆ کلیپبۆرد",
- "clipboard.copied": "لەبەرگیرایەوە بۆ کلیپ بۆرد",
- "consent.accept": "ڕازیبوون",
- "consent.manage": "بەڕیوەبردنی ڕیکخستنەکان",
- "consent.reject": "ڕەتکردنەوە",
- "footer": "ژێرپەڕە",
- "footer.next": "دواتر",
- "footer.previous": "پێشتر",
- "header": "ناونیشانی بەڕه",
- "meta.comments": "لێدوانەکان",
- "meta.source": "سەرجاوە",
- "nav": "ڕێنیشاندەر",
- "search": "گەڕان",
- "search.config.pipeline": " ",
- "search.placeholder": "گەڕان",
- "search.share": "گەڕان",
- "search.reset": "سڕینەوە",
- "search.result.initializer": "ئامادەکردنی گەڕان",
- "search.result.placeholder": "بنووسە بۆ دەستپێکردن بە گەڕان",
- "search.result.none": "هیچ بەڵگەنامەیەکی هاوتا نیە",
- "search.result.one": "١ بەڵگەنامەی هاوتا",
- "search.result.other": "بەڵگەنامەی هاوتا #",
- "search.result.more.one": "١ دانەی تر لەسەر ئەم پەڕەیە",
- "search.result.more.other": "دانەی تر لەسەر ئەم پەڕەیە #",
- "search.result.term.missing": "ونبوو",
- "select.language": "زمان دیاریبکە",
- "select.version": "وەشان دیاریبکە",
- "source": "بڕۆ بۆ کۆگا",
- "source.file.date.created": "دروسکت کرا",
- "source.file.date.updated": "دوایین نوێکردنەوە",
- "tabs": "تابەکان",
- "toc": "خشتەی ناوەڕۆکەکان",
- "top": "گەڕانەوە بۆ سەرەوە"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/lb.html b/dev/src/material/templates/partials/languages/lb.html
deleted file mode 100644
index 75beab62..00000000
--- a/dev/src/material/templates/partials/languages/lb.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "lb",
- "direction": "ltr",
- "action.edit": "D'Säit beaarbechten",
- "action.skip": "Zum Inhalt iwwersprangen",
- "action.view": "Quellcode uweisen",
- "announce.dismiss": "Net erëm uweisen",
- "blog.archive": "Archiv",
- "blog.categories": "Kategorien",
- "blog.categories.in": "an",
- "blog.continue": "Weider liesen",
- "blog.draft": "Skizz",
- "blog.index": "Zeréck zum Index",
- "blog.meta": "Metadaten",
- "blog.references": "Änlech Links",
- "clipboard.copy": "Kopéieren",
- "clipboard.copied": "Kopéiert",
- "consent.accept": "Accept",
- "consent.manage": "Astellungen beaarbechten",
- "consent.reject": "Ofleenen",
- "footer": "Footer",
- "footer.next": "Weider",
- "footer.previous": "Zeréck",
- "header": "Header",
- "meta.comments": "Kommentaren",
- "meta.source": "Quell",
- "nav": "Navigatioun",
- "readtime.one": "1 min Liesedauer",
- "readtime.other": "# min Liesedauer",
- "rss.created": "RSS feed",
- "rss.updated": "RSS feed vun aktualiséiertem Inhalt",
- "search": "Sichen",
- "search.placeholder": "Sichen",
- "search.share": "Deelen",
- "search.reset": "Läschen",
- "search.result.initializer": "D'Sich gëtt initialiséiert",
- "search.result.placeholder": "Schreif fir eppes ze sichen",
- "search.result.none": "Keng zoutreffend Dokumenter",
- "search.result.one": "1 zoutreffend Dokument",
- "search.result.other": "# zoutreffend Dokumenter",
- "search.result.more.one": "1 méi op dëser Säit",
- "search.result.more.other": "# méi op dëser Säit",
- "search.result.term.missing": "Feelend",
- "select.language": "Sprooch auswielen",
- "select.version": "Versioun auswielen",
- "source": "Op den Repository goen",
- "source.file.contributors": "Matwirkender",
- "source.file.date.created": "Erstallt",
- "source.file.date.updated": "Läscht update",
- "tabs": "Tabs",
- "toc": "Inhaltsverzeichnis",
- "top": "Zeréck zum Ufank"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/lt.html b/dev/src/material/templates/partials/languages/lt.html
deleted file mode 100644
index e6f72898..00000000
--- a/dev/src/material/templates/partials/languages/lt.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "lt",
- "action.edit": "Redaguoti šį puslapį",
- "action.skip": "Pereiti prie turinio",
- "action.view": "Žiūrėti puslapio šaltinius",
- "announce.dismiss": "Daugiau neberodyti",
- "blog.archive": "Archyvas",
- "blog.categories": "Kategorijos",
- "blog.categories.in": "į",
- "blog.continue": "Skaityti toliau",
- "blog.draft": "Ruošinys",
- "blog.index": "Grįžti į indeksą",
- "blog.meta": "Meta duomenys",
- "blog.references": "Susieja saitai",
- "clipboard.copy": "Kopijuoti į iškarpinę",
- "clipboard.copied": "Nukopijuota į iškarpinę",
- "consent.accept": "Sutikti",
- "consent.manage": "Redaguoti nustatymus",
- "consent.reject": "Atmesti",
- "footer": "Poraštė",
- "footer.next": "Sekantis",
- "footer.previous": "Ankstesnis",
- "header": "Antraštė",
- "meta.comments": "Komentarai",
- "meta.source": "Išeitinis kodas",
- "nav": "Navigacija",
- "readtime.one": "1 min skaitymo",
- "readtime.other": "# min skaitymo",
- "rss.created": "RSS šaltinis",
- "rss.updated": "RSS šaltinis atnaujinimams",
- "search": "Paieška",
- "search.config.pipeline": " ",
- "search.placeholder": "Paieška",
- "search.share": "Dalintis",
- "search.reset": "Išvalyti",
- "search.result.initializer": "Paieškos inicijavimas",
- "search.result.placeholder": "Įveskite norėdami pradėti paiešką",
- "search.result.none": "Atitinkančių dokumentų nerasta",
- "search.result.one": "1 atitinkantis dokumentas",
- "search.result.other": "# atitinkantys dokumentai",
- "search.result.more.one": "Dar 1 šiame puslapyje",
- "search.result.more.other": "Dar # šiame puslapyje",
- "search.result.term.missing": "Nerasta",
- "select.language": "Pasirinkti kalbą",
- "select.version": "Pasrinkti versiją",
- "source": "Eiti į saugyklą",
- "source.file.contributors": "Dalininkai",
- "source.file.date.created": "Sukurta",
- "source.file.date.updated": "Paskutinis atnaujinimas",
- "tabs": "Skirtukai",
- "toc": "Turinys",
- "top": "Grįžti į viršų"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/lv.html b/dev/src/material/templates/partials/languages/lv.html
deleted file mode 100644
index 15719a1f..00000000
--- a/dev/src/material/templates/partials/languages/lv.html
+++ /dev/null
@@ -1,35 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "lv",
- "action.edit": "Rediģēt šo lapu",
- "action.skip": "Pāriet uz saturu",
- "clipboard.copy": "Kopēt starpliktuvē",
- "clipboard.copied": "Kopēts starpliktuvē",
- "footer": "Kājene",
- "footer.next": "Nākamais",
- "footer.previous": "Iepriekšējais",
- "header": "Galvene",
- "meta.comments": "Komentārs",
- "meta.source": "Avots",
- "nav": "Navigācija",
- "search.placeholder": "Meklēt",
- "search.reset": "Notīrīt",
- "search.result.initializer": "Notiek meklēšanas inicializācija",
- "search.result.placeholder": "Ierakstiet, lai sāktu meklēšanu",
- "search.result.none": "Nav atbilstošu dokumentu",
- "search.result.one": "1 atbilstošs dokuments",
- "search.result.other": "# atbilstoši dokumenti ",
- "search.result.more.one": "1 šajā lapā",
- "search.result.more.other": "# un vairāk šajā lapā",
- "search.result.term.missing": "Trūkstošs",
- "select.language": "Izvēlies valodu",
- "select.version": "Izvēlies versiju",
- "source": "Doties uz repozitoriju",
- "source.file.date.created": "Izveidots",
- "source.file.date.updated": "Pēdējoreiz atjaunots",
- "tabs": "Cilnes",
- "toc": "Satura rādītājs",
- "top": "Atpakaļ uz augšu"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/mk.html b/dev/src/material/templates/partials/languages/mk.html
deleted file mode 100644
index 3ba92a5e..00000000
--- a/dev/src/material/templates/partials/languages/mk.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "mk",
- "action.edit": "Уредете ја оваа страница",
- "action.skip": "Прескокнете до содржината",
- "clipboard.copy": "Копирај во таблата",
- "clipboard.copied": "Копирано",
- "footer": "Подножје",
- "footer.next": "Следно",
- "footer.previous": "Претходно",
- "header": "Заглавје",
- "meta.comments": "Коментари",
- "meta.source": "Извор",
- "nav": "Наслов за навигација",
- "search.config.lang": "ru",
- "search.placeholder": "Пребарување",
- "search.reset": "Чисти",
- "search.result.initializer": "Иницијализирање на пребарувањето",
- "search.result.placeholder": "Напишете за да започнете со пребарување",
- "search.result.none": "Нема соодветни документи",
- "search.result.one": "1 документ што се совпаѓа",
- "search.result.other": "# соодветни документи",
- "search.result.more.one": "Уште 1 на оваа страница",
- "search.result.more.other": "Уште # на оваа страница",
- "search.result.term.missing": "Недостасува",
- "select.language": "Изберете јазик",
- "select.version": "Изберете верзија",
- "source": "Одете до складиштето",
- "source.file.date.created": "Создаден",
- "source.file.date.updated": "Последно ажурирање",
- "tabs": "Јазичиња",
- "toc": "Содржина",
- "top": "Вратете се на почетокот"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/mn.html b/dev/src/material/templates/partials/languages/mn.html
deleted file mode 100644
index 9d2c4791..00000000
--- a/dev/src/material/templates/partials/languages/mn.html
+++ /dev/null
@@ -1,31 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "mn",
- "action.edit": "Хуудас засварлах",
- "action.skip": "Агуулгыг алгасах",
- "clipboard.copy": "Хуулах",
- "clipboard.copied": "Санах ойд хуулах",
- "footer": "Хөл",
- "footer.next": "Дараах",
- "footer.previous": "Өмнөх",
- "header": "Толгой",
- "meta.comments": "Сэтгэгдэл",
- "meta.source": "Эх үүсвэр",
- "nav": "Чиглүүлэгч",
- "search.config.lang": "ru",
- "search.placeholder": "Хайлт",
- "search.reset": "Цэвэрлэх",
- "search.result.placeholder": "Хайлтын үгээ бичнэ үү",
- "search.result.none": "Таарц илэрсэнгүй",
- "search.result.one": "1 таарц илэрлээ",
- "search.result.other": "# Тохирох баримт бичиг",
- "search.result.more.one": "1 илүү хуудас байна",
- "search.result.more.other": "# илүү хуудас байна",
- "source": "Хадгалах сан руу очих",
- "source.file.date.created": "Үүсгэсэн",
- "source.file.date.updated": "Сүүлийн шинэчлэлт",
- "tabs": "Табууд",
- "toc": "Агуулга"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ms.html b/dev/src/material/templates/partials/languages/ms.html
deleted file mode 100644
index 459dfd3e..00000000
--- a/dev/src/material/templates/partials/languages/ms.html
+++ /dev/null
@@ -1,35 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ms",
- "action.edit": "Edit halaman ini",
- "action.skip": "Langkau tajuk talian",
- "clipboard.copy": "Salin ke papan keratan",
- "clipboard.copied": "Disalin ke papan keratan",
- "footer": "Pengaki",
- "footer.next" : "Seterusnya",
- "footer.previous": "Sebelumnya",
- "header": "Pengepala",
- "meta.comments": "Komen",
- "meta.source": "Sumber",
- "nav": "Navigasi",
- "search.placeholder": "Cari",
- "search.reset": "Padam",
- "search.result.initializer": "Siap carian",
- "search.result.placeholder": "Taip untuk mula mencari",
- "search.result.none": "Tiada dokumen yang sepadan",
- "search.result.one": "1 dokumen yang sepadan",
- "search.result.other": "# dokumen yang sepadan",
- "search.result.more.one": "1 lagi di halaman ini",
- "search.result.more.other": "# lagi di halaman ini",
- "search.result.term.missing": "Hilang",
- "select.language": "Pilih bahasa",
- "select.version": "Pilih versi",
- "source": "tajuk talian asal",
- "source.file.date.created": "tarikh fil asal dicipta",
- "source.file.date.updated": "Tarikh fil dikemas kini",
- "tabs": "Tab",
- "toc": "Jadual kandungan",
- "top": "Kembali ke atas"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/my.html b/dev/src/material/templates/partials/languages/my.html
deleted file mode 100644
index 09f849c9..00000000
--- a/dev/src/material/templates/partials/languages/my.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "my",
- "action.edit": "ဤ စာမျက်နှာကို ပြင်ရန်",
- "action.skip": "မာတိကာ သို့ သွားရန်",
- "clipboard.copy": "ကလစ်ဘုတ် သို့ ကူးယူရန်",
- "clipboard.copied": "ကလစ်ဘုတ် သို့ ကူယူပြီး",
- "footer": "အောက်ခြေ",
- "footer.next": "ရှေ့သို့",
- "footer.previous": "နောက်သို့",
- "header": "ခေါင်းပိုင်း",
- "meta.comments": "မှတ်ချက်များ",
- "meta.source": "ရင်းမြစ်",
- "nav": "လမ်းညွှန်",
- "search.config.pipeline": " ",
- "search.placeholder": "ရှာရန်",
- "search.reset": "ရှင်းလင်း",
- "search.result.placeholder": "ရှာဖွေခြင်းစရန် စာရိုက်ပါ",
- "search.result.none": "တူညီသော စာရွက်စာတမ်းများ မရှိပါ",
- "search.result.one": "စာရွက်စာတမ်း ၁ ခု တူညီသည်",
- "search.result.other": "စာရွက်စာတမ်း # ခု တူညီသည်",
- "source": "repository သို့ သွားရန်",
- "source.file.date.created": "နေပြည်တော်",
- "source.file.date.updated": "နောက်ဆုံး ထုတ်ပြန်ချက်",
- "tabs": "တက်များ",
- "toc": "ပါဝင်အကြောင်းအရာများ"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/nb.html b/dev/src/material/templates/partials/languages/nb.html
deleted file mode 100644
index 732c8814..00000000
--- a/dev/src/material/templates/partials/languages/nb.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "nb",
- "action.edit": "Rediger denne siden",
- "action.skip": "Gå til innhold",
- "action.view": "Vis kildekoden til denne siden",
- "announce.dismiss": "Ikke vis dette igjen",
- "blog.archive": "Arkiv",
- "blog.categories": "Kategorier",
- "blog.categories.in": "i",
- "blog.continue": "Fortsett å lese",
- "blog.draft": "Kladd",
- "blog.index": "Tilbake til oversikt",
- "blog.meta": "Metadata",
- "blog.references": "Relaterte lenker",
- "clipboard.copy": "Kopier til utklippstavlen",
- "clipboard.copied": "Kopiert til utklippstavlen",
- "consent.accept": "Akseptert",
- "consent.manage": "Innstillinger",
- "consent.reject": "Reject",
- "footer": "Footer",
- "footer.next": "Neste",
- "footer.previous": "Forrige",
- "header": "Header",
- "meta.comments": "Kommentarer",
- "meta.source": "Kilde",
- "nav": "Navigasjon",
- "readtime.one": "lesteid: 1 min",
- "readtime.other": "lesetid: # min",
- "rss.created": "RSS feed",
- "rss.updated": "Oppdatert RSS feed",
- "search": "Søk",
- "search.config.lang": "no",
- "search.placeholder": "Søk",
- "search.share": "Del",
- "search.reset": "Nullstill",
- "search.result.initializer": "Starter søk",
- "search.result.placeholder": "Skriv søkeord",
- "search.result.none": "Ingen treff",
- "search.result.one": "1 treff",
- "search.result.other": "# treff",
- "search.result.more.one": "1 til på denne siden",
- "search.result.more.other": "# flere på denne siden",
- "search.result.term.missing": "Mangler",
- "select.language": "Velg språk",
- "select.version": "Velg versjon",
- "source": "Gå til kilde",
- "source.file.contributors": "Bidragsytere",
- "source.file.date.created": "Opprettet",
- "source.file.date.updated": "Sist oppdatert",
- "tabs": "Faner",
- "toc": "Innholdsliste",
- "top": "Tilbake til toppen"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/nl.html b/dev/src/material/templates/partials/languages/nl.html
deleted file mode 100644
index 86028a4c..00000000
--- a/dev/src/material/templates/partials/languages/nl.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "nl",
- "action.edit": "Wijzig deze pagina",
- "action.skip": "Ga naar inhoud",
- "action.view": "Bron van deze pagina bekijken",
- "announce.dismiss": "Niet meer laten zien",
- "blog.archive": "Archief",
- "blog.categories": "Categorieën",
- "blog.categories.in": "in",
- "blog.continue": "Doorgaan met lezen",
- "blog.draft": "Concept",
- "blog.index": "Terug naar de inhoudsopgave",
- "blog.meta": "Metadata",
- "blog.references": "Gerelateerde links",
- "clipboard.copy": "Kopiëren naar klembord",
- "clipboard.copied": "Gekopieerd naar klembord",
- "consent.accept": "Accepteren",
- "consent.manage": "Instellingen",
- "consent.reject": "Afwijzen",
- "footer": "Footer",
- "footer.next": "Volgende",
- "footer.previous": "Vorige",
- "header": "Header",
- "meta.comments": "Reacties",
- "meta.source": "Bron",
- "nav": "Navigatie",
- "readtime.one": "1 min leestijd",
- "readtime.other": "# min leestijd",
- "rss.created": "RSS feed",
- "rss.updated": "RSS feed met geüpdatet inhoud",
- "search": "Zoeken",
- "search.config.lang": "nl",
- "search.placeholder": "Zoeken",
- "search.share": "Delen",
- "search.reset": "Leegmaken",
- "search.result.initializer": "Zoeken initialiseren",
- "search.result.placeholder": "Typ om te beginnen met zoeken",
- "search.result.none": "Geen overeenkomende documenten",
- "search.result.one": "1 overeenkomende document",
- "search.result.other": "# overeenkomende documenten",
- "search.result.more.one": "1 extra overeenkomst op deze pagina",
- "search.result.more.other": "# extra overeenkomsten op deze pagina",
- "search.result.term.missing": "Ontbreekt",
- "select.language": "Selecteer taal",
- "select.version": "Selecteer versie",
- "source": "Ga naar repository",
- "source.file.contributors": "Bijdragers",
- "source.file.date.created": "Gecreëerd",
- "source.file.date.updated": "Laatst geüpdatet",
- "tabs": "Tabs",
- "toc": "Inhoudsopgave",
- "top": "Terug naar boven"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/nn.html b/dev/src/material/templates/partials/languages/nn.html
deleted file mode 100644
index 7ebd8793..00000000
--- a/dev/src/material/templates/partials/languages/nn.html
+++ /dev/null
@@ -1,42 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "nn",
- "action.edit": "Rediger denne sida",
- "action.skip": "Gå til innhald",
- "announce.dismiss": "Ikkje vis dette att",
- "clipboard.copy": "Kopier til utklippstavla",
- "clipboard.copied": "Kopiert til utklippstavla",
- "consent.accept": "Akseptert",
- "consent.manage": "Innstillinger",
- "consent.reject": "Reject",
- "footer": "Footer",
- "footer.next": "Neste",
- "footer.previous": "Førre",
- "header": "Header",
- "meta.comments": "Kommentarar",
- "meta.source": "Kjelde",
- "nav": "Navigasjon",
- "search": "Søk",
- "search.config.lang": "no",
- "search.placeholder": "Søk",
- "search.share": "Del",
- "search.reset": "Nullstill",
- "search.result.initializer": "Startar søk",
- "search.result.placeholder": "Skriv søkeord",
- "search.result.none": "Ingen treff",
- "search.result.one": "1 treff",
- "search.result.other": "# treff",
- "search.result.more.one": "1 til på denne sida",
- "search.result.more.other": "# fleire på denne sida",
- "search.result.term.missing": "Manglar",
- "select.language": "Vel språk",
- "select.version": "Vel versjon",
- "source": "Gå til kjelde",
- "source.file.date.created": "Oppretta",
- "source.file.date.updated": "Sist oppdatert",
- "tabs": "Faner",
- "toc": "Innhaldsliste",
- "top": "Tilbake til toppen"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/pl.html b/dev/src/material/templates/partials/languages/pl.html
deleted file mode 100644
index 826a8c60..00000000
--- a/dev/src/material/templates/partials/languages/pl.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "pl",
- "action.edit": "Edytuj tę stronę",
- "action.skip": "Przejdź do treści",
- "action.view": "Zobacz kod źródłowy tej strony",
- "announce.dismiss": "Nie pokazuj tego ponownie",
- "blog.archive": "Archiwum",
- "blog.categories": "Kategorie",
- "blog.categories.in": "",
- "blog.continue": "Czytaj dalej",
- "blog.draft": "Wersja robocza",
- "blog.index": "Powrót do indeksu",
- "blog.meta": "Metadane",
- "blog.references": "Powiązane łącza",
- "clipboard.copy": "Kopiuj do schowka",
- "clipboard.copied": "Skopiowano do schowka",
- "consent.accept": "Akceptuj",
- "consent.manage": "Zarządzaj ustawieniami",
- "consent.reject": "Odrzuć",
- "footer": "Stopka",
- "footer.next": "Następna strona",
- "footer.previous": "Poprzednia strona",
- "header": "Nagłówek",
- "meta.comments": "Komentarze",
- "meta.source": "Kod źródłowy",
- "nav": "Nawigacja",
- "readtime.one": "Czas czytania: 1 min",
- "readtime.other": "Czas czytania: # min",
- "rss.created": "Kanał RSS",
- "rss.updated": "Kanał RSS zaktualizowanych treści",
- "search": "Szukaj",
- "search.config.pipeline": " ",
- "search.placeholder": "Szukaj",
- "search.share": "Udostępnij",
- "search.reset": "Wyczyść",
- "search.result.initializer": "Inicjowanie wyszukiwania",
- "search.result.placeholder": "Zacznij pisać, aby szukać",
- "search.result.none": "Brak wyników wyszukiwania",
- "search.result.one": "Wyniki wyszukiwania: 1",
- "search.result.other": "Wyniki wyszukiwania: #",
- "search.result.more.one": "1 więcej na tej stronie",
- "search.result.more.other": "# więcej na tej stronie",
- "search.result.term.missing": "Brak",
- "select.language": "Wybierz język",
- "select.version": "Wybierz wersję",
- "source": "Przejdź do repozytorium",
- "source.file.contributors": "Kontrybutorzy",
- "source.file.date.created": "Utworzony",
- "source.file.date.updated": "Ostatnia aktualizacja",
- "tabs": "Zakładki",
- "toc": "Spis treści",
- "top": "Powrót do góry"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/pt-BR.html b/dev/src/material/templates/partials/languages/pt-BR.html
deleted file mode 100644
index de1b1f23..00000000
--- a/dev/src/material/templates/partials/languages/pt-BR.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "pt",
- "action.edit": "Editar esta página",
- "action.skip": "Pular para conteúdo",
- "action.view": "Exibir fonte desta página",
- "announce.dismiss": "Não mostrar isso novamente",
- "blog.archive": "Arquivo",
- "blog.categories": "Categorias",
- "blog.categories.in": "em",
- "blog.continue": "Continuar leitura",
- "blog.draft": "Rascunho",
- "blog.index": "Voltar ao índice",
- "blog.meta": "Metadados",
- "blog.references": "Links relacionados",
- "clipboard.copy": "Copiar para área de transferência",
- "clipboard.copied": "Copiado para área de transferência",
- "consent.accept": "Aceitar",
- "consent.manage": "Gerenciar configurações",
- "consent.reject": "Rejeitar",
- "footer": "Rodapé",
- "footer.next": "Próximo",
- "footer.previous": "Anterior",
- "header": "Cabeçalho",
- "meta.comments": "Comentários",
- "meta.source": "Origem",
- "nav": "Navegação",
- "readtime.one": "1 min de leitura",
- "readtime.other": "# min de leitura",
- "rss.created": "RSS feed",
- "rss.updated": "RSS feed de conteúdo atualizado",
- "search": "Pesquisar",
- "search.config.lang": "pt",
- "search.placeholder": "Buscar",
- "search.share": "Compartilhar",
- "search.reset": "Limpar",
- "search.result.initializer": "Inicializando busca",
- "search.result.placeholder": "Digite para iniciar a busca",
- "search.result.none": "Nenhum documento encontrado",
- "search.result.one": "1 documento encontrado",
- "search.result.other": "# documentos encontrados",
- "search.result.more.one": "mais 1 nesta página",
- "search.result.more.other": "# mais nesta página",
- "search.result.term.missing": "Ausente",
- "select.language": "Selecione o idioma",
- "select.version": "Selecione a versão",
- "source": "Ir para repositório",
- "source.file.contributors": "Contribuidores",
- "source.file.date.created": "Criado em",
- "source.file.date.updated": "Última atualização",
- "tabs": "Abas",
- "toc": "Índice",
- "top": "Voltar para o topo"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/pt.html b/dev/src/material/templates/partials/languages/pt.html
deleted file mode 100644
index 8bc6b81f..00000000
--- a/dev/src/material/templates/partials/languages/pt.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "pt",
- "action.edit": "Editar esta página",
- "action.skip": "Ir para o conteúdo",
- "action.view": "Ver fonte desta página",
- "announce.dismiss": "Não mostrar novamente",
- "blog.archive": "Arquivo",
- "blog.categories": "Categorias",
- "blog.categories.in": "em",
- "blog.continue": "Continuar leitura",
- "blog.draft": "Rascunho",
- "blog.index": "Voltar ao índice",
- "blog.meta": "Metadados",
- "blog.references": "Ligações relacionadas",
- "clipboard.copy": "Copiar para área de transferência",
- "clipboard.copied": "Copiado para área de transferência",
- "consent.accept": "Aceitar",
- "consent.manage": "Gerir configurações",
- "consent.reject": "Rejeitar",
- "footer": "Rodapé",
- "footer.next": "Próximo",
- "footer.previous": "Anterior",
- "header": "Cabeçalho",
- "meta.comments": "Comentários",
- "meta.source": "Fonte",
- "nav": "Navegação",
- "readtime.one": "1 min de leitura",
- "readtime.other": "# min de leitura",
- "rss.created": "canal RSS",
- "rss.updated": "canal RSS com conteúdo atualizado",
- "search": "Pesquisar",
- "search.config.lang": "pt",
- "search.placeholder": "Buscar",
- "search.share": "Compartilhar",
- "search.reset": "Limpar",
- "search.result.initializer": "Inicializando a pesquisa",
- "search.result.placeholder": "Digite para iniciar a busca",
- "search.result.none": "Nenhum resultado encontrado",
- "search.result.one": "1 resultado encontrado",
- "search.result.other": "# resultados encontrados",
- "search.result.more.one": "Mais 1 nesta página",
- "search.result.more.other": "Mais # nesta página",
- "search.result.term.missing": "Ausente",
- "select.language": "Selecione o idioma",
- "select.version": "Selecione a versão",
- "source": "Ir ao repositório",
- "source.file.contributors": "Colaboradores",
- "source.file.date.created": "Criada",
- "source.file.date.updated": "Última atualização",
- "tabs": "Abas",
- "toc": "Índice",
- "top": "Voltar ao topo"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ro.html b/dev/src/material/templates/partials/languages/ro.html
deleted file mode 100644
index 31a36229..00000000
--- a/dev/src/material/templates/partials/languages/ro.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ro",
- "action.edit": "Editeaza această pagină",
- "action.skip": "Sari la conținut",
- "action.view": "Vezi sursa acestei pagini",
- "announce.dismiss": "Nu mai arăta asta",
- "blog.archive": "Arhivează",
- "blog.categories": "Categorii",
- "blog.categories.in": "în",
- "blog.continue": "Continuă să citești",
- "blog.draft": "Ciornă",
- "blog.index": "Înapoi la index",
- "blog.meta": "Metadata",
- "blog.references": "Link-uri relevante",
- "clipboard.copy": "Copiază în clipboard",
- "clipboard.copied": "Copiat în clipboard",
- "consent.accept": "Accept",
- "consent.manage": "Gestionați setările",
- "consent.reject": "Refuz",
- "footer": "Subsol",
- "footer.next": "Următor",
- "footer.previous": "Anterior",
- "header": "Antet",
- "meta.comments": "Comentarii",
- "meta.source": "Sursă",
- "nav": "Navigație",
- "readtime.one": "1 minut de citit",
- "readtime.other": "# minut de citit",
- "rss.created": "Flux RSS",
- "rss.updated": "Flux RSS cu conținut actualizat",
- "search": "Caută",
- "search.config.lang": "ro",
- "search.placeholder": "Căutare",
- "search.share": "Distribuie",
- "search.reset": "Resetează",
- "search.result.initializer": "Inițializare căutare",
- "search.result.placeholder": "Tastează pentru a începe căutarea",
- "search.result.none": "Nu a fost găsit niciun document",
- "search.result.one": "1 document găsit",
- "search.result.other": "# documente găsite",
- "search.result.more.one": "Încă 1 pe această pagină",
- "search.result.more.other": "Încă # pe această pagină",
- "search.result.term.missing": "Lipsă",
- "select.language": "Selectează limba",
- "select.version": "Selectează versuine",
- "source": "Accesează repository-ul",
- "source.file.contributors": "Contribuitori",
- "source.file.date.created": "Creată",
- "source.file.date.updated": "Ultima actualizare",
- "tabs": "File",
- "toc": "Cuprins",
- "top": "Înapoi sus"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ru.html b/dev/src/material/templates/partials/languages/ru.html
deleted file mode 100644
index 31fab68f..00000000
--- a/dev/src/material/templates/partials/languages/ru.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ru",
- "action.edit": "Редактировать страницу",
- "action.skip": "Перейти к содержанию",
- "action.view": "Посмотреть исходный код страницы",
- "announce.dismiss": "Больше не показывать",
- "blog.archive": "Архив",
- "blog.categories": "Категории",
- "blog.categories.in": "В",
- "blog.continue": "Читать",
- "blog.draft": "Черновик",
- "blog.index": "На главную",
- "blog.meta": "Метаданные",
- "blog.references": "Ссылки",
- "clipboard.copy": "Копировать в буфер",
- "clipboard.copied": "Скопировано в буфер",
- "consent.accept": "Принять",
- "consent.manage": "Управлять настройками",
- "consent.reject": "Отклонить",
- "footer": "Нижний колонтитул",
- "footer.next": "Вперед",
- "footer.previous": "Назад",
- "header": "Верхний колонтитул",
- "meta.comments": "Комментарии",
- "meta.source": "Исходный код",
- "nav": "Навигация",
- "readtime.one": "Читать 1 минуту",
- "readtime.other": "Читать # минут",
- "rss.created": "RSS канал",
- "rss.updated": "RSS канал с новым контентом",
- "search": "Поиск",
- "search.config.lang": "ru",
- "search.placeholder": "Поиск",
- "search.share": "Поделиться",
- "search.reset": "Очистить",
- "search.result.initializer": "Инициализация поиска",
- "search.result.placeholder": "Начните печатать для поиска",
- "search.result.none": "Совпадений не найдено",
- "search.result.one": "Найдено 1 совпадение",
- "search.result.other": "Найдено совпадений: #",
- "search.result.more.one": "Ещё 1 на этой странице",
- "search.result.more.other": "Ещё # на этой странице",
- "search.result.term.missing": "Отсутствует",
- "select.language": "Выберите язык",
- "select.version": "Выберите версию",
- "source": "Перейти к репозиторию",
- "source.file.contributors": "Участники",
- "source.file.date.created": "Дата создания",
- "source.file.date.updated": "Последнее обновление",
- "tabs": "Вкладки",
- "toc": "Содержание",
- "top": "К началу"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/sa.html b/dev/src/material/templates/partials/languages/sa.html
deleted file mode 100644
index aab566fe..00000000
--- a/dev/src/material/templates/partials/languages/sa.html
+++ /dev/null
@@ -1,55 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "sa",
- "action.edit": "एतत् पृष्ठं सम्पादयतु",
- "action.skip": "सामग्रीं त्यजन्तु",
- "action.view": "अस्य पृष्ठस्य स्रोतः पश्यन्तु",
- "announce.dismiss": "एतत् पुनः न दर्शयतु",
- "blog.archive": "लेखागार",
- "blog.categories": "श्रेणियाँ",
- "blog.categories.in": "इत्यस्मिन्‌",
- "blog.continue": "पठनं निरन्तरं कुर्वन्तु",
- "blog.draft": "प्रारूप",
- "blog.index": "अनुक्रमणिकां प्रति पुनः आगच्छन्तु",
- "blog.meta": "परिदत्तांश",
- "blog.references": "सन्दर्भाः",
- "clipboard.copy": "एतत् प्रतिलिख्यताम्",
- "clipboard.copied": "प्रतिलिपितः भवति",
- "consent.accept": "अहं तत् स्वीकुर्वन् अस्मि",
- "consent.manage": "वविन्यासं प्रबन्धयन्तु",
- "consent.reject": "अहं तत् निराकरोमि",
- "footer": "पादलेखः",
- "footer.next": "अग्रिमः",
- "footer.previous": "पूर्वकृत",
- "header": "शीर्षकम्",
- "meta.comments": "विचाराः",
- "meta.source": "स्रोतः",
- "nav": "मार्गदर्शनम्",
- "readtime.one": "१ निमेषं पठितुं",
- "readtime.other": "# निमेषं पठितुं",
- "rss.created": "आरएसएस सेवा",
- "rss.updated": "आरएसएस सेवातः नवीनतमं अद्यतनम्",
- "search": "अन्वेषण",
- "search.placeholder": "अन्वेषण",
- "search.share": "भजतु",
- "search.reset": "तत् स्वच्छं कुर्वन्तु",
- "search.result.initializer": "अन्वेषणस्य आरम्भः",
- "search.result.placeholder": "अन्वेषणं आरभ्य लिखन्तु",
- "search.result.none": "अभिलेखाः नास्ति",
- "search.result.one": "१ अभिलेखः अस्ति",
- "search.result.other": "# अभिलेखाः सन्ति",
- "search.result.more.one": "अस्मिन् पृष्ठे १ अन्यः अस्ति",
- "search.result.more.other": "अस्मिन् पृष्ठे # अन्ये सन्ति",
- "search.result.term.missing": "शून्य",
- "select.language": "भाषां चिनोतु",
- "select.version": "संस्करणं चिनोतु",
- "source": "भण्डारं गच्छन्तु",
- "source.file.contributors": "अंशदाता",
- "source.file.date.created": "ननिर्माणस्य तिथिः",
- "source.file.date.updated": "परिवर्तनस्य तिथिः",
- "tabs": "पट्टाः",
- "toc": "सामग्रीसारणी",
- "top": "पुनः उपरिभागं प्रति गच्छन्तु"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/sh.html b/dev/src/material/templates/partials/languages/sh.html
deleted file mode 100644
index a7205f0d..00000000
--- a/dev/src/material/templates/partials/languages/sh.html
+++ /dev/null
@@ -1,50 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "sh",
- "action.edit": "Ažuriraj stranicu",
- "action.skip": "Idi na tekst",
- "action.view": "Pogledaj izvorni kod ove stranice",
- "announce.dismiss": "Nemoj mi ponovo pokazati ovo",
- "blog.archive": "Arhiva",
- "blog.categories": "Kategorije",
- "blog.categories.in": "u",
- "blog.continue": "Nastavi sa čitanjem",
- "blog.meta": "Metapodaci",
- "blog.references": "Povezani linkovi",
- "clipboard.copy": "Kopiraj u klipbord",
- "clipboard.copied": "Iskopirano u klipbord",
- "consent.accept": "Prihvati",
- "consent.manage": "Promeni podešavanja",
- "consent.reject": "Odbij",
- "footer": "Podnožje",
- "footer.next": "Sledeće",
- "footer.previous": "Prethodno",
- "header": "Zaglavlje",
- "meta.comments": "Komentari",
- "meta.source": "Izvor",
- "nav": "Navigacija",
- "readtime.one": "1 minut čitanja",
- "readtime.other": "# minuta čitanja",
- "search": "Pretraga",
- "search.placeholder": "Pretraga",
- "search.share": "Deljenje",
- "search.reset": "Očisti",
- "search.result.initializer": "Inicijalizujem pretragu",
- "search.result.placeholder": "Unesite pojam pretrage",
- "search.result.none": "Ništa nije pronađeno",
- "search.result.one": "1 rezultat pretrage",
- "search.result.other": "# rezultata pretrage",
- "search.result.more.one": "još 1 na ovoj strani",
- "search.result.more.other": "još # na ovoj strani",
- "search.result.term.missing": "Nedostaje",
- "select.language": "Izaberi jezik",
- "select.version": "Izaberi verziju",
- "source": "Idi u repozitorijum",
- "source.file.date.created": "Kreiran",
- "source.file.date.updated": "Ažuriran",
- "tabs": "Tabovi",
- "toc": "Sadržaj",
- "top": "Nazad na vrh"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/si.html b/dev/src/material/templates/partials/languages/si.html
deleted file mode 100644
index b2120f9f..00000000
--- a/dev/src/material/templates/partials/languages/si.html
+++ /dev/null
@@ -1,31 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "si",
- "action.edit": "පිටුව සංස්කරණය",
- "action.skip": "අන්තර්ගතය වෙත යන්න",
- "clipboard.copy": "කොපි කරන්න",
- "clipboard.copied": "කොපි කළා",
- "footer": "පාදම",
- "footer.next": "මීළඟ",
- "footer.previous": "පසුගිය",
- "header": "ශීර්ෂය",
- "meta.comments": "ප්‍රතිචාර",
- "meta.source": "මූලාශ්‍රය",
- "nav": "යාත්‍රණය",
- "search.config.pipeline": " ",
- "search.placeholder": "සොයන්න",
- "search.reset": "මකන්න",
- "search.result.placeholder": "සෙවීමට ටයිප් කරන්න",
- "search.result.none": "කිසිවක් හමු නොවුණි",
- "search.result.one": "1 ගැලපෙන ගොනුවක්",
- "search.result.other": "ගැලපෙන ගොනු # ක්",
- "search.result.more.one": "තව 1 ප්‍රතිඵලයක්",
- "search.result.more.other": "තව ප්‍රතිඵල # ක්",
- "source": "රිපොසිටරියට යන්න",
- "source.file.date.created": "ٺاھيو ويو",
- "source.file.date.updated": "අවසන් යාවත්කාලීන වීම",
- "tabs": "ටැබ්ස්",
- "toc": "පටුන"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/sk.html b/dev/src/material/templates/partials/languages/sk.html
deleted file mode 100644
index 793bddbb..00000000
--- a/dev/src/material/templates/partials/languages/sk.html
+++ /dev/null
@@ -1,23 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "sk",
- "action.edit": "Upraviť túto stránku",
- "action.skip": "Preskočiť na obsah",
- "clipboard.copy": "Kopírovať do schránky",
- "clipboard.copied": "Skopírované do schránky",
- "footer.next": "Ďalej",
- "footer.previous": "Späť",
- "meta.comments": "Komentáre",
- "meta.source": "Zdroj",
- "search.placeholder": "Hľadať",
- "search.result.placeholder": "Pre vyhľadávanie začni písať",
- "search.result.none": "Žiadne vyhovujúce dokumenty",
- "search.result.one": "Vyhovujúci dokument: 1",
- "search.result.other": "Vyhovujúce dokumenty: #",
- "source": "Zobraziť repozitár",
- "source.file.date.created": "Vytvorené",
- "source.file.date.updated": "Posledná aktualizácia",
- "toc": "Obsah"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/sl.html b/dev/src/material/templates/partials/languages/sl.html
deleted file mode 100644
index 4eb060f2..00000000
--- a/dev/src/material/templates/partials/languages/sl.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "sl",
- "action.edit": "Uredi stran",
- "action.skip": "Skoči na vsebino",
- "action.view": "Prikaži izvorno stran",
- "announce.dismiss": "Ne prikaži več",
- "blog.archive": "Arhiv",
- "blog.categories": "Kategorije",
- "blog.categories.in": "v",
- "blog.continue": "Nadaljuj z branjem",
- "blog.draft": "Osnutek",
- "blog.index": "Nazaj na kazalo",
- "blog.meta": "Metapodatki",
- "blog.references": "Sorodne povezave",
- "clipboard.copy": "Kopiraj v odložišče",
- "clipboard.copied": "Kopirano v odložišče",
- "consent.accept": "Sprejmi",
- "consent.manage": "Uredi nastavitve",
- "consent.reject": "Zavrni",
- "footer": "Glava",
- "footer.next": "Naslednja stran",
- "footer.previous": "Prejšnja stran",
- "header": "Noga",
- "meta.comments": "Komentarji",
- "meta.source": "Izvorna koda",
- "nav": "Navigacija",
- "readtime.one": "Čas branja: 1 min",
- "readtime.other": "Čas branja: # min",
- "rss.created": "RSS vir",
- "rss.updated": "RSS vir posodobljene vsebine",
- "search": "Iskanje",
- "search.config.lang": "sl",
- "search.placeholder": "Išči",
- "search.share": "Deli",
- "search.reset": "Počisti",
- "search.result.initializer": "Inicializacija iskanja",
- "search.result.placeholder": "Vpiši iskalni niz",
- "search.result.none": "Ni zadetkov",
- "search.result.one": "1 zadetek",
- "search.result.other": "# zadetkov",
- "search.result.more.one": "Še 1 na tej strani",
- "search.result.more.other": "Še # na tej strani",
- "search.result.term.missing": "Manjka",
- "select.language": "Izberi jezik",
- "select.version": "Izberi različico",
- "source": "Pojdi na repozitorij",
- "source.file.contributors": "Soavtorji",
- "source.file.date.created": "Ustvarjeno",
- "source.file.date.updated": "Zadnja posodobitev",
- "tabs": "Zavihki",
- "toc": "Kazalo",
- "top": "Nazaj na vrh"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/sr.html b/dev/src/material/templates/partials/languages/sr.html
deleted file mode 100644
index 7ef5f0df..00000000
--- a/dev/src/material/templates/partials/languages/sr.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "sr",
- "action.edit": "Ажурирај страницу",
- "action.skip": "Иди на текст",
- "clipboard.copy": "Копирај у клипборд",
- "clipboard.copied": "Ископирано у клипборд",
- "footer": "Подножје",
- "footer.next": "Следеће",
- "footer.previous": "Претходно",
- "header": "Заглавље",
- "meta.comments": "Коментари",
- "meta.source": "Извор",
- "nav": "Навигација",
- "search": "Претрага",
- "search.placeholder": "Претрага",
- "search.share": "Дељење",
- "search.reset": "Очисти",
- "search.result.initializer": "Иницијализујем претрагу",
- "search.result.placeholder": "Унесите појам претраге",
- "search.result.none": "Ништа није пронађено",
- "search.result.one": "1 резултат претраге",
- "search.result.other": "# резултата претраге",
- "search.result.more.one": "још 1 на овој страни",
- "search.result.more.other": "још # на овој страни",
- "search.result.term.missing": "Недостаје",
- "select.language": "Изабери језик",
- "select.version": "Изабери верзију",
- "source": "Иди у репозиторијум",
- "source.file.date.created": "Креиран",
- "source.file.date.updated": "Ажуриран",
- "tabs": "Табови",
- "toc": "Садржај",
- "top": "Назад на врх"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/sv.html b/dev/src/material/templates/partials/languages/sv.html
deleted file mode 100644
index fe368f8e..00000000
--- a/dev/src/material/templates/partials/languages/sv.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "sv",
- "action.edit": "Redigera sidan",
- "action.skip": "Gå till innehållet",
- "action.view": "Visa källkoden för denna sida",
- "announce.dismiss": "Visa inte igen",
- "blog.archive": "Arkivera",
- "blog.categories": "Kategorier",
- "blog.categories.in": "i",
- "blog.continue": "Fortsätt läsa",
- "blog.draft": "Utkast",
- "blog.index": "Tillbaka till index",
- "blog.meta": "Metadata",
- "blog.references": "Relaterade länkar",
- "clipboard.copy": "Kopiera till urklipp",
- "clipboard.copied": "Kopierat till urklipp",
- "consent.accept": "Acceptera",
- "consent.manage": "Hantera inställningar",
- "consent.reject": "Acceptera inte",
- "footer": "Sidfot",
- "footer.next": "Nästa",
- "footer.previous": "Föregående",
- "header": "Sidhuvud",
- "meta.comments": "Kommentarer",
- "meta.source": "Källa",
- "nav": "Navigation",
- "readtime.one": "1 min lästid",
- "readtime.other": "# min lästid",
- "rss.created": "RSS-flöde",
- "rss.updated": "RSS-flöde av uppdaterat innehåll",
- "search": "Sök",
- "search.config.lang": "sv",
- "search.placeholder": "Sök",
- "search.share": "Dela",
- "search.reset": "Rensa",
- "search.result.initializer": "Initialiserar sök",
- "search.result.placeholder": "Skriv sökord",
- "search.result.none": "Inga sökresultat",
- "search.result.one": "1 sökresultat",
- "search.result.other": "# sökresultat",
- "search.result.more.one": "1 till på denna sida",
- "search.result.more.other": "# till på denna sida",
- "search.result.term.missing": "Saknas",
- "select.language": "Välj språk",
- "select.version": "Välj version",
- "source": "Gå till datakatalog",
- "source.file.contributors": "Författare",
- "source.file.date.created": "Skapad",
- "source.file.date.updated": "Senast uppdaterad",
- "tabs": "Flikar",
- "toc": "Innehållsförteckning",
- "top": "Tillbaka till toppen"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/te.html b/dev/src/material/templates/partials/languages/te.html
deleted file mode 100644
index 2bd6036d..00000000
--- a/dev/src/material/templates/partials/languages/te.html
+++ /dev/null
@@ -1,55 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "te",
- "action.edit": "ఈ పేజీలో దిద్దుబాట్లు చేయండి",
- "action.skip": "సమాచారానికి వెళ్లండి",
- "action.view": "నేను ఈ పేజీ యొక్క మూలాన్ని చూడాలనుకుంటున్నాను",
- "announce.dismiss": "దీన్ని మళ్లీ చూపవద్దు",
- "blog.archive": "పాత వ్యాసం",
- "blog.categories": "వర్గాలు",
- "blog.categories.in": "లో",
- "blog.continue": "చదవడం కొనసాగించండి",
- "blog.draft": "ప్రారంభ రచన",
- "blog.index": "సూచికకు తిరిగి వెళ్ళు",
- "blog.meta": "సమాచారం గురించి సమాచారం",
- "blog.references": "సంబంధిత సూచనలు",
- "clipboard.copy": "దీనిని అనుకరించు",
- "clipboard.copied": "దీనిని అతికించు",
- "consent.accept": "నేను దీనిని అంగీకరిస్తున్నాను",
- "consent.manage": "ఆకృతీకరణను నిర్వహించండి",
- "consent.reject": "నేను దీనిని తిరస్కరిస్తున్నాను",
- "footer": "అడిటిప్పణి",
- "footer.next": "తదుపరి భాగం",
- "footer.previous": "మునుపటి భాగం",
- "header": "శీర్షిక విభాగం",
- "meta.comments": "అభిప్రాయాలు",
- "meta.source": "మూలం",
- "nav": "మార్గదర్శక పట్టీ",
- "readtime.one": "చదవడానికి ఒక నిమిషం పడుతుంది",
- "readtime.other": "చదవడానికి # నిమిషాలు పడుతుంది",
- "rss.created": "ఆర్ఎస్ఎస్ సేవ",
- "rss.updated": "ఆర్ఎస్ఎస్ సేవ నుండి తాజా నవీకరణ",
- "search": "వెతకండి",
- "search.placeholder": "వెతకండి",
- "search.share": "పంచుకోండి",
- "search.reset": "తుడిచివేయు",
- "search.result.initializer": "శోధనను ప్రారంభిస్తోంది",
- "search.result.placeholder": "రాయడం ద్వారా వెతకడం ప్రారంభించండి",
- "search.result.none": "సరిపోలే పత్రాలు లేవు",
- "search.result.one": "ఒక సరిపోలే పత్రం",
- "search.result.other": "# సరిపోలే పత్రాలు",
- "search.result.more.one": "ఈ పేజీలో మరొకటి",
- "search.result.more.other": "ఈ పేజీలో ఇంకా # ఉన్నాయి",
- "search.result.term.missing": "తప్పిపోయింది",
- "select.language": "భాషను ఎంచుకోండి",
- "select.version": "సంస్కరణను ఎంచుకోండి",
- "source": "భండారానికి వెళ్ళండి",
- "source.file.contributors": "సహకారులు",
- "source.file.date.created": "సృష్టించబడింది",
- "source.file.date.updated": "చివరి నవీకరణ",
- "tabs": "వివిధ కిటికీలు",
- "toc": "విషయ సూచిక",
- "top": "పైకి తిరిగి వెళ్ళు"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/th.html b/dev/src/material/templates/partials/languages/th.html
deleted file mode 100644
index 915e0fd4..00000000
--- a/dev/src/material/templates/partials/languages/th.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "th",
- "action.edit": "แก้ไขหน้านี้",
- "action.skip": "ข้ามไปที่เนื้อหา",
- "action.view": "ดูแหล่งที่มาของหน้านี้",
- "announce.dismiss": "อย่าแสดงสิ่งนี้อีก",
- "blog.archive": "คลังเก็บเอกสาร",
- "blog.categories": "หมวดหมู่",
- "blog.categories.in": "ใย",
- "blog.continue": "อ่านต่อไป",
- "blog.draft": "ฉบับร่าง",
- "blog.index": "กลับไปยังหน้าแรก",
- "blog.meta": "คำอธิบายข้อมูล",
- "blog.references": "ลิงก์ที่เกี่ยวข้อง",
- "clipboard.copy": "คัดลอก",
- "clipboard.copied": "คัดลอกแล้ว",
- "consent.accept": "ยอมรับ",
- "consent.manage": "จัดการการตั้งค่า",
- "consent.reject": "ปฏิเสธ",
- "footer": "ส่วนท้าย",
- "footer.next": "ต่อไป",
- "footer.previous": "ก่อนหน้า",
- "header": "หัวข้อ",
- "meta.comments": "ความคิดเห็น",
- "meta.source": "แหล่งที่มา",
- "nav": "ตัวนำทาง",
- "readtime.one": "อ่าน 1 นาที",
- "readtime.other": "อ่าน # นาที",
- "rss.created": "ฟีด RSS",
- "rss.updated": "ฟีด RSS ของเนื้อหาที่อัปเดต",
- "search": "ค้นหา",
- "search.config.lang": "th",
- "search.placeholder": "ค้นหา",
- "search.share": "แบ่งปัน",
- "search.reset": "ล้าง",
- "search.result.initializer": "กำลังเริ่มต้นการค้นหา",
- "search.result.placeholder": "พิมพ์เพื่อเริ่มค้นหา",
- "search.result.none": "ไม่พบเอกสารที่ตรงกัน",
- "search.result.one": "พบเอกสารที่ตรงกัน",
- "search.result.other": "พบ # เอกสารที่ตรงกัน",
- "search.result.more.one": "อีกหนึ่งในหน้านี้",
- "search.result.more.other": "# เพิ่มเติมในหน้านี้",
- "search.result.term.missing": "ไม่พบ",
- "select.language": "เลือกภาษา",
- "select.version": "เลือกเวอร์ชัน",
- "source": "ไปที่พื้นที่เก็บข้อมูล",
- "source.file.contributors": "ผู้มีส่วนร่วม",
- "source.file.date.created": "สร้าง",
- "source.file.date.updated": "สร้าง",
- "tabs": "แท็บ",
- "toc": "สารบัญ",
- "top": "กลับไปด้านบนสุด"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/tl.html b/dev/src/material/templates/partials/languages/tl.html
deleted file mode 100644
index 965d0443..00000000
--- a/dev/src/material/templates/partials/languages/tl.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "tl",
- "action.edit": "I-edit ang pahinang ito",
- "action.skip": "I-skip tungo sa nilalaman",
- "clipboard.copy": "Kopyahin sa clipboard",
- "clipboard.copied": "Nakopya mula sa clipboard",
- "footer": "Lagdang Pangwakas",
- "footer.next": "Susunod",
- "footer.previous": "Nakaraan",
- "header": "Pamuhatan",
- "meta.comments": "Mga Komento",
- "meta.source": "Pinagmulan",
- "nav": "Nabigasyon",
- "search": "Hanapin",
- "search.placeholder": "Hanapin",
- "search.share": "Ibahagi",
- "search.reset": "Tanggalin",
- "search.result.initializer": "Sinisimulan ang paghahanap",
- "search.result.placeholder": "Mag-type upang simulan ang paghahanap",
- "search.result.none": "Walang nahanap na dokumento",
- "search.result.one": "1 magkatugmang dokumento",
- "search.result.other": "# magkatugmang mga dokumento",
- "search.result.more.one": "1 meron sa pahina na ito",
- "search.result.more.other": "# meron sa pahina na ito",
- "search.result.term.missing": "Nawawala",
- "select.language": "Pumili ng lenguwahe",
- "select.version": "Pumili ng bersyon",
- "source": "Pumunta sa repository",
- "source.file.date.created": "Nagawa",
- "source.file.date.updated": "Huling update",
- "tabs": "Mga tala",
- "toc": "Talaan ng nilalaman",
- "top": "Bumalik sa taas"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/tr.html b/dev/src/material/templates/partials/languages/tr.html
deleted file mode 100644
index 4924828b..00000000
--- a/dev/src/material/templates/partials/languages/tr.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "tr",
- "action.edit": "Düzenle",
- "action.skip": "Ana içeriğe geç",
- "action.view": "Sayfanın kaynağını görüntüle",
- "announce.dismiss": "Bir daha gösterme",
- "blog.archive": "Arşiv",
- "blog.categories": "Kategoriler",
- "blog.categories.in": "in",
- "blog.continue": "Okumaya devam et",
- "blog.draft": "Taslak",
- "blog.index": "Dizine geri dön",
- "blog.meta": "Metadata",
- "blog.references": "İlgili bağlantılar",
- "clipboard.copy": "Kopyala",
- "clipboard.copied": "Kopyalandı",
- "consent.accept": "Kabul et",
- "consent.manage": "Ayarları yönet",
- "consent.reject": "Reddet",
- "footer": "Altbilgi",
- "footer.next": "Sonraki",
- "footer.previous": "Önceki",
- "header": "Başlık",
- "meta.comments": "Yorumlar",
- "meta.source": "Kaynak",
- "nav": "Navigasyon",
- "readtime.one": "1 dakika okuma",
- "readtime.other": "# dakika okuma",
- "rss.created": "RSS beslemesi",
- "rss.updated": "Güncellenmiş içeriğin RSS beslemesi",
- "search": "Ara",
- "search.config.lang": "tr",
- "search.placeholder": "Ara",
- "search.share": "Paylaş",
- "search.reset": "Temizle",
- "search.result.initializer": "Arama başlatılıyor",
- "search.result.placeholder": "Aramaya başlamak için yazın",
- "search.result.none": "Eşleşen doküman bulunamadı",
- "search.result.one": "1 doküman bulundu",
- "search.result.other": "# doküman bulundu",
- "search.result.more.one": "Bu sayfada 1 tane daha",
- "search.result.more.other": "Bu sayfada # tane daha",
- "search.result.term.missing": "Eksik",
- "select.language": "Dil seç",
- "select.version": "Versiyon seç",
- "source": "Depoya git",
- "source.file.contributors": "Katkıda bulunanlar",
- "source.file.date.created": "Oluşturuldu",
- "source.file.date.updated": "Son Güncelleme",
- "tabs": "Sekmeler",
- "toc": "İçindekiler",
- "top": "Başa dön"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/uk.html b/dev/src/material/templates/partials/languages/uk.html
deleted file mode 100644
index 91face86..00000000
--- a/dev/src/material/templates/partials/languages/uk.html
+++ /dev/null
@@ -1,55 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "uk",
- "action.edit": "Редагувати сторінку",
- "action.skip": "Перейти до змісту",
- "action.view": "Переглянути вихідний код сторінки",
- "announce.dismiss": "Більше не показувати",
- "blog.archive": "Архівувати",
- "blog.categories": "Категорії",
- "blog.categories.in": "в",
- "blog.continue": "Читати далі",
- "blog.draft": "Чернетка",
- "blog.index": "Повернутись на головну",
- "blog.meta": "Метадані",
- "blog.references": "Пов'язані посилання",
- "clipboard.copy": "Скопіювати в буфер",
- "clipboard.copied": "Скопійовано в буфер",
- "consent.accept": "Прийняти",
- "consent.manage": "Керувати налаштуваннями",
- "consent.reject": "Відхилити",
- "footer": "Футер",
- "footer.next": "Вперед",
- "footer.previous": "Назад",
- "header": "Хедер",
- "meta.comments": "Коментарі",
- "meta.source": "Вихідний код",
- "nav": "Навігація",
- "readtime.one": "Час на прочитання: 1 хвилина",
- "readtime.other": "Час на прочитання: # хвилин",
- "rss.created": "RSS стрічка",
- "rss.updated": "RSS стрічка оновленого контенту",
- "search": "Шукати",
- "search.placeholder": "Пошук",
- "search.share": "Поділитись",
- "search.reset": "Очистити",
- "search.result.initializer": "Пошук розпочато",
- "search.result.placeholder": "Розпочніть писати для пошуку",
- "search.result.none": "Збігів не знайдено",
- "search.result.one": "Знайдено 1 збіг",
- "search.result.other": "Знайдено # збігів",
- "search.result.more.one": "Ще 1 збіг на цій сторінці",
- "search.result.more.other": "Ще # збігів на цій сторінці",
- "search.result.term.missing": "Не знайдено запиту",
- "select.language": "Обрати мову",
- "select.version": "Обрати версію",
- "source": "Перейти до вихідного коду",
- "source.file.contributors": "Контриб'ютори",
- "source.file.date.created": "Створено",
- "source.file.date.updated": "Востаннє оновлено",
- "tabs": "Вкладки",
- "toc": "Зміст",
- "top": "Повернутись нагору"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/ur.html b/dev/src/material/templates/partials/languages/ur.html
deleted file mode 100644
index 06817358..00000000
--- a/dev/src/material/templates/partials/languages/ur.html
+++ /dev/null
@@ -1,57 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "ur",
- "direction": "rtl",
- "action.edit": "اس صفحے میں ترمیم کریں",
- "action.skip": "براہِ راست مواد پر جائیں",
- "action.view": "اس صفحہ کا ماخذ دیکھیں",
- "announce.dismiss": "اسے دوبارہ مت دکھائیں",
- "blog.archive": "محفوظ شدہ",
- "blog.categories": "اقسام",
- "blog.categories.in": "میں",
- "blog.continue": "پڑھنا جاری رکھیے",
- "blog.draft": "ڈرافٹ",
- "blog.index": "واپس انڈیکس پر جائیں",
- "blog.meta": "میٹا ڈیٹا",
- "blog.references": "متعلقہ لنکس",
- "clipboard.copy": "کلِپ بورڈ میں نقل کریں",
- "clipboard.copied": "کلِپ بورڈ میں نقل کر دیا گیا",
- "consent.accept": "قبول کریں",
- "consent.manage": "سیٹینگ بدلیں",
- "consent.reject": "رد کرنا",
- "footer": "ذیلی تحریر",
- "footer.next": "اگلا",
- "footer.previous": "پچھلا",
- "header": "سر تحریر",
- "meta.comments": "تبصرے",
- "meta.source": "ذریعہ",
- "nav": "رہنمائی",
- "readtime.one": "1 منٹ لگے گا",
- "readtime.other": "# منٹ لگیں گے",
- "rss.created": "RSS فیڈ",
- "rss.updated": "تازہ ترین مواد کی RSS فیڈ",
- "search": "تلاش",
- "search.config.pipeline": " ",
- "search.placeholder": "تلاش کریں",
- "search.share": "اشتراک کریں",
- "search.reset": "صاف کریں",
- "search.result.initializer": "تلاش کا آغاز ہو رہا ہے",
- "search.result.placeholder": "تلاش شروع کرنے کے لئے ٹائپ کریں",
- "search.result.none": "کوئی ملتی جلتی دستاویزات نہیں",
- "search.result.one": "۱ ملتی جلتی دستاویز",
- "search.result.other": "# ملتی جلتی دستاویزات",
- "search.result.more.one": "اِس صفحے پر مزید ۱",
- "search.result.more.other": "اِس صفحے پر مزید #",
- "search.result.term.missing": "گمشدہ",
- "select.language": "زبان کا انتخاب کریں",
- "select.version": "ورژن کا انتخاب کریں",
- "source": "ریپازٹری پر جائیں",
- "source.file.contributors": "تعاون کار",
- "source.file.date.created": "تخلیق",
- "source.file.date.updated": "آخری بار تجدید",
- "tabs": "ٹیبز",
- "toc": "فہرست",
- "top": "واپس اوپر جائیں"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/uz.html b/dev/src/material/templates/partials/languages/uz.html
deleted file mode 100644
index a326ab9b..00000000
--- a/dev/src/material/templates/partials/languages/uz.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "uz",
- "action.edit": "Ushbu sahifani tahrirlash",
- "action.skip": "Tarkibga o'tish",
- "action.view": "Ushbu sahifaning manbasini ko'rish",
- "announce.dismiss": "Buni boshqa ko'rsatma",
- "blog.archive": "Arxiv",
- "blog.categories": "Kategoriyalar",
- "blog.categories.in": "ichida",
- "blog.continue": "O'qishni davom ettiring",
- "blog.draft": "Qoralama",
- "blog.index": "Indeks sahifasiga qaytish",
- "blog.meta": "Metama'lumot",
- "blog.references": "Bog'liq havolalar",
- "clipboard.copy": "Buferga nusxalash",
- "clipboard.copied": "Buferga nusxalandi",
- "consent.accept": "Qabul qilish",
- "consent.manage": "Sozlamalarni boshqarish",
- "consent.reject": "Rad etish",
- "footer": "Pastgi qism",
- "footer.next": "Keyingi sahifa",
- "footer.previous": "Oldingi sahifa",
- "header": "Sarlavha",
- "meta.comments": "Izohlar",
- "meta.source": "Manba",
- "nav": "Navigatsiya",
- "readtime.one": "1 daqiqa o'qish",
- "readtime.other": "# daqiqa o'qish",
- "rss.created": "RSS tasmasi",
- "rss.updated": "Yangilangan kontentning RSS tasmasi",
- "search": "Qidirish",
- "search.config.lang": "tr",
- "search.placeholder": "Qidirish",
- "search.share": "Ulashish",
- "search.reset": "Tozalash",
- "search.result.initializer": "Qidiruv ishga tushirilmoqda",
- "search.result.placeholder": "Qidiruvni boshlash uchun kiriting",
- "search.result.none": "Mos natijalar yo'q",
- "search.result.one": "1 ta mos natija",
- "search.result.other": "# ta mos keladigan natijalar",
- "search.result.more.one": "Ushbu sahifada yana 1 ta natija",
- "search.result.more.other": "Bu sahifada yana # ta natija",
- "search.result.term.missing": "To'ldirilmagan",
- "select.language": "Tilni tanlang",
- "select.version": "Versiyani tanlang",
- "source": "Repozitoriyga o'tish",
- "source.file.contributors": "Hissa qo'shuvchilar",
- "source.file.date.created": "Yaratildi",
- "source.file.date.updated": "Oxirgi yangilanish",
- "tabs": "Yorliqlar",
- "toc": "Mundarija",
- "top": "Yuqoriga qaytish"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/vi.html b/dev/src/material/templates/partials/languages/vi.html
deleted file mode 100644
index b32202c0..00000000
--- a/dev/src/material/templates/partials/languages/vi.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "vi",
- "action.edit": "Chỉnh sửa",
- "action.skip": "Bỏ qua",
- "action.view": "Xem mã nguồn của trang",
- "announce.dismiss": "Không hiển thị lại",
- "blog.archive": "Lưu trữ",
- "blog.categories": "Mục",
- "blog.categories.in": "Trong",
- "blog.continue": "Tiếp tục đọc",
- "blog.draft": "Bản nháp",
- "blog.index": "Quay lại",
- "blog.meta": "Metadata",
- "blog.references": "Các liên kết liên quan",
- "clipboard.copy": "Sao chép vào bộ nhớ tạm",
- "clipboard.copied": "Đã sao chép",
- "consent.accept": "Đồng ý",
- "consent.manage": "Cài đặt",
- "consent.reject": "Từ chối",
- "footer": "Chân trang",
- "footer.next": "Sau",
- "footer.previous": "Trước",
- "header": "Đầu trang",
- "meta.comments": "Bình luận",
- "meta.source": "Mã nguồn",
- "nav": "Thanh điều hướng",
- "readtime.one": "1 phút đọc",
- "readtime.other": "# phút đọc",
- "rss.created": "RSS feed",
- "rss.updated": "RSS feed of updated content",
- "search": "Tìm kiếm",
- "search.config.lang": "vi",
- "search.placeholder": "Tìm kiếm",
- "search.share": "Chia sẻ",
- "search.reset": "Xoá",
- "search.result.initializer": "Initializing search",
- "search.result.placeholder": "Nhập để bắt đầu tìm kiếm",
- "search.result.none": "Không tìm thấy tài liệu liên quan",
- "search.result.one": "1 tài liệu liên quan",
- "search.result.other": "# tài liệu liên quan",
- "search.result.more.one": "1 từ khác trong trang",
- "search.result.more.other": "# từ khác trong trang",
- "search.result.term.missing": "Không",
- "select.language": "Chọn ngôn ngữ",
- "select.version": "Chọn phiên bản",
- "source": "Xem mã nguồn",
- "source.file.contributors": "Contributors",
- "source.file.date.created": "Tạo",
- "source.file.date.updated": "Cập nhật lần cuối",
- "tabs": "Tabs",
- "toc": "Mục lục",
- "top": "Trở lại mục lục"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/zh-Hant.html b/dev/src/material/templates/partials/languages/zh-Hant.html
deleted file mode 100644
index aaac6a7d..00000000
--- a/dev/src/material/templates/partials/languages/zh-Hant.html
+++ /dev/null
@@ -1,57 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "zh-Hant",
- "action.edit": "編輯此頁",
- "action.skip": "跳轉至",
- "action.view": "查看源代碼",
- "announce.dismiss": "不再顯示此訊息",
- "blog.archive": "存檔",
- "blog.categories": "分類",
- "blog.categories.in": "分類在",
- "blog.continue": "繼續閲讀",
- "blog.draft": "草稿",
- "blog.index": "回到首頁",
- "blog.meta": "元數據",
- "blog.references": "相關鏈接",
- "clipboard.copy": "拷貝",
- "clipboard.copied": "已拷貝",
- "consent.accept": "接受",
- "consent.manage": "管理設置",
- "consent.reject": "拒絕",
- "footer": "頁脚",
- "footer.next": "下一頁",
- "footer.previous": "上一頁",
- "header": "頁首",
- "meta.comments": "評論",
- "meta.source": "來源",
- "search.config.pipeline": "stemmer",
- "search.config.separator": "[\\s\\u200b\\u3000\\-、。,.?!;]+",
- "nav": "導航",
- "readtime.one": "需要 1 分鐘閲讀",
- "readtime.other": "需要 # 分鐘閲讀",
- "rss.created": "簡易資訊聚合",
- "rss.updated": "更新之部分的簡易資訊聚合",
- "search": "搜尋",
- "search.placeholder": "搜尋",
- "search.share": "分享",
- "search.reset": "清空",
- "search.result.initializer": "正在初始化搜尋引擎",
- "search.result.placeholder": "鍵入以開始檢索",
- "search.result.none": "沒有找到符合條件的結果",
- "search.result.one": "找到 1 个符合條件的結果",
- "search.result.other": "找到 # 個符合條件的結果",
- "search.result.more.one": "此頁尚有 1 個符合的項目",
- "search.result.more.other": "此頁尚有 # 個符合的項目",
- "search.result.term.missing": "缺失",
- "select.language": "選擇語言",
- "select.version": "選擇版本",
- "source": "前往倉庫",
- "source.file.contributors": "貢獻者",
- "source.file.date.created": "建立日期",
- "source.file.date.updated": "最後更新",
- "tabs": "標籤頁",
- "toc": "目錄",
- "top": "回到頂部"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/zh-TW.html b/dev/src/material/templates/partials/languages/zh-TW.html
deleted file mode 100644
index b43170be..00000000
--- a/dev/src/material/templates/partials/languages/zh-TW.html
+++ /dev/null
@@ -1,57 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "zh-TW",
- "action.edit": "編輯此頁",
- "action.skip": "跳轉到",
- "action.view": "查看此頁原始碼",
- "announce.dismiss": "不再顯示此訊息",
- "blog.archive": "封存",
- "blog.categories": "分類",
- "blog.categories.in": "於",
- "blog.continue": "繼續閱讀",
- "blog.draft": "草稿",
- "blog.index": "回到主頁",
- "blog.meta": "元數據",
- "blog.references": "相關連結",
- "clipboard.copy": "複製",
- "clipboard.copied": "已複製",
- "consent.accept": "同意",
- "consent.manage": "管理設定",
- "consent.reject": "拒絕",
- "footer": "頁腳",
- "footer.next": "下一頁",
- "footer.previous": "上一頁",
- "header": "頁首",
- "meta.comments": "留言",
- "meta.source": "來源",
- "nav": "導覽列",
- "readtime.one": "需要 1 分鐘閱讀時間",
- "readtime.other": "需要 # 分鐘閱讀時間",
- "rss.created": "RSS 訂閱",
- "rss.updated": "RSS 訂閱內容已更新",
- "search": "搜尋",
- "search.config.pipeline": "stemmer",
- "search.config.separator": "[\\s\\u200b\\u3000\\-、。,.?!;]+",
- "search.placeholder": "搜尋",
- "search.share": "分享",
- "search.reset": "清除",
- "search.result.initializer": "正在初始化搜尋引擎",
- "search.result.placeholder": "打字進行搜尋",
- "search.result.none": "沒有符合的項目",
- "search.result.one": "找到 1 個符合的項目",
- "search.result.other": "找到 # 個符合的項目",
- "search.result.more.one": "此頁尚有 1 個符合的項目",
- "search.result.more.other": "此頁尚有 # 個符合的項目",
- "search.result.term.missing": "缺少字詞",
- "select.language": "選擇語言",
- "select.version": "選擇版本",
- "source": "前往倉庫",
- "source.file.contributors": "貢獻者",
- "source.file.date.created": "建立日期",
- "source.file.date.updated": "最後更新",
- "tabs": "標籤",
- "toc": "目錄",
- "top": "回到頂端"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/languages/zh.html b/dev/src/material/templates/partials/languages/zh.html
deleted file mode 100644
index 1ce9a0c9..00000000
--- a/dev/src/material/templates/partials/languages/zh.html
+++ /dev/null
@@ -1,57 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro t(key) %}{{ {
- "language": "zh",
- "action.edit": "编辑此页",
- "action.skip": "跳转至",
- "action.view": "查看本页的源代码",
- "announce.dismiss": "不再显示此消息",
- "blog.archive": "归档",
- "blog.categories": "分类",
- "blog.categories.in": "分类于",
- "blog.continue": "继续阅读",
- "blog.draft": "草稿",
- "blog.index": "回到主页",
- "blog.meta": "元数据",
- "blog.references": "相关链接",
- "clipboard.copy": "复制",
- "clipboard.copied": "已复制",
- "consent.accept": "同意",
- "consent.manage": "管理设定",
- "consent.reject": "拒绝",
- "footer": "页脚",
- "footer.next": "下一页",
- "footer.previous": "上一页",
- "header": "页眉",
- "meta.comments": "评论",
- "meta.source": "来源",
- "nav": "导航栏",
- "readtime.one": "需要 1 分钟阅读时间",
- "readtime.other": "需要 # 分钟阅读时间",
- "rss.created": "RSS 订阅",
- "rss.updated": "已更新内容的 RSS 订阅",
- "search": "查找",
- "search.config.pipeline": "stemmer",
- "search.config.separator": "[\\s\\u200b\\u3000\\-、。,.?!;]+",
- "search.placeholder": "搜索",
- "search.share": "分享",
- "search.reset": "清空当前内容",
- "search.result.initializer": "正在初始化搜索引擎",
- "search.result.placeholder": "键入以开始搜索",
- "search.result.none": "没有找到符合条件的结果",
- "search.result.one": "找到 1 个符合条件的结果",
- "search.result.other": "# 个符合条件的结果",
- "search.result.more.one": "在该页上还有 1 个符合条件的结果",
- "search.result.more.other": "在该页上还有 # 个符合条件的结果",
- "search.result.term.missing": "缺少",
- "select.language": "选择当前语言",
- "select.version": "选择当前版本",
- "source": "前往仓库",
- "source.file.contributors": "贡献者",
- "source.file.date.created": "创建日期",
- "source.file.date.updated": "最后更新",
- "tabs": "标签",
- "toc": "目录",
- "top": "回到页面顶部"
-}[key] }}{% endmacro %}
diff --git a/dev/src/material/templates/partials/logo.html b/dev/src/material/templates/partials/logo.html
deleted file mode 100644
index 6d80f2ce..00000000
--- a/dev/src/material/templates/partials/logo.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% if config.theme.logo %}
- <img src="{{ config.theme.logo | url }}" alt="logo">
-{% else %}
- {% set icon = config.theme.icon.logo or "material/library" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
-{% endif %}
diff --git a/dev/src/material/templates/partials/nav-item.html b/dev/src/material/templates/partials/nav-item.html
deleted file mode 100644
index 5e880792..00000000
--- a/dev/src/material/templates/partials/nav-item.html
+++ /dev/null
@@ -1,134 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro render_status(nav_item, type) %}
- {% set class = "md-status md-status--" ~ type %}
- {% if config.extra.status and config.extra.status[type] %}
- <span class="{{ class }}" title="{{ config.extra.status[type] }}">
- </span>
- {% else %}
- <span class="{{ class }}"></span>
- {% endif %}
-{% endmacro %}
-{% macro render_content(nav_item, ref = nav_item) %}
- {% if nav_item.is_page and nav_item.meta.icon %}
- {% include ".icons/" ~ nav_item.meta.icon ~ ".svg" %}
- {% endif %}
- <span class="md-ellipsis">
- {{ ref.title }}
- </span>
- {% if nav_item.is_page and nav_item.meta.status %}
- {{ render_status(nav_item, nav_item.meta.status) }}
- {% endif %}
-{% endmacro %}
-{% macro render_pruned(nav_item, ref = nav_item) %}
- {% set first = nav_item.children | first %}
- {% if first and first.children %}
- {{ render_pruned(first, ref) }}
- {% else %}
- <a href="{{ first.url | url }}" class="md-nav__link">
- {{ render_content(ref) }}
- {% if nav_item.children | length > 0 %}
- <span class="md-nav__icon md-icon"></span>
- {% endif %}
- </a>
- {% endif %}
-{% endmacro %}
-{% macro render(nav_item, path, level) %}
- {% set class = "md-nav__item" %}
- {% if nav_item.active %}
- {% set class = class ~ " md-nav__item--active" %}
- {% endif %}
- {% if nav_item.children %}
- {% set indexes = [] %}
- {% if "navigation.indexes" in features %}
- {% for nav_item in nav_item.children %}
- {% if nav_item.is_index and not index is defined %}
- {% set _ = indexes.append(nav_item) %}
- {% endif %}
- {% endfor %}
- {% endif %}
- {% set tabs = "navigation.tabs" in features %}
- {% set sections = "navigation.sections" in features %}
- {% if tabs and level == 1 or sections and tabs >= level - 1 %}
- {% set class = class ~ " md-nav__item--section" %}
- {% set is_section = true %}
- {% elif not nav_item.active and "navigation.prune" in features %}
- {% set class = class ~ " md-nav__item--pruned" %}
- {% set is_pruned = true %}
- {% endif %}
- <li class="{{ class }} md-nav__item--nested">
- {% if not is_pruned %}
- {% set checked = "checked" if nav_item.active %}
- {% set is_expanded = "navigation.expand" in features %}
- {% if is_expanded and not checked %}
- {% set indeterminate = "md-toggle--indeterminate" %}
- {% endif %}
- <input class="md-nav__toggle md-toggle {{ indeterminate }}" type="checkbox" id="{{ path }}" {{ checked }}>
- {% if not indexes %}
- {% set tabindex = "0" if not is_section %}
- <label class="md-nav__link" for="{{ path }}" id="{{ path }}_label" tabindex="{{ tabindex }}">
- {{ render_content(nav_item) }}
- <span class="md-nav__icon md-icon"></span>
- </label>
- {% else %}
- {% set index = indexes | first %}
- {% set class = "md-nav__link--active" if index == page %}
- <div class="md-nav__link md-nav__container">
- <a href="{{ index.url | url }}" class="md-nav__link {{ class }}">
- {{ render_content(index, nav_item) }}
- </a>
- {% if nav_item.children | length > 1 %}
- {% set tabindex = "0" if not is_section %}
- <label class="md-nav__link {{ class }}" for="{{ path }}" id="{{ path }}_label" tabindex="{{ tabindex }}">
- <span class="md-nav__icon md-icon"></span>
- </label>
- {% endif %}
- </div>
- {% endif %}
- <nav class="md-nav" data-md-level="{{ level }}" aria-labelledby="{{ path }}_label" aria-expanded="{{ nav_item.active | tojson }}">
- <label class="md-nav__title" for="{{ path }}">
- <span class="md-nav__icon md-icon"></span>
- {{ nav_item.title }}
- </label>
- <ul class="md-nav__list" data-md-scrollfix>
- {% for nav_item in nav_item.children %}
- {% if not indexes or nav_item != indexes | first %}
- {{ render(nav_item, path ~ "_" ~ loop.index, level + 1) }}
- {% endif %}
- {% endfor %}
- </ul>
- </nav>
- {% else %}
- {{ render_pruned(nav_item) }}
- {% endif %}
- </li>
- {% elif nav_item == page %}
- <li class="{{ class }}">
- {% set toc = page.toc %}
- <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
- {% set first = toc | first %}
- {% if first and first.level == 1 %}
- {% set toc = first.children %}
- {% endif %}
- {% if toc %}
- <label class="md-nav__link md-nav__link--active" for="__toc">
- {{ render_content(nav_item) }}
- <span class="md-nav__icon md-icon"></span>
- </label>
- {% endif %}
- <a href="{{ nav_item.url | url }}" class="md-nav__link md-nav__link--active">
- {{ render_content(nav_item) }}
- </a>
- {% if toc %}
- {% include "partials/toc.html" %}
- {% endif %}
- </li>
- {% else %}
- <li class="{{ class }}">
- <a href="{{ nav_item.url | url }}" class="md-nav__link">
- {{ render_content(nav_item) }}
- </a>
- </li>
- {% endif %}
-{% endmacro %}
diff --git a/dev/src/material/templates/partials/nav.html b/dev/src/material/templates/partials/nav.html
deleted file mode 100644
index a701dcd2..00000000
--- a/dev/src/material/templates/partials/nav.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% import "partials/nav-item.html" as item with context %}
-{% set class = "md-nav md-nav--primary" %}
-{% if "navigation.tabs" in features %}
- {% set class = class ~ " md-nav--lifted" %}
-{% endif %}
-{% if "toc.integrate" in features %}
- {% set class = class ~ " md-nav--integrated" %}
-{% endif %}
-<nav class="{{ class }}" aria-label="{{ lang.t('nav') }}" data-md-level="0">
- <label class="md-nav__title" for="__drawer">
- <a href="{{ config.extra.homepage | d(nav.homepage.url, true) | url }}" title="{{ config.site_name | e }}" class="md-nav__button md-logo" aria-label="{{ config.site_name }}" data-md-component="logo">
- {% include "partials/logo.html" %}
- </a>
- {{ config.site_name }}
- </label>
- {% if config.repo_url %}
- <div class="md-nav__source">
- {% include "partials/source.html" %}
- </div>
- {% endif %}
- <ul class="md-nav__list" data-md-scrollfix>
- {% for nav_item in nav %}
- {% set path = "__nav_" ~ loop.index %}
- {{ item.render(nav_item, path, 1) }}
- {% endfor %}
- </ul>
-</nav>
diff --git a/dev/src/material/templates/partials/pagination.html b/dev/src/material/templates/partials/pagination.html
deleted file mode 100644
index 1de2cd4c..00000000
--- a/dev/src/material/templates/partials/pagination.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% import ".icons/material/chevron-double-left.svg" as icon_first %}
-{% import ".icons/material/chevron-left.svg" as icon_previous %}
-{% import ".icons/material/chevron-right.svg" as icon_next %}
-{% import ".icons/material/chevron-double-right.svg" as icon_last %}
-<nav class="md-pagination">
- {{
- pagination({
- "link_attr": { "class": "md-pagination__link" },
- "curpage_attr": { "class": "md-pagination__current" },
- "dotdot_attr": { "class": "md-pagination__dots" },
- "symbol_first": icon_first,
- "symbol_previous": icon_previous,
- "symbol_next": icon_next,
- "symbol_last": icon_last
- })
- }}
-</nav>
diff --git a/dev/src/material/templates/partials/palette.html b/dev/src/material/templates/partials/palette.html
deleted file mode 100644
index 11ec1115..00000000
--- a/dev/src/material/templates/partials/palette.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<form class="md-header__option" data-md-component="palette">
- {% for option in config.theme.palette %}
- {% set scheme = option.scheme | d("default", true) %}
- {% set primary = option.primary | d("indigo", true) %}
- {% set accent = option.accent | d("indigo", true) %}
- <input class="md-option" data-md-color-media="{{ option.media }}" data-md-color-scheme="{{ scheme | replace(' ', '-') }}" data-md-color-primary="{{ primary | replace(' ', '-') }}" data-md-color-accent="{{ accent | replace(' ', '-') }}" {% if option.toggle %} aria-label="{{ option.toggle.name }}" {% else %} aria-hidden="true" {% endif %} type="radio" name="__palette" id="__palette_{{ loop.index }}">
- {% if option.toggle %}
- <label class="md-header__button md-icon" title="{{ option.toggle.name }}" for="__palette_{{ loop.index0 or loop.length }}" hidden>
- {% include ".icons/" ~ option.toggle.icon ~ ".svg" %}
- </label>
- {% endif %}
- {% endfor %}
-</form>
diff --git a/dev/src/material/templates/partials/post.html b/dev/src/material/templates/partials/post.html
deleted file mode 100644
index 08f3c8f1..00000000
--- a/dev/src/material/templates/partials/post.html
+++ /dev/null
@@ -1,60 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<article class="md-post md-post--excerpt">
- <header class="md-post__header">
- {% if post.authors %}
- <nav class="md-post__authors md-typeset">
- {% for author in post.authors %}
- <span class="md-author">
- <img src="{{ author.avatar }}" alt="{{ author.name }}">
- </span>
- {% endfor %}
- </nav>
- {% endif %}
- <div class="md-post__meta md-meta">
- <ul class="md-meta__list">
- <li class="md-meta__item">
- <time datetime="{{ post.config.date.created }}">
- {{- post.config.date.created | date -}}
- </time>
- {#- Collapse whitespace -#}
- </li>
- {% if post.categories %}
- <li class="md-meta__item">
- {{ lang.t("blog.categories.in") }}
- {% for category in post.categories %}
- <a href="{{ category.url | url }}" class="md-meta__link">
- {{- category.title -}}
- </a>
- {%- if loop.revindex > 1 %}, {% endif -%}
- {% endfor -%}
- </li>
- {% endif %}
- {% if post.config.readtime %}
- {% set time = post.config.readtime %}
- <li class="md-meta__item">
- {% if time == 1 %}
- {{ lang.t("readtime.one") }}
- {% else %}
- {{ lang.t("readtime.other") | replace("#", time) }}
- {% endif %}
- </li>
- {% endif %}
- </ul>
- {% if post.config.draft %}
- <span class="md-draft">
- {{ lang.t("blog.draft") }}
- </span>
- {% endif %}
- </div>
- </header>
- <div class="md-post__content md-typeset">
- {{ post.content }}
- <nav class="md-post__action">
- <a href="{{ post.url | url }}">
- {{ lang.t("blog.continue") }}
- </a>
- </nav>
- </div>
-</article>
diff --git a/dev/src/material/templates/partials/progress.html b/dev/src/material/templates/partials/progress.html
deleted file mode 100644
index 457156bb..00000000
--- a/dev/src/material/templates/partials/progress.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<div class="md-progress" data-md-component="progress" role="progressbar"></div>
diff --git a/dev/src/material/templates/partials/search.html b/dev/src/material/templates/partials/search.html
deleted file mode 100644
index 4ad3b36f..00000000
--- a/dev/src/material/templates/partials/search.html
+++ /dev/null
@@ -1,42 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<div class="md-search" data-md-component="search" role="dialog">
- <label class="md-search__overlay" for="__search"></label>
- <div class="md-search__inner" role="search">
- <form class="md-search__form" name="search">
- <input type="text" class="md-search__input" name="query" aria-label="{{ lang.t('search.placeholder') }}" placeholder="{{ lang.t('search.placeholder') }}" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
- <label class="md-search__icon md-icon" for="__search">
- {% set icon = config.theme.icon.search or "material/magnify" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- {% set icon = config.theme.icon.previous or "material/arrow-left" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </label>
- <nav class="md-search__options" aria-label="{{ lang.t('search') }}">
- {% if "search.share" in features %}
- <a href="javascript:void(0)" class="md-search__icon md-icon" title="{{ lang.t('search.share') }}" aria-label="{{ lang.t('search.share') }}" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
- {% set icon = config.theme.icon.share or "material/share-variant" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </a>
- {% endif %}
- <button type="reset" class="md-search__icon md-icon" title="{{ lang.t('search.reset') }}" aria-label="{{ lang.t('search.reset') }}" tabindex="-1">
- {% set icon = config.theme.icon.close or "material/close" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </button>
- </nav>
- {% if "search.suggest" in features %}
- <div class="md-search__suggest" data-md-component="search-suggest"></div>
- {% endif %}
- </form>
- <div class="md-search__output">
- <div class="md-search__scrollwrap" data-md-scrollfix>
- <div class="md-search-result" data-md-component="search-result">
- <div class="md-search-result__meta">
- {{ lang.t("search.result.initializer") }}
- </div>
- <ol class="md-search-result__list" role="presentation"></ol>
- </div>
- </div>
- </div>
- </div>
-</div>
diff --git a/dev/src/material/templates/partials/social.html b/dev/src/material/templates/partials/social.html
deleted file mode 100644
index e59fdae6..00000000
--- a/dev/src/material/templates/partials/social.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<div class="md-social">
- {% for social in config.extra.social %}
- {% set rel = "noopener" %}
- {% if "mastodon" in social.icon %}
- {% set rel = rel ~ " me" %}
- {% endif %}
- {% set title = social.name %}
- {% if not title and "//" in social.link %}
- {% set _, url = social.link.split("//") %}
- {% set title = url.split("/")[0] %}
- {% endif %}
- <a href="{{ social.link }}" target="_blank" rel="{{ rel }}" title="{{ title | e }}" class="md-social__link">
- {% include ".icons/" ~ social.icon ~ ".svg" %}
- </a>
- {% endfor %}
-</div>
diff --git a/dev/src/material/templates/partials/source-file.html b/dev/src/material/templates/partials/source-file.html
deleted file mode 100644
index ae5bd084..00000000
--- a/dev/src/material/templates/partials/source-file.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<hr>
-<div class="md-source-file">
- <small>
- {% if page.meta.git_revision_date_localized %}
- {{ lang.t("source.file.date.updated") }}:
- {{ page.meta.git_revision_date_localized }}
- {% if page.meta.git_creation_date_localized %}
- <br>
- {{ lang.t("source.file.date.created") }}:
- {{ page.meta.git_creation_date_localized }}
- {% endif %}
- {% elif page.meta.revision_date %}
- {{ lang.t("source.file.date.updated") }}:
- {{ page.meta.revision_date }}
- {% endif %}
- </small>
-</div>
diff --git a/dev/src/material/templates/partials/source.html b/dev/src/material/templates/partials/source.html
deleted file mode 100644
index 711ecaef..00000000
--- a/dev/src/material/templates/partials/source.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<a href="{{ config.repo_url }}" title="{{ lang.t('source') }}" class="md-source" data-md-component="source">
- <div class="md-source__icon md-icon">
- {% set icon = config.theme.icon.repo or "fontawesome/brands/git-alt" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- </div>
- <div class="md-source__repository">
- {{ config.repo_name }}
- </div>
-</a>
diff --git a/dev/src/material/templates/partials/tabs-item.html b/dev/src/material/templates/partials/tabs-item.html
deleted file mode 100644
index 0e80035c..00000000
--- a/dev/src/material/templates/partials/tabs-item.html
+++ /dev/null
@@ -1,35 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% macro render_content(nav_item, ref = nav_item) %}
- {% if nav_item == ref or "navigation.indexes" in features %}
- {% if nav_item.is_index and nav_item.meta.icon %}
- {% include ".icons/" ~ nav_item.meta.icon ~ ".svg" %}
- {% endif %}
- {% endif %}
- {{ ref.title }}
-{% endmacro %}
-{% macro render(nav_item, ref = nav_item) %}
- {% set class = "md-tabs__item" %}
- {% if ref.active %}
- {% set class = class ~ " md-tabs__item--active" %}
- {% endif %}
- {% if nav_item.children %}
- {% set first = nav_item.children | first %}
- {% if first.children %}
- {{ render(first, ref) }}
- {% else %}
- <li class="{{ class }}">
- <a href="{{ first.url | url }}" class="md-tabs__link">
- {{ render_content(first, ref) }}
- </a>
- </li>
- {% endif %}
- {% else %}
- <li class="{{ class }}">
- <a href="{{ nav_item.url | url }}" class="md-tabs__link">
- {{ render_content(nav_item) }}
- </a>
- </li>
- {% endif %}
-{% endmacro %}
diff --git a/dev/src/material/templates/partials/tabs.html b/dev/src/material/templates/partials/tabs.html
deleted file mode 100644
index 04cb0c9c..00000000
--- a/dev/src/material/templates/partials/tabs.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% import "partials/tabs-item.html" as item with context %}
-<nav class="md-tabs" aria-label="{{ lang.t('tabs') }}" data-md-component="tabs">
- <div class="md-grid">
- <ul class="md-tabs__list">
- {% for nav_item in nav %}
- {{ item.render(nav_item) }}
- {% endfor %}
- </ul>
- </div>
-</nav>
diff --git a/dev/src/material/templates/partials/tags.html b/dev/src/material/templates/partials/tags.html
deleted file mode 100644
index 128e9595..00000000
--- a/dev/src/material/templates/partials/tags.html
+++ /dev/null
@@ -1,26 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% if page.meta and page.meta.hide %}
- {% set hidden = "hidden" if "tags" in page.meta.hide %}
-{% endif %}
-<nav class="md-tags" {{ hidden }}>
- {% for tag in tags %}
- {% set icon = "" %}
- {% if config.extra.tags %}
- {% set icon = " md-tag-icon" %}
- {% if tag.type %}
- {% set icon = icon ~ " md-tag--" ~ tag.type %}
- {% endif %}
- {% endif %}
- {% if tag.url %}
- <a href="{{ tag.url | url }}" class="md-tag{{ icon }}">
- {{- tag.name -}}
- </a>
- {% else %}
- <span class="md-tag{{ icon }}">
- {{- tag.name -}}
- </span>
- {% endif %}
- {% endfor %}
-</nav>
diff --git a/dev/src/material/templates/partials/toc-item.html b/dev/src/material/templates/partials/toc-item.html
deleted file mode 100644
index c8397272..00000000
--- a/dev/src/material/templates/partials/toc-item.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<li class="md-nav__item">
- <a href="{{ toc_item.url }}" class="md-nav__link">
- {{ toc_item.title }}
- </a>
- {% if toc_item.children %}
- <nav class="md-nav" aria-label="{{ toc_item.title | striptags }}">
- <ul class="md-nav__list">
- {% for toc_item in toc_item.children %}
- {% include "partials/toc-item.html" %}
- {% endfor %}
- </ul>
- </nav>
- {% endif %}
-</li>
diff --git a/dev/src/material/templates/partials/toc.html b/dev/src/material/templates/partials/toc.html
deleted file mode 100644
index aeeb3acb..00000000
--- a/dev/src/material/templates/partials/toc.html
+++ /dev/null
@@ -1,25 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-{% set title = lang.t("toc") %}
-{% if config.mdx_configs.toc and config.mdx_configs.toc.title %}
- {% set title = config.mdx_configs.toc.title %}
-{% endif %}
-<nav class="md-nav md-nav--secondary" aria-label="{{ title }}">
- {% set toc = page.toc %}
- {% set first = toc | first %}
- {% if first and first.level == 1 %}
- {% set toc = first.children %}
- {% endif %}
- {% if toc %}
- <label class="md-nav__title" for="__toc">
- <span class="md-nav__icon md-icon"></span>
- {{ title }}
- </label>
- <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
- {% for toc_item in toc %}
- {% include "partials/toc-item.html" %}
- {% endfor %}
- </ul>
- {% endif %}
-</nav>
diff --git a/dev/src/material/templates/partials/top.html b/dev/src/material/templates/partials/top.html
deleted file mode 100644
index 95da428b..00000000
--- a/dev/src/material/templates/partials/top.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<button type="button" class="md-top md-icon" data-md-component="top" hidden>
- {% set icon = config.theme.icon.top or "material/arrow-up" %}
- {% include ".icons/" ~ icon ~ ".svg" %}
- {{ lang.t("top") }}
-</button>
diff --git a/dev/src/material/templates/redirect.html b/dev/src/material/templates/redirect.html
deleted file mode 100644
index 97b6ef00..00000000
--- a/dev/src/material/templates/redirect.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{#-
- This file was automatically generated - do not edit
--#}
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <title>{{ config.site_name }}</title>
- <noscript>
- <meta http-equiv="refresh" content="0;url={{ page.meta.location }}">
- </noscript>
- <script>window.location.replace(["{{ page.meta.location }}",window.location.search,window.location.hash].join(""))</script>
- </head>
- <body></body>
-</html>
diff --git a/dev/src/overrides/assets/javascripts/components/_/index.ts b/dev/src/overrides/assets/javascripts/components/_/index.ts
deleted file mode 100644
index 3cb4c18e..00000000
--- a/dev/src/overrides/assets/javascripts/components/_/index.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { getElement, getElements } from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Component type
- */
-export type ComponentType =
- | "iconsearch" /* Icon search */
- | "iconsearch-query" /* Icon search input */
- | "iconsearch-result" /* Icon search results */
- | "sponsorship" /* Sponsorship */
- | "sponsorship-count" /* Sponsorship count */
- | "sponsorship-total" /* Sponsorship total */
-
-/**
- * Component
- *
- * @template T - Component type
- * @template U - Reference type
- */
-export type Component<
- T extends {} = {},
- U extends HTMLElement = HTMLElement
-> =
- T & {
- ref: U /* Component reference */
- }
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Component type map
- */
-interface ComponentTypeMap {
- "iconsearch": HTMLElement /* Icon search */
- "iconsearch-query": HTMLInputElement /* Icon search input */
- "iconsearch-result": HTMLElement /* Icon search results */
- "sponsorship": HTMLElement /* Sponsorship */
- "sponsorship-count": HTMLElement /* Sponsorship count */
- "sponsorship-total": HTMLElement /* Sponsorship total */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve the element for a given component or throw a reference error
- *
- * @template T - Component type
- *
- * @param type - Component type
- * @param node - Node of reference
- *
- * @returns Element
- */
-export function getComponentElement<T extends ComponentType>(
- type: T, node: ParentNode = document
-): ComponentTypeMap[T] {
- return getElement(`[data-mdx-component=${type}]`, node)
-}
-
-/**
- * Retrieve all elements for a given component
- *
- * @template T - Component type
- *
- * @param type - Component type
- * @param node - Node of reference
- *
- * @returns Elements
- */
-export function getComponentElements<T extends ComponentType>(
- type: T, node: ParentNode = document
-): ComponentTypeMap[T][] {
- return getElements(`[data-mdx-component=${type}]`, node)
-}
diff --git a/dev/src/overrides/assets/javascripts/components/iconsearch/_/index.ts b/dev/src/overrides/assets/javascripts/components/iconsearch/_/index.ts
deleted file mode 100644
index f509a6f9..00000000
--- a/dev/src/overrides/assets/javascripts/components/iconsearch/_/index.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { Observable, merge } from "rxjs"
-
-import { configuration } from "~/_"
-import { requestJSON } from "~/browser"
-
-import { Component, getComponentElement } from "../../_"
-import {
- IconSearchQuery,
- mountIconSearchQuery
-} from "../query"
-import {
- IconSearchResult,
- mountIconSearchResult
-} from "../result"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Icon category
- */
-export interface IconCategory {
- base: string /* Category base URL */
- data: Record<string, string> /* Category data */
-}
-
-/**
- * Icon search index
- */
-export interface IconSearchIndex {
- icons: IconCategory /* Icons */
- emojis: IconCategory /* Emojis */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Icon search
- */
-export type IconSearch =
- | IconSearchQuery
- | IconSearchResult
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount icon search
- *
- * @param el - Icon search element
- *
- * @returns Icon search component observable
- */
-export function mountIconSearch(
- el: HTMLElement
-): Observable<Component<IconSearch>> {
- const config = configuration()
- const index$ = requestJSON<IconSearchIndex>(
- new URL("assets/javascripts/iconsearch_index.json", config.base)
- )
-
- /* Retrieve query and result components */
- const query = getComponentElement("iconsearch-query", el)
- const result = getComponentElement("iconsearch-result", el)
-
- /* Create and return component */
- const query$ = mountIconSearchQuery(query)
- const result$ = mountIconSearchResult(result, { index$, query$ })
- return merge(query$, result$)
-}
diff --git a/dev/src/overrides/assets/javascripts/components/iconsearch/index.ts b/dev/src/overrides/assets/javascripts/components/iconsearch/index.ts
deleted file mode 100644
index 9d856774..00000000
--- a/dev/src/overrides/assets/javascripts/components/iconsearch/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./query"
-export * from "./result"
diff --git a/dev/src/overrides/assets/javascripts/components/iconsearch/query/index.ts b/dev/src/overrides/assets/javascripts/components/iconsearch/query/index.ts
deleted file mode 100644
index 03a3daad..00000000
--- a/dev/src/overrides/assets/javascripts/components/iconsearch/query/index.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- combineLatest,
- delay,
- distinctUntilChanged,
- filter,
- fromEvent,
- map,
- merge,
- startWith,
- withLatestFrom
-} from "rxjs"
-
-import { watchElementFocus } from "~/browser"
-
-import { Component } from "../../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Icon search query
- */
-export interface IconSearchQuery {
- value: string /* Query value */
- focus: boolean /* Query focus */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount icon search query
- *
- * @param el - Icon search query element
- *
- * @returns Icon search query component observable
- */
-export function mountIconSearchQuery(
- el: HTMLInputElement
-): Observable<Component<IconSearchQuery, HTMLInputElement>> {
-
- /* Intercept focus and input events */
- const focus$ = watchElementFocus(el)
- const value$ = merge(
- fromEvent(el, "keyup"),
- fromEvent(el, "focus").pipe(delay(1))
- )
- .pipe(
- map(() => el.value),
- startWith(el.value),
- distinctUntilChanged(),
- )
-
- /* Log search on blur */
- focus$
- .pipe(
- filter(active => !active),
- withLatestFrom(value$)
- )
- .subscribe(([, value]) => {
- const path = document.location.pathname
- if (typeof ga === "function" && value.length)
- ga("send", "pageview", `${path}?q=[icon]+${value}`)
- })
-
- /* Combine into single observable */
- return combineLatest([value$, focus$])
- .pipe(
- map(([value, focus]) => ({ ref: el, value, focus })),
- )
-}
diff --git a/dev/src/overrides/assets/javascripts/components/iconsearch/result/index.ts b/dev/src/overrides/assets/javascripts/components/iconsearch/result/index.ts
deleted file mode 100644
index 2b9d97fb..00000000
--- a/dev/src/overrides/assets/javascripts/components/iconsearch/result/index.ts
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { filter as search } from "fuzzaldrin-plus"
-import {
- Observable,
- Subject,
- bufferCount,
- combineLatest,
- distinctUntilKeyChanged,
- filter,
- finalize,
- map,
- merge,
- of,
- switchMap,
- tap,
- withLatestFrom,
- zipWith
-} from "rxjs"
-
-import {
- getElement,
- watchElementBoundary
-} from "~/browser"
-import { round } from "~/utilities"
-
-import { Icon, renderIconSearchResult } from "_/templates"
-
-import { Component } from "../../_"
-import { IconSearchIndex } from "../_"
-import { IconSearchQuery } from "../query"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Icon search result
- */
-export interface IconSearchResult {
- data: Icon[] /* Search result data */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- index$: Observable<IconSearchIndex> /* Search index observable */
- query$: Observable<IconSearchQuery> /* Search query observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- index$: Observable<IconSearchIndex> /* Search index observable */
- query$: Observable<IconSearchQuery> /* Search query observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch icon search result
- *
- * @param el - Icon search result element
- * @param options - Options
- *
- * @returns Icon search result observable
- */
-export function watchIconSearchResult(
- el: HTMLElement, { index$, query$ }: WatchOptions
-): Observable<IconSearchResult> {
- switch (el.getAttribute("data-mdx-mode")) {
-
- case "file":
- return combineLatest([
- query$.pipe(distinctUntilKeyChanged("value")),
- index$
- .pipe(
- map(({ icons }) => Object.values(icons.data)
- .map(icon => icon.replace(/\.svg$/, ""))
- )
- )
- ])
- .pipe(
- map(([{ value }, data]) => search(data, value)),
- switchMap(files => index$.pipe(
- map(({ icons }) => ({
- data: files.map<Icon>(shortcode => {
- return {
- shortcode,
- url: [
- icons.base,
- shortcode,
- ".svg"
- ].join("")
- }
- })
- }))
- ))
- )
-
- default:
- return combineLatest([
- query$.pipe(distinctUntilKeyChanged("value")),
- index$
- .pipe(
- map(({ icons, emojis }) => [
- ...Object.keys(icons.data),
- ...Object.keys(emojis.data)
- ])
- )
- ])
- .pipe(
- map(([{ value }, data]) => search(data, value)),
- switchMap(shortcodes => index$.pipe(
- map(({ icons, emojis }) => ({
- data: shortcodes.map<Icon>(shortcode => {
- const category =
- shortcode in icons.data
- ? icons
- : emojis
- return {
- shortcode,
- url: [
- category.base,
- category.data[shortcode]
- ].join("")
- }
- })
- }))
- ))
- )
- }
-}
-
-/**
- * Mount icon search result
- *
- * @param el - Icon search result element
- * @param options - Options
- *
- * @returns Icon search result component observable
- */
-export function mountIconSearchResult(
- el: HTMLElement, { index$, query$ }: MountOptions
-): Observable<Component<IconSearchResult, HTMLElement>> {
- const push$ = new Subject<IconSearchResult>()
- const boundary$ = watchElementBoundary(el)
- .pipe(
- filter(Boolean)
- )
-
- /* Update search result metadata */
- const meta = getElement(":scope > :first-child", el)
- push$
- .pipe(
- withLatestFrom(query$)
- )
- .subscribe(([{ data }, { value }]) => {
- if (value) {
- switch (data.length) {
-
- /* No results */
- case 0:
- meta.textContent = "No matches"
- break
-
- /* One result */
- case 1:
- meta.textContent = "1 match"
- break
-
- /* Multiple result */
- default:
- meta.textContent = `${round(data.length)} matches`
- }
- } else {
- meta.textContent = "Type to start searching"
- }
- })
-
- /* Update icon search result list */
- const file = el.getAttribute("data-mdx-mode") === "file"
- const list = getElement(":scope > :last-child", el)
- push$
- .pipe(
- tap(() => list.innerHTML = ""),
- switchMap(({ data }) => merge(
- of(...data.slice(0, 10)),
- of(...data.slice(10))
- .pipe(
- bufferCount(10),
- zipWith(boundary$),
- switchMap(([chunk]) => chunk)
- )
- )),
- withLatestFrom(query$)
- )
- .subscribe(([result, { value }]) => list.appendChild(
- renderIconSearchResult(result, value, file)
- ))
-
- /* Create and return component */
- return watchIconSearchResult(el, { query$, index$ })
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
-}
diff --git a/dev/src/overrides/assets/javascripts/components/index.ts b/dev/src/overrides/assets/javascripts/components/index.ts
deleted file mode 100644
index ec6c9dce..00000000
--- a/dev/src/overrides/assets/javascripts/components/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./iconsearch"
-export * from "./sponsorship"
diff --git a/dev/src/overrides/assets/javascripts/components/sponsorship/index.ts b/dev/src/overrides/assets/javascripts/components/sponsorship/index.ts
deleted file mode 100644
index 711f423a..00000000
--- a/dev/src/overrides/assets/javascripts/components/sponsorship/index.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { Observable, map } from "rxjs"
-
-import { getElement, requestJSON } from "~/browser"
-
-import { renderPrivateSponsor, renderPublicSponsor } from "_/templates"
-
-import { Component, getComponentElement } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Sponsor type
- */
-export type SponsorType =
- | "user" /* Sponsor is a user */
- | "organization" /* Sponsor is an organization */
-
-/**
- * Sponsor visibility
- */
-export type SponsorVisibility =
- | "public" /* Sponsor is a user */
- | "private" /* Sponsor is an organization */
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Sponsor user
- */
-export interface SponsorUser {
- type: SponsorType /* Sponsor type */
- name: string /* Sponsor login name */
- image: string /* Sponsor image URL */
- url: string /* Sponsor URL */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Public sponsor
- */
-export interface PublicSponsor {
- type: "public" /* Sponsor visibility */
- user: SponsorUser /* Sponsor user */
-}
-
-/**
- * Private sponsor
- */
-export interface PrivateSponsor {
- type: "private" /* Sponsor visibility */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Sponsor
- */
-export type Sponsor =
- | PublicSponsor
- | PrivateSponsor
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Sponsorship
- */
-export interface Sponsorship {
- sponsors: Sponsor[] /* Sponsors */
- total: number /* Total amount */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount sponsorship
- *
- * @param el - Sponsorship element
- *
- * @returns Sponsorship component observable
- */
-export function mountSponsorship(
- el: HTMLElement
-): Observable<Component<Sponsorship>> {
- const sponsorship$ = requestJSON<Sponsorship>(
- "https://3if8u9o552.execute-api.us-east-1.amazonaws.com/_/"
- )
-
- /* Retrieve adjacent components */
- const count = getComponentElement("sponsorship-count")
- const total = getComponentElement("sponsorship-total")
-
- /* Render sponsorship */
- sponsorship$.subscribe(sponsorship => {
- el.removeAttribute("hidden")
-
- /* Render public sponsors with avatar and links */
- const list = getElement(":scope > :first-child", el)
- for (const sponsor of sponsorship.sponsors)
- if (sponsor.type === "public")
- list.appendChild(renderPublicSponsor(sponsor.user))
-
- /* Render combined private sponsors */
- list.appendChild(renderPrivateSponsor(
- sponsorship.sponsors.filter(({ type }) => (
- type === "private"
- )).length
- ))
-
- /* Render sponsorship count and total */
- count.innerText = `${sponsorship.sponsors.length}`
- total.innerText = `$ ${sponsorship.total
- .toString()
- .replace(/\B(?=(\d{3})+(?!\d))/g, ",")
- } a month`
- })
-
- // /* Create and return component */
- return sponsorship$
- .pipe(
- map(state => ({ ref: el, ...state }))
- )
-}
diff --git a/dev/src/overrides/assets/javascripts/custom.9c11c319.min.js b/dev/src/overrides/assets/javascripts/custom.9c11c319.min.js
new file mode 100644
index 00000000..3ae7f9d1
--- /dev/null
+++ b/dev/src/overrides/assets/javascripts/custom.9c11c319.min.js
@@ -0,0 +1,18 @@
+"use strict";(()=>{var ho=Object.create;var Tr=Object.defineProperty;var vo=Object.getOwnPropertyDescriptor;var xo=Object.getOwnPropertyNames,Kr=Object.getOwnPropertySymbols,bo=Object.getPrototypeOf,Yr=Object.prototype.hasOwnProperty,yo=Object.prototype.propertyIsEnumerable;var Jr=(e,r,t)=>r in e?Tr(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,Ke=(e,r)=>{for(var t in r||(r={}))Yr.call(r,t)&&Jr(e,t,r[t]);if(Kr)for(var t of Kr(r))yo.call(r,t)&&Jr(e,t,r[t]);return e};var Te=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var go=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of xo(r))!Yr.call(e,n)&&n!==t&&Tr(e,n,{get:()=>r[n],enumerable:!(o=vo(r,n))||o.enumerable});return e};var Gr=(e,r,t)=>(t=e!=null?ho(bo(e)):{},go(r||!e||!e.__esModule?Tr(t,"default",{value:e,enumerable:!0}):t,e));var qe=Te(X=>{(function(){var e,r,t,o,n,i,f,s,u,a,c,p,l,v,d,m,x,w,E,R;R=150,a=20,E=150,u=.75,X.score=function(h,b,S){var T,y,g,_;return y=S.preparedQuery,T=S.allowErrors,T||n(h,y.core_lw,y.core_up)?(_=h.toLowerCase(),g=r(h,_,y),Math.ceil(g)):0},X.isMatch=n=function(h,b,S){var T,y,g,_,F,U,M;if(g=h.length,_=b.length,!g||_>g)return!1;for(T=-1,y=-1;++y<_;){for(F=b.charCodeAt(y),U=S.charCodeAt(y);++T<g&&(M=h.charCodeAt(T),!(M===F||M===U)););if(T===g)return!1}return!0},X.computeScore=r=function(h,b,S){var T,y,g,_,F,U,M,H,I,j,V,re,q,ae,de,te,ve,fe,wr,Oe,Qe,Sr,Er,Or;if(de=S.query,te=S.query_lw,j=h.length,q=de.length,T=c(h,b,de,te),y=T.score,T.count===q)return v(q,j,y,T.pos);if(ae=b.indexOf(te),ae>-1)return d(h,b,de,te,ae,q,j);for(Oe=new Array(q),F=new Array(q),Or=w(q,j),V=Math.ceil(u*q)+5,re=V,M=!0,I=-1;++I<q;)Oe[I]=0,F[I]=0;for(H=-1;++H<j;){if(Sr=b[H],!Sr.charCodeAt(0)in S.charCodes){if(M){for(I=-1;++I<q;)F[I]=0;M=!1}continue}for(fe=0,wr=0,_=0,ve=!0,M=!0,I=-1;++I<q;){if(Qe=Oe[I],Qe>fe&&(fe=Qe),U=0,te[I]===Sr)if(Er=s(H,h,b),U=_>0?_:l(h,b,de,te,H,I,Er),g=wr+p(H,I,Er,y,U),g>fe)fe=g,re=V;else{if(ve&&--re<=0)return Math.max(fe,Oe[q-1])*Or;ve=!1}wr=Qe,_=F[I],F[I]=U,Oe[I]=fe}}return fe=Oe[q-1],fe*Or},X.isWordStart=s=function(h,b,S){var T,y;return h===0?!0:(T=b[h],y=b[h-1],i(y)||T!==S[h]&&y===S[h-1])},X.isWordEnd=f=function(h,b,S,T){var y,g;return h===T-1?!0:(y=b[h],g=b[h+1],i(g)||y===S[h]&&g!==S[h+1])},i=function(h){return h===" "||h==="."||h==="-"||h==="_"||h==="/"||h==="\\"},x=function(h){var b;return h<a?(b=a-h,100+b*b):Math.max(100+a-h,0)},X.scoreSize=w=function(h,b){return E/(E+Math.abs(b-h))},v=function(h,b,S,T){return 2*h*(R*S+x(T))*w(h,b)},X.scorePattern=m=function(h,b,S,T,y){var g,_;return _=h,g=6,S===h&&(g+=2),T&&(g+=3),y&&(g+=1),h===b&&(T&&(S===b?_+=2:_+=1),y&&(g+=1)),S+_*(_+g)},X.scoreCharacter=p=function(h,b,S,T,y){var g;return g=x(h),S?g+R*((T>y?T:y)+10):g+R*y},X.scoreConsecutives=l=function(h,b,S,T,y,g,_){var F,U,M,H,I,j,V;for(U=h.length,H=S.length,M=U-y,I=H-g,F=M<I?M:I,j=0,V=0,S[g]===h[y]&&j++;++V<F&&T[++g]===b[++y];)S[g]===h[y]&&j++;return V<F&&y--,V===1?1+2*j:m(V,H,j,_,f(y,h,b,U))},X.scoreExactMatch=d=function(h,b,S,T,y,g,_){var F,U,M,H,I;for(I=s(y,h,b),I||(M=b.indexOf(T,y+1),M>-1&&(I=s(M,h,b),I&&(y=M))),U=-1,H=0;++U<g;)S[y+U]===h[U]&&H++;return F=f(y+g-1,h,b,_),v(g,_,m(g,g,H,I,F),y)},e=function(){function h(b,S,T){this.score=b,this.pos=S,this.count=T}return h}(),t=new e(0,.1,0),X.scoreAcronyms=c=function(h,b,S,T){var y,g,_,F,U,M,H,I,j,V,re;if(U=h.length,M=S.length,!(U>1&&M>1))return t;for(y=0,V=0,re=0,I=0,_=-1,F=-1;++F<M;){if(H=T[F],i(H))if(_=b.indexOf(H,_+1),_>-1){V++;continue}else break;for(;++_<U;)if(H===b[_]&&s(_,h,b)){S[F]===h[_]&&I++,re+=_,y++;break}if(_===U)break}return y<2?t:(g=y===M?o(h,b,S,y):!1,j=m(y,M,I,!0,g),new e(j,re/y,y+V))},o=function(h,b,S,T){var y,g,_,F;if(_=h.length,F=S.length,y=0,_>12*F)return!1;for(g=-1;++g<_;)if(s(g,h,b)&&++y>T)return!1;return!0}}).call(X)});var yr=Te(De=>{(function(){var e,r,t,o,n,i,f,s,u,a;a=qe(),i=a.isMatch,e=a.computeScore,s=a.scoreSize,u=20,t=2.5,De.score=function(c,p,l){var v,d,m,x;return d=l.preparedQuery,v=l.allowErrors,v||i(c,d.core_lw,d.core_up)?(x=c.toLowerCase(),m=e(c,x,d),m=f(c,x,m,l),Math.ceil(m)):0},f=function(c,p,l,v){var d,m,x,w,E,R,h,b,S,T;if(l===0)return 0;for(S=v.preparedQuery,T=v.useExtensionBonus,b=v.pathSeparator,E=c.length-1;c[E]===b;)E--;if(x=c.lastIndexOf(b,E),h=E-x,R=1,T&&(R+=n(p,S.ext,x,E,2),l*=R),x===-1)return l;for(w=S.depth;x>-1&&w-- >0;)x=c.lastIndexOf(b,x-1);return m=x===-1?l:R*e(c.slice(x+1,E+1),p.slice(x+1,E+1),S),d=.5*u/(u+r(c,E+1,b)),d*m+(1-d)*l*s(0,t*h)},De.countDir=r=function(c,p,l){var v,d;if(p<1)return 0;for(v=0,d=-1;++d<p&&c[d]===l;);for(;++d<p;)if(c[d]===l)for(v++;++d<p&&c[d]===l;);return v},De.getExtension=o=function(c){var p;return p=c.lastIndexOf("."),p<0?"":c.substr(p+1)},n=function(c,p,l,v,d){var m,x,w,E;if(!p.length||(E=c.lastIndexOf(".",v),!(E>l)))return 0;for(w=p.length,m=v-E,m<w&&(w=m,m=p.length),E++,x=-1;++x<w&&c[E+x]===p[x];);return x===0&&d>0?.9*n(c,p,l,E-2,d-1):x/m}}).call(De)});var qr=Te((Xt,Bt)=>{(function(){var e,r,t,o,n,i,f,s;s=yr(),t=s.countDir,n=s.getExtension,Bt.exports=e=function(){function u(a,c){var p,l,v;if(v=c!=null?c:{},p=v.optCharRegEx,l=v.pathSeparator,!(a&&a.length))return null;this.query=a,this.query_lw=a.toLowerCase(),this.core=r(a,p),this.core_lw=this.core.toLowerCase(),this.core_up=f(this.core),this.depth=t(a,a.length,l),this.ext=n(this.query_lw),this.charCodes=o(this.query_lw)}return u}(),i=/[ _\-:\/\\]/g,r=function(u,a){return a==null&&(a=i),u.replace(a,"")},f=function(u){var a,c,p,l;for(c="",p=0,l=u.length;p<l;p++)a=u[p],c+=a.toUpperCase()[0];return c},o=function(u){var a,c,p;for(p=u.length,c=-1,a=[];++c<p;)a[u.charCodeAt(c)]=!0;return a}}).call(Xt)});var ro=Te((Zt,eo)=>{(function(){var e,r,t,o,n;o=qe(),r=yr(),e=qr(),t=function(i){return i.candidate},n=function(i,f){return f.score-i.score},eo.exports=function(i,f,s){var u,a,c,p,l,v,d,m,x,w,E,R,h;for(m=[],c=s.key,l=s.maxResults,p=s.maxInners,E=s.usePathScoring,x=p!=null&&p>0?p:i.length+1,u=c!=null,d=E?r:o,R=0,h=i.length;R<h&&(a=i[R],w=u?a[c]:a,!(!!w&&(v=d.score(w,f,s),v>0&&(m.push({candidate:a,score:v}),!--x))));R++);return m.sort(n),i=m.map(t),l!=null&&(i=i.slice(0,l)),i}}).call(Zt)});var to=Te(gr=>{(function(){var e,r,t,o,n,i,f,s,u,a;a=qe(),t=a.isMatch,o=a.isWordStart,u=a.scoreConsecutives,s=a.scoreCharacter,f=a.scoreAcronyms,gr.match=n=function(c,p,l){var v,d,m,x,w,E;return v=l.allowErrors,w=l.preparedQuery,x=l.pathSeparator,v||t(c,w.core_lw,w.core_up)?(E=c.toLowerCase(),m=r(c,E,w),m.length===0||c.indexOf(x)>-1&&(d=e(c,E,w,x),m=i(m,d)),m):[]},gr.wrap=function(c,p,l){var v,d,m,x,w,E,R,h,b;if(l.wrap!=null&&(b=l.wrap,E=b.tagClass,h=b.tagOpen,R=b.tagClose),E==null&&(E="highlight"),h==null&&(h='<strong class="'+E+'">'),R==null&&(R="</strong>"),c===p)return h+c+R;if(m=n(c,p,l),m.length===0)return c;for(x="",v=-1,w=0;++v<m.length;){for(d=m[v],d>w&&(x+=c.substring(w,d),w=d);++v<m.length;)if(m[v]===d+1)d++;else{v--;break}d++,d>w&&(x+=h,x+=c.substring(w,d),x+=R,w=d)}return w<=c.length-1&&(x+=c.substring(w)),x},e=function(c,p,l,v){var d,m,x;for(x=c.length-1;c[x]===v;)x--;if(d=c.lastIndexOf(v,x),d===-1)return[];for(m=l.depth;m-- >0;)if(d=c.lastIndexOf(v,d-1),d===-1)return[];return d++,x++,r(c.slice(d,x),p.slice(d,x),l,d)},i=function(c,p){var l,v,d,m,x,w,E;if(x=c.length,w=p.length,w===0)return c.slice();if(x===0)return p.slice();for(d=-1,m=0,v=p[m],E=[];++d<x;){for(l=c[d];v<=l&&++m<w;)v<l&&E.push(v),v=p[m];E.push(l)}for(;m<w;)E.push(p[m++]);return E},r=function(c,p,l,v){var d,m,x,w,E,R,h,b,S,T,y,g,_,F,U,M,H,I,j,V,re,q,ae,de,te,ve;for(v==null&&(v=0),I=l.query,j=l.query_lw,_=c.length,M=I.length,E=f(c,p,I,j).score,q=new Array(M),S=new Array(M),x=0,w=1,m=2,d=3,ve=new Array(_*M),H=-1,g=-1;++g<M;)q[g]=0,S[g]=0;for(y=-1;++y<_;)for(V=0,ae=0,b=0,de=p[y],g=-1;++g<M;)T=0,R=0,re=ae,j[g]===de&&(te=o(y,c,p),T=b>0?b:u(c,p,I,j,y,g,te),R=re+s(y,g,te,E,T)),ae=q[g],b=S[g],V>ae?U=m:(V=ae,U=w),R>V?(V=R,U=d):T=0,q[g]=V,S[g]=T,ve[++H]=V>0?U:x;for(y=_-1,g=M-1,H=y*M+g,h=!0,F=[];h&&y>=0&&g>=0;)switch(ve[H]){case w:y--,H-=M;break;case m:g--,H--;break;case d:F.push(y+v),g--,y--,H-=M+1;break;default:h=!1}return F.reverse(),F}}).call(gr)});var Dr=Te((oo,no)=>{(function(){var e,r,t,o,n,i,f,s;t=ro(),o=to(),s=qe(),i=yr(),e=qr(),f=null,r=(typeof process!="undefined"&&process!==null?process.platform:void 0)==="win32"?"\\":"/",no.exports={filter:function(u,a,c){return c==null&&(c={}),a!=null&&a.length&&(u!=null&&u.length)?(c=n(c,a),t(u,a,c)):[]},score:function(u,a,c){return c==null&&(c={}),u!=null&&u.length&&(a!=null&&a.length)?(c=n(c,a),c.usePathScoring?i.score(u,a,c):s.score(u,a,c)):0},match:function(u,a,c){var p,l,v;return c==null&&(c={}),u?a?u===a?function(){v=[];for(var d=0,m=u.length;0<=m?d<m:d>m;0<=m?d++:d--)v.push(d);return v}.apply(this):(c=n(c,a),o.match(u,a,c)):[]:[]},wrap:function(u,a,c){return c==null&&(c={}),u?a?(c=n(c,a),o.wrap(u,a,c)):[]:[]},prepareQuery:function(u,a){return a==null&&(a={}),a=n(a,u),a.preparedQuery}},n=function(u,a){return u.allowErrors==null&&(u.allowErrors=!1),u.usePathScoring==null&&(u.usePathScoring=!0),u.useExtensionBonus==null&&(u.useExtensionBonus=!1),u.pathSeparator==null&&(u.pathSeparator=r),u.optCharRegEx==null&&(u.optCharRegEx=null),u.wrap==null&&(u.wrap=null),u.preparedQuery==null&&(u.preparedQuery=f&&f.query===a?f:f=new e(a,u)),u}}).call(oo)});/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */var _r=function(e,r){return _r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,o){t.__proto__=o}||function(t,o){for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])},_r(e,r)};function $(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");_r(e,r);function t(){this.constructor=e}e.prototype=r===null?Object.create(r):(t.prototype=r.prototype,new t)}function Xr(e,r,t,o){function n(i){return i instanceof t?i:new t(function(f){f(i)})}return new(t||(t=Promise))(function(i,f){function s(c){try{a(o.next(c))}catch(p){f(p)}}function u(c){try{a(o.throw(c))}catch(p){f(p)}}function a(c){c.done?i(c.value):n(c.value).then(s,u)}a((o=o.apply(e,r||[])).next())})}function Je(e,r){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},o,n,i,f;return f={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(f[Symbol.iterator]=function(){return this}),f;function s(a){return function(c){return u([a,c])}}function u(a){if(o)throw new TypeError("Generator is already executing.");for(;t;)try{if(o=1,n&&(i=a[0]&2?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[a[0]&2,i.value]),a[0]){case 0:case 1:i=a;break;case 4:return t.label++,{value:a[1],done:!1};case 5:t.label++,n=a[1],a=[0];continue;case 7:a=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(a[0]===6||a[0]===2)){t=0;continue}if(a[0]===3&&(!i||a[1]>i[0]&&a[1]<i[3])){t.label=a[1];break}if(a[0]===6&&t.label<i[1]){t.label=i[1],i=a;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(a);break}i[2]&&t.ops.pop(),t.trys.pop();continue}a=r.call(e,t)}catch(c){a=[6,c],n=0}finally{o=i=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}}function Y(e){var r=typeof Symbol=="function"&&Symbol.iterator,t=r&&e[r],o=0;if(t)return t.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,r){var t=typeof Symbol=="function"&&e[Symbol.iterator];if(!t)return e;var o=t.call(e),n,i=[],f;try{for(;(r===void 0||r-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(s){f={error:s}}finally{try{n&&!n.done&&(t=o.return)&&t.call(o)}finally{if(f)throw f.error}}return i}function z(e,r,t){if(t||arguments.length===2)for(var o=0,n=r.length,i;o<n;o++)(i||!(o in r))&&(i||(i=Array.prototype.slice.call(r,0,o)),i[o]=r[o]);return e.concat(i||Array.prototype.slice.call(r))}function xe(e){return this instanceof xe?(this.v=e,this):new xe(e)}function Br(e,r,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=t.apply(e,r||[]),n,i=[];return n={},f("next"),f("throw"),f("return"),n[Symbol.asyncIterator]=function(){return this},n;function f(l){o[l]&&(n[l]=function(v){return new Promise(function(d,m){i.push([l,v,d,m])>1||s(l,v)})})}function s(l,v){try{u(o[l](v))}catch(d){p(i[0][3],d)}}function u(l){l.value instanceof xe?Promise.resolve(l.value.v).then(a,c):p(i[0][2],l)}function a(l){s("next",l)}function c(l){s("throw",l)}function p(l,v){l(v),i.shift(),i.length&&s(i[0][0],i[0][1])}}function Zr(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=e[Symbol.asyncIterator],t;return r?r.call(e):(e=typeof Y=="function"?Y(e):e[Symbol.iterator](),t={},o("next"),o("throw"),o("return"),t[Symbol.asyncIterator]=function(){return this},t);function o(i){t[i]=e[i]&&function(f){return new Promise(function(s,u){f=e[i](f),n(s,u,f.done,f.value)})}}function n(i,f,s,u){Promise.resolve(u).then(function(a){i({value:a,done:s})},f)}}function O(e){return typeof e=="function"}function Ye(e){var r=function(o){Error.call(o),o.stack=new Error().stack},t=e(r);return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var Ge=Ye(function(e){return function(t){e(this),this.message=t?t.length+` errors occurred during unsubscription:
+`+t.map(function(o,n){return n+1+") "+o.toString()}).join(`
+ `):"",this.name="UnsubscriptionError",this.errors=t}});function ue(e,r){if(e){var t=e.indexOf(r);0<=t&&e.splice(t,1)}}var oe=function(){function e(r){this.initialTeardown=r,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var r,t,o,n,i;if(!this.closed){this.closed=!0;var f=this._parentage;if(f)if(this._parentage=null,Array.isArray(f))try{for(var s=Y(f),u=s.next();!u.done;u=s.next()){var a=u.value;a.remove(this)}}catch(m){r={error:m}}finally{try{u&&!u.done&&(t=s.return)&&t.call(s)}finally{if(r)throw r.error}}else f.remove(this);var c=this.initialTeardown;if(O(c))try{c()}catch(m){i=m instanceof Ge?m.errors:[m]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var l=Y(p),v=l.next();!v.done;v=l.next()){var d=v.value;try{et(d)}catch(m){i=i!=null?i:[],m instanceof Ge?i=z(z([],W(i)),W(m.errors)):i.push(m)}}}catch(m){o={error:m}}finally{try{v&&!v.done&&(n=l.return)&&n.call(l)}finally{if(o)throw o.error}}}if(i)throw new Ge(i)}},e.prototype.add=function(r){var t;if(r&&r!==this)if(this.closed)et(r);else{if(r instanceof e){if(r.closed||r._hasParent(this))return;r._addParent(this)}(this._finalizers=(t=this._finalizers)!==null&&t!==void 0?t:[]).push(r)}},e.prototype._hasParent=function(r){var t=this._parentage;return t===r||Array.isArray(t)&&t.includes(r)},e.prototype._addParent=function(r){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(r),t):t?[t,r]:r},e.prototype._removeParent=function(r){var t=this._parentage;t===r?this._parentage=null:Array.isArray(t)&&ue(t,r)},e.prototype.remove=function(r){var t=this._finalizers;t&&ue(t,r),r instanceof e&&r._removeParent(this)},e.EMPTY=function(){var r=new e;return r.closed=!0,r}(),e}();var Ar=oe.EMPTY;function Xe(e){return e instanceof oe||e&&"closed"in e&&O(e.remove)&&O(e.add)&&O(e.unsubscribe)}function et(e){O(e)?e():e.unsubscribe()}var ee={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var _e={setTimeout:function(e,r){for(var t=[],o=2;o<arguments.length;o++)t[o-2]=arguments[o];var n=_e.delegate;return n!=null&&n.setTimeout?n.setTimeout.apply(n,z([e,r],W(t))):setTimeout.apply(void 0,z([e,r],W(t)))},clearTimeout:function(e){var r=_e.delegate;return((r==null?void 0:r.clearTimeout)||clearTimeout)(e)},delegate:void 0};function Be(e){_e.setTimeout(function(){var r=ee.onUnhandledError;if(r)r(e);else throw e})}function ce(){}var rt=function(){return Ir("C",void 0,void 0)}();function tt(e){return Ir("E",void 0,e)}function ot(e){return Ir("N",e,void 0)}function Ir(e,r,t){return{kind:e,value:r,error:t}}var be=null;function Ae(e){if(ee.useDeprecatedSynchronousErrorHandling){var r=!be;if(r&&(be={errorThrown:!1,error:null}),e(),r){var t=be,o=t.errorThrown,n=t.error;if(be=null,o)throw n}}else e()}function nt(e){ee.useDeprecatedSynchronousErrorHandling&&be&&(be.errorThrown=!0,be.error=e)}var Ue=function(e){$(r,e);function r(t){var o=e.call(this)||this;return o.isStopped=!1,t?(o.destination=t,Xe(t)&&t.add(o)):o.destination=Oo,o}return r.create=function(t,o,n){return new ye(t,o,n)},r.prototype.next=function(t){this.isStopped?Mr(ot(t),this):this._next(t)},r.prototype.error=function(t){this.isStopped?Mr(tt(t),this):(this.isStopped=!0,this._error(t))},r.prototype.complete=function(){this.isStopped?Mr(rt,this):(this.isStopped=!0,this._complete())},r.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},r.prototype._next=function(t){this.destination.next(t)},r.prototype._error=function(t){try{this.destination.error(t)}finally{this.unsubscribe()}},r.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},r}(oe);var wo=Function.prototype.bind;function Cr(e,r){return wo.call(e,r)}var So=function(){function e(r){this.partialObserver=r}return e.prototype.next=function(r){var t=this.partialObserver;if(t.next)try{t.next(r)}catch(o){Ze(o)}},e.prototype.error=function(r){var t=this.partialObserver;if(t.error)try{t.error(r)}catch(o){Ze(o)}else Ze(r)},e.prototype.complete=function(){var r=this.partialObserver;if(r.complete)try{r.complete()}catch(t){Ze(t)}},e}(),ye=function(e){$(r,e);function r(t,o,n){var i=e.call(this)||this,f;if(O(t)||!t)f={next:t!=null?t:void 0,error:o!=null?o:void 0,complete:n!=null?n:void 0};else{var s;i&&ee.useDeprecatedNextContext?(s=Object.create(t),s.unsubscribe=function(){return i.unsubscribe()},f={next:t.next&&Cr(t.next,s),error:t.error&&Cr(t.error,s),complete:t.complete&&Cr(t.complete,s)}):f=t}return i.destination=new So(f),i}return r}(Ue);function Ze(e){ee.useDeprecatedSynchronousErrorHandling?nt(e):Be(e)}function Eo(e){throw e}function Mr(e,r){var t=ee.onStoppedNotification;t&&_e.setTimeout(function(){return t(e,r)})}var Oo={closed:!0,next:ce,error:Eo,complete:ce};var Ie=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}();function G(e){return e}function it(e){return e.length===0?G:e.length===1?e[0]:function(t){return e.reduce(function(o,n){return n(o)},t)}}var C=function(){function e(r){r&&(this._subscribe=r)}return e.prototype.lift=function(r){var t=new e;return t.source=this,t.operator=r,t},e.prototype.subscribe=function(r,t,o){var n=this,i=_o(r)?r:new ye(r,t,o);return Ae(function(){var f=n,s=f.operator,u=f.source;i.add(s?s.call(i,u):u?n._subscribe(i):n._trySubscribe(i))}),i},e.prototype._trySubscribe=function(r){try{return this._subscribe(r)}catch(t){r.error(t)}},e.prototype.forEach=function(r,t){var o=this;return t=at(t),new t(function(n,i){var f=new ye({next:function(s){try{r(s)}catch(u){i(u),f.unsubscribe()}},error:i,complete:n});o.subscribe(f)})},e.prototype._subscribe=function(r){var t;return(t=this.source)===null||t===void 0?void 0:t.subscribe(r)},e.prototype[Ie]=function(){return this},e.prototype.pipe=function(){for(var r=[],t=0;t<arguments.length;t++)r[t]=arguments[t];return it(r)(this)},e.prototype.toPromise=function(r){var t=this;return r=at(r),new r(function(o,n){var i;t.subscribe(function(f){return i=f},function(f){return n(f)},function(){return o(i)})})},e.create=function(r){return new e(r)},e}();function at(e){var r;return(r=e!=null?e:ee.Promise)!==null&&r!==void 0?r:Promise}function To(e){return e&&O(e.next)&&O(e.error)&&O(e.complete)}function _o(e){return e&&e instanceof Ue||To(e)&&Xe(e)}function Ao(e){return O(e==null?void 0:e.lift)}function A(e){return function(r){if(Ao(r))return r.lift(function(t){try{return e(t,this)}catch(o){this.error(o)}});throw new TypeError("Unable to lift unknown Observable type")}}function L(e,r,t,o,n){return new Io(e,r,t,o,n)}var Io=function(e){$(r,e);function r(t,o,n,i,f,s){var u=e.call(this,t)||this;return u.onFinalize=f,u.shouldUnsubscribe=s,u._next=o?function(a){try{o(a)}catch(c){t.error(c)}}:e.prototype._next,u._error=i?function(a){try{i(a)}catch(c){t.error(c)}finally{this.unsubscribe()}}:e.prototype._error,u._complete=n?function(){try{n()}catch(a){t.error(a)}finally{this.unsubscribe()}}:e.prototype._complete,u}return r.prototype.unsubscribe=function(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var o=this.closed;e.prototype.unsubscribe.call(this),!o&&((t=this.onFinalize)===null||t===void 0||t.call(this))}},r}(Ue);var Ce={schedule:function(e){var r=requestAnimationFrame,t=cancelAnimationFrame,o=Ce.delegate;o&&(r=o.requestAnimationFrame,t=o.cancelAnimationFrame);var n=r(function(i){t=void 0,e(i)});return new oe(function(){return t==null?void 0:t(n)})},requestAnimationFrame:function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var t=Ce.delegate;return((t==null?void 0:t.requestAnimationFrame)||requestAnimationFrame).apply(void 0,z([],W(e)))},cancelAnimationFrame:function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var t=Ce.delegate;return((t==null?void 0:t.cancelAnimationFrame)||cancelAnimationFrame).apply(void 0,z([],W(e)))},delegate:void 0};var ft=Ye(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}});var B=function(e){$(r,e);function r(){var t=e.call(this)||this;return t.closed=!1,t.currentObservers=null,t.observers=[],t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return r.prototype.lift=function(t){var o=new ut(this,this);return o.operator=t,o},r.prototype._throwIfClosed=function(){if(this.closed)throw new ft},r.prototype.next=function(t){var o=this;Ae(function(){var n,i;if(o._throwIfClosed(),!o.isStopped){o.currentObservers||(o.currentObservers=Array.from(o.observers));try{for(var f=Y(o.currentObservers),s=f.next();!s.done;s=f.next()){var u=s.value;u.next(t)}}catch(a){n={error:a}}finally{try{s&&!s.done&&(i=f.return)&&i.call(f)}finally{if(n)throw n.error}}}})},r.prototype.error=function(t){var o=this;Ae(function(){if(o._throwIfClosed(),!o.isStopped){o.hasError=o.isStopped=!0,o.thrownError=t;for(var n=o.observers;n.length;)n.shift().error(t)}})},r.prototype.complete=function(){var t=this;Ae(function(){if(t._throwIfClosed(),!t.isStopped){t.isStopped=!0;for(var o=t.observers;o.length;)o.shift().complete()}})},r.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(r.prototype,"observed",{get:function(){var t;return((t=this.observers)===null||t===void 0?void 0:t.length)>0},enumerable:!1,configurable:!0}),r.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},r.prototype._subscribe=function(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)},r.prototype._innerSubscribe=function(t){var o=this,n=this,i=n.hasError,f=n.isStopped,s=n.observers;return i||f?Ar:(this.currentObservers=null,s.push(t),new oe(function(){o.currentObservers=null,ue(s,t)}))},r.prototype._checkFinalizedStatuses=function(t){var o=this,n=o.hasError,i=o.thrownError,f=o.isStopped;n?t.error(i):f&&t.complete()},r.prototype.asObservable=function(){var t=new C;return t.source=this,t},r.create=function(t,o){return new ut(t,o)},r}(C);var ut=function(e){$(r,e);function r(t,o){var n=e.call(this)||this;return n.destination=t,n.source=o,n}return r.prototype.next=function(t){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,t)},r.prototype.error=function(t){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,t)},r.prototype.complete=function(){var t,o;(o=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||o===void 0||o.call(t)},r.prototype._subscribe=function(t){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(t))!==null&&n!==void 0?n:Ar},r}(B);var ze={now:function(){return(ze.delegate||Date).now()},delegate:void 0};var ct=function(e){$(r,e);function r(t,o,n){t===void 0&&(t=1/0),o===void 0&&(o=1/0),n===void 0&&(n=ze);var i=e.call(this)||this;return i._bufferSize=t,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,t),i._windowTime=Math.max(1,o),i}return r.prototype.next=function(t){var o=this,n=o.isStopped,i=o._buffer,f=o._infiniteTimeWindow,s=o._timestampProvider,u=o._windowTime;n||(i.push(t),!f&&i.push(s.now()+u)),this._trimBuffer(),e.prototype.next.call(this,t)},r.prototype._subscribe=function(t){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(t),n=this,i=n._infiniteTimeWindow,f=n._buffer,s=f.slice(),u=0;u<s.length&&!t.closed;u+=i?1:2)t.next(s[u]);return this._checkFinalizedStatuses(t),o},r.prototype._trimBuffer=function(){var t=this,o=t._bufferSize,n=t._timestampProvider,i=t._buffer,f=t._infiniteTimeWindow,s=(f?1:2)*o;if(o<1/0&&s<i.length&&i.splice(0,i.length-s),!f){for(var u=n.now(),a=0,c=1;c<i.length&&i[c]<=u;c+=2)a=c;a&&i.splice(0,a+1)}},r}(B);var st=function(e){$(r,e);function r(t,o){return e.call(this)||this}return r.prototype.schedule=function(t,o){return o===void 0&&(o=0),this},r}(oe);var Ve={setInterval:function(e,r){for(var t=[],o=2;o<arguments.length;o++)t[o-2]=arguments[o];var n=Ve.delegate;return n!=null&&n.setInterval?n.setInterval.apply(n,z([e,r],W(t))):setInterval.apply(void 0,z([e,r],W(t)))},clearInterval:function(e){var r=Ve.delegate;return((r==null?void 0:r.clearInterval)||clearInterval)(e)},delegate:void 0};var er=function(e){$(r,e);function r(t,o){var n=e.call(this,t,o)||this;return n.scheduler=t,n.work=o,n.pending=!1,n}return r.prototype.schedule=function(t,o){var n;if(o===void 0&&(o=0),this.closed)return this;this.state=t;var i=this.id,f=this.scheduler;return i!=null&&(this.id=this.recycleAsyncId(f,i,o)),this.pending=!0,this.delay=o,this.id=(n=this.id)!==null&&n!==void 0?n:this.requestAsyncId(f,this.id,o),this},r.prototype.requestAsyncId=function(t,o,n){return n===void 0&&(n=0),Ve.setInterval(t.flush.bind(t,this),n)},r.prototype.recycleAsyncId=function(t,o,n){if(n===void 0&&(n=0),n!=null&&this.delay===n&&this.pending===!1)return o;o!=null&&Ve.clearInterval(o)},r.prototype.execute=function(t,o){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(t,o);if(n)return n;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},r.prototype._execute=function(t,o){var n=!1,i;try{this.work(t)}catch(f){n=!0,i=f||new Error("Scheduled action threw falsy error")}if(n)return this.unsubscribe(),i},r.prototype.unsubscribe=function(){if(!this.closed){var t=this,o=t.id,n=t.scheduler,i=n.actions;this.work=this.state=this.scheduler=null,this.pending=!1,ue(i,this),o!=null&&(this.id=this.recycleAsyncId(n,o,null)),this.delay=null,e.prototype.unsubscribe.call(this)}},r}(st);var Lr=function(){function e(r,t){t===void 0&&(t=e.now),this.schedulerActionCtor=r,this.now=t}return e.prototype.schedule=function(r,t,o){return t===void 0&&(t=0),new this.schedulerActionCtor(this,r).schedule(o,t)},e.now=ze.now,e}();var rr=function(e){$(r,e);function r(t,o){o===void 0&&(o=Lr.now);var n=e.call(this,t,o)||this;return n.actions=[],n._active=!1,n}return r.prototype.flush=function(t){var o=this.actions;if(this._active){o.push(t);return}var n;this._active=!0;do if(n=t.execute(t.state,t.delay))break;while(t=o.shift());if(this._active=!1,n){for(;t=o.shift();)t.unsubscribe();throw n}},r}(Lr);var ge=new rr(er),pt=ge;var lt=function(e){$(r,e);function r(t,o){var n=e.call(this,t,o)||this;return n.scheduler=t,n.work=o,n}return r.prototype.requestAsyncId=function(t,o,n){return n===void 0&&(n=0),n!==null&&n>0?e.prototype.requestAsyncId.call(this,t,o,n):(t.actions.push(this),t._scheduled||(t._scheduled=Ce.requestAnimationFrame(function(){return t.flush(void 0)})))},r.prototype.recycleAsyncId=function(t,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,t,o,n);var f=t.actions;o!=null&&((i=f[f.length-1])===null||i===void 0?void 0:i.id)!==o&&(Ce.cancelAnimationFrame(o),t._scheduled=void 0)},r}(er);var mt=function(e){$(r,e);function r(){return e!==null&&e.apply(this,arguments)||this}return r.prototype.flush=function(t){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;t=t||n.shift();do if(i=t.execute(t.state,t.delay))break;while((t=n[0])&&t.id===o&&n.shift());if(this._active=!1,i){for(;(t=n[0])&&t.id===o&&n.shift();)t.unsubscribe();throw i}},r}(rr);var Pr=new mt(lt);var Me=new C(function(e){return e.complete()});function tr(e){return e&&O(e.schedule)}function Rr(e){return e[e.length-1]}function Le(e){return O(Rr(e))?e.pop():void 0}function ne(e){return tr(Rr(e))?e.pop():void 0}function dt(e,r){return typeof Rr(e)=="number"?e.pop():r}var Pe=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function or(e){return O(e==null?void 0:e.then)}function nr(e){return O(e[Ie])}function ir(e){return Symbol.asyncIterator&&O(e==null?void 0:e[Symbol.asyncIterator])}function ar(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Co(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var fr=Co();function ur(e){return O(e==null?void 0:e[fr])}function cr(e){return Br(this,arguments,function(){var t,o,n,i;return Je(this,function(f){switch(f.label){case 0:t=e.getReader(),f.label=1;case 1:f.trys.push([1,,9,10]),f.label=2;case 2:return[4,xe(t.read())];case 3:return o=f.sent(),n=o.value,i=o.done,i?[4,xe(void 0)]:[3,5];case 4:return[2,f.sent()];case 5:return[4,xe(n)];case 6:return[4,f.sent()];case 7:return f.sent(),[3,2];case 8:return[3,10];case 9:return t.releaseLock(),[7];case 10:return[2]}})})}function sr(e){return O(e==null?void 0:e.getReader)}function k(e){if(e instanceof C)return e;if(e!=null){if(nr(e))return Mo(e);if(Pe(e))return Lo(e);if(or(e))return Po(e);if(ir(e))return ht(e);if(ur(e))return Ro(e);if(sr(e))return ko(e)}throw ar(e)}function Mo(e){return new C(function(r){var t=e[Ie]();if(O(t.subscribe))return t.subscribe(r);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Lo(e){return new C(function(r){for(var t=0;t<e.length&&!r.closed;t++)r.next(e[t]);r.complete()})}function Po(e){return new C(function(r){e.then(function(t){r.closed||(r.next(t),r.complete())},function(t){return r.error(t)}).then(null,Be)})}function Ro(e){return new C(function(r){var t,o;try{for(var n=Y(e),i=n.next();!i.done;i=n.next()){var f=i.value;if(r.next(f),r.closed)return}}catch(s){t={error:s}}finally{try{i&&!i.done&&(o=n.return)&&o.call(n)}finally{if(t)throw t.error}}r.complete()})}function ht(e){return new C(function(r){Fo(e,r).catch(function(t){return r.error(t)})})}function ko(e){return ht(cr(e))}function Fo(e,r){var t,o,n,i;return Xr(this,void 0,void 0,function(){var f,s;return Je(this,function(u){switch(u.label){case 0:u.trys.push([0,5,6,11]),t=Zr(e),u.label=1;case 1:return[4,t.next()];case 2:if(o=u.sent(),!!o.done)return[3,4];if(f=o.value,r.next(f),r.closed)return[2];u.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return s=u.sent(),n={error:s},[3,11];case 6:return u.trys.push([6,,9,10]),o&&!o.done&&(i=t.return)?[4,i.call(t)]:[3,8];case 7:u.sent(),u.label=8;case 8:return[3,10];case 9:if(n)throw n.error;return[7];case 10:return[7];case 11:return r.complete(),[2]}})})}function K(e,r,t,o,n){o===void 0&&(o=0),n===void 0&&(n=!1);var i=r.schedule(function(){t(),n?e.add(this.schedule(null,o)):this.unsubscribe()},o);if(e.add(i),!n)return i}function pr(e,r){return r===void 0&&(r=0),A(function(t,o){t.subscribe(L(o,function(n){return K(o,e,function(){return o.next(n)},r)},function(){return K(o,e,function(){return o.complete()},r)},function(n){return K(o,e,function(){return o.error(n)},r)}))})}function lr(e,r){return r===void 0&&(r=0),A(function(t,o){o.add(e.schedule(function(){return t.subscribe(o)},r))})}function vt(e,r){return k(e).pipe(lr(r),pr(r))}function xt(e,r){return k(e).pipe(lr(r),pr(r))}function bt(e,r){return new C(function(t){var o=0;return r.schedule(function(){o===e.length?t.complete():(t.next(e[o++]),t.closed||this.schedule())})})}function yt(e,r){return new C(function(t){var o;return K(t,r,function(){o=e[fr](),K(t,r,function(){var n,i,f;try{n=o.next(),i=n.value,f=n.done}catch(s){t.error(s);return}f?t.complete():t.next(i)},0,!0)}),function(){return O(o==null?void 0:o.return)&&o.return()}})}function mr(e,r){if(!e)throw new Error("Iterable cannot be null");return new C(function(t){K(t,r,function(){var o=e[Symbol.asyncIterator]();K(t,r,function(){o.next().then(function(n){n.done?t.complete():t.next(n.value)})},0,!0)})})}function gt(e,r){return mr(cr(e),r)}function wt(e,r){if(e!=null){if(nr(e))return vt(e,r);if(Pe(e))return bt(e,r);if(or(e))return xt(e,r);if(ir(e))return mr(e,r);if(ur(e))return yt(e,r);if(sr(e))return gt(e,r)}throw ar(e)}function se(e,r){return r?wt(e,r):k(e)}function ie(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var t=ne(e);return se(e,t)}function kr(e,r){var t=O(e)?e:function(){return e},o=function(n){return n.error(t())};return new C(r?function(n){return r.schedule(o,0,n)}:o)}function St(e){return e instanceof Date&&!isNaN(e)}function P(e,r){return A(function(t,o){var n=0;t.subscribe(L(o,function(i){o.next(e.call(r,i,n++))}))})}var Ho=Array.isArray;function Wo(e,r){return Ho(r)?e.apply(void 0,z([],W(r))):e(r)}function dr(e){return P(function(r){return Wo(e,r)})}var Uo=Array.isArray,zo=Object.getPrototypeOf,Vo=Object.prototype,$o=Object.keys;function Et(e){if(e.length===1){var r=e[0];if(Uo(r))return{args:r,keys:null};if(jo(r)){var t=$o(r);return{args:t.map(function(o){return r[o]}),keys:t}}}return{args:e,keys:null}}function jo(e){return e&&typeof e=="object"&&zo(e)===Vo}function Ot(e,r){return e.reduce(function(t,o,n){return t[o]=r[n],t},{})}function Re(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var t=ne(e),o=Le(e),n=Et(e),i=n.args,f=n.keys;if(i.length===0)return se([],t);var s=new C(No(i,t,f?function(u){return Ot(f,u)}:G));return o?s.pipe(dr(o)):s}function No(e,r,t){return t===void 0&&(t=G),function(o){Tt(r,function(){for(var n=e.length,i=new Array(n),f=n,s=n,u=function(c){Tt(r,function(){var p=se(e[c],r),l=!1;p.subscribe(L(o,function(v){i[c]=v,l||(l=!0,s--),s||o.next(t(i.slice()))},function(){--f||o.complete()}))},o)},a=0;a<n;a++)u(a)},o)}}function Tt(e,r,t){e?K(t,e,r):r()}function _t(e,r,t,o,n,i,f,s){var u=[],a=0,c=0,p=!1,l=function(){p&&!u.length&&!a&&r.complete()},v=function(m){return a<o?d(m):u.push(m)},d=function(m){i&&r.next(m),a++;var x=!1;k(t(m,c++)).subscribe(L(r,function(w){n==null||n(w),i?v(w):r.next(w)},function(){x=!0},void 0,function(){if(x)try{a--;for(var w=function(){var E=u.shift();f?K(r,f,function(){return d(E)}):d(E)};u.length&&a<o;)w();l()}catch(E){r.error(E)}}))};return e.subscribe(L(r,v,function(){p=!0,l()})),function(){s==null||s()}}function we(e,r,t){return t===void 0&&(t=1/0),O(r)?we(function(o,n){return P(function(i,f){return r(o,i,n,f)})(k(e(o,n)))},t):(typeof r=="number"&&(t=r),A(function(o,n){return _t(o,n,e,t)}))}function hr(e){return e===void 0&&(e=1/0),we(G,e)}function At(){return hr(1)}function $e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return At()(se(e,ne(e)))}function Se(e){return new C(function(r){k(e()).subscribe(r)})}var qo=["addListener","removeListener"],Do=["addEventListener","removeEventListener"],Qo=["on","off"];function D(e,r,t,o){if(O(t)&&(o=t,t=void 0),o)return D(e,r,t).pipe(dr(o));var n=W(Yo(e)?Do.map(function(s){return function(u){return e[s](r,u,t)}}):Ko(e)?qo.map(It(e,r)):Jo(e)?Qo.map(It(e,r)):[],2),i=n[0],f=n[1];if(!i&&Pe(e))return we(function(s){return D(s,r,t)})(k(e));if(!i)throw new TypeError("Invalid event target");return new C(function(s){var u=function(){for(var a=[],c=0;c<arguments.length;c++)a[c]=arguments[c];return s.next(1<a.length?a:a[0])};return i(u),function(){return f(u)}})}function It(e,r){return function(t){return function(o){return e[t](r,o)}}}function Ko(e){return O(e.addListener)&&O(e.removeListener)}function Jo(e){return O(e.on)&&O(e.off)}function Yo(e){return O(e.addEventListener)&&O(e.removeEventListener)}function vr(e,r,t){e===void 0&&(e=0),t===void 0&&(t=pt);var o=-1;return r!=null&&(tr(r)?t=r:o=r),new C(function(n){var i=St(e)?+e-t.now():e;i<0&&(i=0);var f=0;return t.schedule(function(){n.closed||(n.next(f++),0<=o?this.schedule(void 0,o):n.complete())},i)})}function N(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var t=ne(e),o=dt(e,1/0),n=e;return n.length?n.length===1?k(n[0]):hr(o)(se(n,t)):Me}var je=new C(ce);var Go=Array.isArray;function Ct(e){return e.length===1&&Go(e[0])?e[0]:e}function Ee(e,r){return A(function(t,o){var n=0;t.subscribe(L(o,function(i){return e.call(r,i,n++)&&o.next(i)}))})}function Mt(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var t=Le(e),o=Ct(e);return o.length?new C(function(n){var i=o.map(function(){return[]}),f=o.map(function(){return!1});n.add(function(){i=f=null});for(var s=function(a){k(o[a]).subscribe(L(n,function(c){if(i[a].push(c),i.every(function(l){return l.length})){var p=i.map(function(l){return l.shift()});n.next(t?t.apply(void 0,z([],W(p))):p),i.some(function(l,v){return!l.length&&f[v]})&&n.complete()}},function(){f[a]=!0,!i[a].length&&n.complete()}))},u=0;!n.closed&&u<o.length;u++)s(u);return function(){i=f=null}}):Me}function Lt(e){return A(function(r,t){var o=!1,n=null,i=null,f=!1,s=function(){if(i==null||i.unsubscribe(),i=null,o){o=!1;var a=n;n=null,t.next(a)}f&&t.complete()},u=function(){i=null,f&&t.complete()};r.subscribe(L(t,function(a){o=!0,n=a,i||k(e(a)).subscribe(i=L(t,s,u))},function(){f=!0,(!o||!i||i.closed)&&t.complete()}))})}function Fr(e,r){return r===void 0&&(r=ge),Lt(function(){return vr(e,r)})}function Hr(e,r){return r===void 0&&(r=null),r=r!=null?r:e,A(function(t,o){var n=[],i=0;t.subscribe(L(o,function(f){var s,u,a,c,p=null;i++%r===0&&n.push([]);try{for(var l=Y(n),v=l.next();!v.done;v=l.next()){var d=v.value;d.push(f),e<=d.length&&(p=p!=null?p:[],p.push(d))}}catch(w){s={error:w}}finally{try{v&&!v.done&&(u=l.return)&&u.call(l)}finally{if(s)throw s.error}}if(p)try{for(var m=Y(p),x=m.next();!x.done;x=m.next()){var d=x.value;ue(n,d),o.next(d)}}catch(w){a={error:w}}finally{try{x&&!x.done&&(c=m.return)&&c.call(m)}finally{if(a)throw a.error}}},function(){var f,s;try{for(var u=Y(n),a=u.next();!a.done;a=u.next()){var c=a.value;o.next(c)}}catch(p){f={error:p}}finally{try{a&&!a.done&&(s=u.return)&&s.call(u)}finally{if(f)throw f.error}}o.complete()},void 0,function(){n=null}))})}function Wr(e,r){return r===void 0&&(r=ge),A(function(t,o){var n=null,i=null,f=null,s=function(){if(n){n.unsubscribe(),n=null;var a=i;i=null,o.next(a)}};function u(){var a=f+e,c=r.now();if(c<a){n=this.schedule(void 0,a-c),o.add(n);return}s()}t.subscribe(L(o,function(a){i=a,f=r.now(),n||(n=r.schedule(u,e),o.add(n))},function(){s(),o.complete()},void 0,function(){i=n=null}))})}function ke(e){return e<=0?function(){return Me}:A(function(r,t){var o=0;r.subscribe(L(t,function(n){++o<=e&&(t.next(n),e<=o&&t.complete())}))})}function Pt(){return A(function(e,r){e.subscribe(L(r,ce))})}function Rt(e){return P(function(){return e})}function Ur(e,r){return r?function(t){return $e(r.pipe(ke(1),Pt()),t.pipe(Ur(e)))}:we(function(t,o){return k(e(t,o)).pipe(ke(1),Rt(t))})}function zr(e,r){r===void 0&&(r=ge);var t=vr(e,r);return Ur(function(){return t})}function pe(e,r){return r===void 0&&(r=G),e=e!=null?e:Xo,A(function(t,o){var n,i=!0;t.subscribe(L(o,function(f){var s=r(f);(i||!e(n,s))&&(i=!1,n=s,o.next(f))}))})}function Xo(e,r){return e===r}function xr(e,r){return pe(function(t,o){return r?r(t[e],o[e]):t[e]===o[e]})}function le(e){return A(function(r,t){try{r.subscribe(t)}finally{t.add(e)}})}function kt(e){e===void 0&&(e={});var r=e.connector,t=r===void 0?function(){return new B}:r,o=e.resetOnError,n=o===void 0?!0:o,i=e.resetOnComplete,f=i===void 0?!0:i,s=e.resetOnRefCountZero,u=s===void 0?!0:s;return function(a){var c,p,l,v=0,d=!1,m=!1,x=function(){p==null||p.unsubscribe(),p=void 0},w=function(){x(),c=l=void 0,d=m=!1},E=function(){var R=c;w(),R==null||R.unsubscribe()};return A(function(R,h){v++,!m&&!d&&x();var b=l=l!=null?l:t();h.add(function(){v--,v===0&&!m&&!d&&(p=Vr(E,u))}),b.subscribe(h),!c&&v>0&&(c=new ye({next:function(S){return b.next(S)},error:function(S){m=!0,x(),p=Vr(w,n,S),b.error(S)},complete:function(){d=!0,x(),p=Vr(w,f),b.complete()}}),k(R).subscribe(c))})(a)}}function Vr(e,r){for(var t=[],o=2;o<arguments.length;o++)t[o-2]=arguments[o];if(r===!0){e();return}if(r!==!1){var n=new ye({next:function(){n.unsubscribe(),e()}});return k(r.apply(void 0,z([],W(t)))).subscribe(n)}}function me(e,r,t){var o,n,i,f,s=!1;return e&&typeof e=="object"?(o=e.bufferSize,f=o===void 0?1/0:o,n=e.windowTime,r=n===void 0?1/0:n,i=e.refCount,s=i===void 0?!1:i,t=e.scheduler):f=e!=null?e:1/0,kt({connector:function(){return new ct(f,r,t)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:s})}function he(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var t=ne(e);return A(function(o,n){(t?$e(e,o,t):$e(e,o)).subscribe(n)})}function Q(e,r){return A(function(t,o){var n=null,i=0,f=!1,s=function(){return f&&!n&&o.complete()};t.subscribe(L(o,function(u){n==null||n.unsubscribe();var a=0,c=i++;k(e(u,c)).subscribe(n=L(o,function(p){return o.next(r?r(u,p,c,a++):p)},function(){n=null,s()}))},function(){f=!0,s()}))})}function Fe(e,r,t){var o=O(e)||r||t?{next:e,error:r,complete:t}:e;return o?A(function(n,i){var f;(f=o.subscribe)===null||f===void 0||f.call(o);var s=!0;n.subscribe(L(i,function(u){var a;(a=o.next)===null||a===void 0||a.call(o,u),i.next(u)},function(){var u;s=!1,(u=o.complete)===null||u===void 0||u.call(o),i.complete()},function(u){var a;s=!1,(a=o.error)===null||a===void 0||a.call(o,u),i.error(u)},function(){var u,a;s&&((u=o.unsubscribe)===null||u===void 0||u.call(o)),(a=o.finalize)===null||a===void 0||a.call(o)}))}):G}function He(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var t=Le(e);return A(function(o,n){for(var i=e.length,f=new Array(i),s=e.map(function(){return!1}),u=!1,a=function(p){k(e[p]).subscribe(L(n,function(l){f[p]=l,!u&&!s[p]&&(s[p]=!0,(u=s.every(G))&&(s=null))},ce))},c=0;c<i;c++)a(c);o.subscribe(L(n,function(p){if(u){var l=z([p],W(f));n.next(t?t.apply(void 0,z([],W(l))):l)}}))})}function Ft(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return A(function(t,o){Mt.apply(void 0,z([t],W(e))).subscribe(o)})}function $r(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return Ft.apply(void 0,z([],W(e)))}function Ht(e,r=document){return Array.from(r.querySelectorAll(e))}function Z(e,r=document){let t=Wt(e,r);if(typeof t=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return t}function Wt(e,r=document){return r.querySelector(e)||void 0}function jr(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}var Bo=N(D(document.body,"focusin"),D(document.body,"focusout")).pipe(Wr(1),he(void 0),P(()=>jr()||document.body),me(1));function Ut(e){return Bo.pipe(P(r=>e.contains(r)),pe())}function zt(e){return{x:e.scrollLeft,y:e.scrollTop}}function Vt(e){return N(D(e,"scroll"),D(window,"resize")).pipe(Fr(0,Pr),P(()=>zt(e)),he(zt(e)))}function $t(e,r){if(typeof r=="string"||typeof r=="number")e.innerHTML+=r.toString();else if(r instanceof Node)e.appendChild(r);else if(Array.isArray(r))for(let t of r)$t(e,t)}function J(e,r,...t){let o=document.createElement(e);if(r)for(let n of Object.keys(r))typeof r[n]!="undefined"&&(typeof r[n]!="boolean"?o.setAttribute(n,r[n]):o.setAttribute(n,""));for(let n of t)$t(o,n);return o}function jt(e){if(e>999){let r=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(r)}k`}else return e.toString()}function Nt(e){let r=J("script",{src:e});return Se(()=>(document.head.appendChild(r),N(D(r,"load"),D(r,"error").pipe(Q(()=>kr(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(P(()=>{}),le(()=>document.head.removeChild(r)),ke(1))))}var Zo=new B,Ep=Se(()=>typeof ResizeObserver=="undefined"?Nt("https://unpkg.com/resize-observer-polyfill"):ie(void 0)).pipe(P(()=>new ResizeObserver(e=>{for(let r of e)Zo.next(r)})),Q(e=>N(je,ie(e)).pipe(le(()=>e.disconnect()))),me(1));function qt(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Dt(e){return{width:e.scrollWidth,height:e.scrollHeight}}var en=new B,Pp=Se(()=>ie(new IntersectionObserver(e=>{for(let r of e)en.next(r)},{threshold:0}))).pipe(Q(e=>N(je,ie(e)).pipe(le(()=>e.disconnect()))),me(1));function Qt(e,r=16){return Vt(e).pipe(P(({y:t})=>{let o=qt(e),n=Dt(e);return t>=n.height-o.height-r}),pe())}var $p={drawer:Z("[data-md-toggle=drawer]"),search:Z("[data-md-toggle=search]")};var rn=Z("#__config"),Ne=JSON.parse(rn.textContent);Ne.base=`${new URL(Ne.base,Yt())}`;function Kt(){return Ne}function Jt(e,r){return typeof r!="undefined"?Ne.translations[e].replace("#",r.toString()):Ne.translations[e]}function Yt(){return new URL(location.href)}function tn(e,r){return new C(t=>{let o=new XMLHttpRequest;o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(t.next(o.response),t.complete()):t.error(new Error(o.statusText))}),o.addEventListener("error",()=>{t.error(new Error("Network Error"))}),o.addEventListener("abort",()=>{t.error(new Error("Request aborted"))}),typeof(r==null?void 0:r.progress$)!="undefined"&&(o.addEventListener("progress",n=>{r.progress$.next(n.loaded/n.total*100)}),r.progress$.next(5)),o.send()})}function br(e,r){return tn(e,r).pipe(Q(t=>t.text()),P(t=>JSON.parse(t)),me(1))}function We(e,r=document){return Z(`[data-mdx-component=${e}]`,r)}function Nr(e,r=document){return Ht(`[data-mdx-component=${e}]`,r)}function Gt(e){let r=Ut(e),t=N(D(e,"keyup"),D(e,"focus").pipe(zr(1))).pipe(P(()=>e.value),he(e.value),pe());return r.pipe(Ee(o=>!o),He(t)).subscribe(([,o])=>{let n=document.location.pathname;typeof ga=="function"&&o.length&&ga("send","pageview",`${n}?q=[icon]+${o}`)}),Re([t,r]).pipe(P(([o,n])=>({ref:e,value:o,focus:n})))}var Qr=Gr(Dr());var ao=Gr(Dr());function io(e,r){return(0,ao.wrap)(e.shortcode,r,{wrap:{tagOpen:"<b>",tagClose:"</b>"}})}function fo(e,r,t){return J("li",{class:"mdx-iconsearch-result__item"},J("span",{class:"twemoji"},J("img",{src:e.url})),J("button",{class:"md-clipboard--inline",title:Jt("clipboard.copy"),"data-clipboard-text":t?e.shortcode:`:${e.shortcode}:`},J("code",null,t?io(e,r):`:${io(e,r)}:`)))}function uo(e){let r=`@${e.name}`;return J("a",{href:e.url,title:r,class:"mdx-sponsorship__item"},J("img",{src:e.image}))}function co(e){return J("a",{href:"https://github.com/sponsors/squidfunk?metadata_origin=docs",class:"mdx-sponsorship__item mdx-sponsorship__item--private"},"+",e)}function on(e,{index$:r,query$:t}){switch(e.getAttribute("data-mdx-mode")){case"file":return Re([t.pipe(xr("value")),r.pipe(P(({icons:o})=>Object.values(o.data).map(n=>n.replace(/\.svg$/,""))))]).pipe(P(([{value:o},n])=>(0,Qr.filter)(n,o)),Q(o=>r.pipe(P(({icons:n})=>({data:o.map(i=>({shortcode:i,url:[n.base,i,".svg"].join("")}))})))));default:return Re([t.pipe(xr("value")),r.pipe(P(({icons:o,emojis:n})=>[...Object.keys(o.data),...Object.keys(n.data)]))]).pipe(P(([{value:o},n])=>(0,Qr.filter)(n,o)),Q(o=>r.pipe(P(({icons:n,emojis:i})=>({data:o.map(f=>{let s=f in n.data?n:i;return{shortcode:f,url:[s.base,s.data[f]].join("")}})})))))}}function so(e,{index$:r,query$:t}){let o=new B,n=Qt(e).pipe(Ee(Boolean)),i=Z(":scope > :first-child",e);o.pipe(He(t)).subscribe(([{data:u},{value:a}])=>{if(a)switch(u.length){case 0:i.textContent="No matches";break;case 1:i.textContent="1 match";break;default:i.textContent=`${jt(u.length)} matches`}else i.textContent="Type to start searching"});let f=e.getAttribute("data-mdx-mode")==="file",s=Z(":scope > :last-child",e);return o.pipe(Fe(()=>s.innerHTML=""),Q(({data:u})=>N(ie(...u.slice(0,10)),ie(...u.slice(10)).pipe(Hr(10),$r(n),Q(([a])=>a)))),He(t)).subscribe(([u,{value:a}])=>s.appendChild(fo(u,a,f))),on(e,{query$:t,index$:r}).pipe(Fe(u=>o.next(u)),le(()=>o.complete()),P(u=>Ke({ref:e},u)))}function po(e){let r=Kt(),t=br(new URL("assets/javascripts/iconsearch_index.json",r.base)),o=We("iconsearch-query",e),n=We("iconsearch-result",e),i=Gt(o),f=so(n,{index$:t,query$:i});return N(i,f)}function lo(e){let r=br("https://3if8u9o552.execute-api.us-east-1.amazonaws.com/_/"),t=We("sponsorship-count"),o=We("sponsorship-total");return r.subscribe(n=>{e.removeAttribute("hidden");let i=Z(":scope > :first-child",e);for(let f of n.sponsors)f.type==="public"&&i.appendChild(uo(f.user));i.appendChild(co(n.sponsors.filter(({type:f})=>f==="private").length)),t.innerText=`${n.sponsors.length}`,o.innerText=`$ ${n.total.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")} a month`}),r.pipe(P(n=>Ke({ref:e},n)))}function mo(){let{origin:e}=new URL(location.href);D(document.body,"click").subscribe(r=>{if(r.target instanceof HTMLElement){let t=r.target.closest("a");t&&t.origin!==e&&ga("send","event","outbound","click",t.href)}})}mo();var nn=document$.pipe(Q(()=>N(...Nr("iconsearch").map(e=>po(e)),...Nr("sponsorship").map(e=>lo(e)))));nn.subscribe();})();
+//# sourceMappingURL=custom.9c11c319.min.js.map
+
diff --git a/dev/src/overrides/assets/javascripts/custom.9c11c319.min.js.map b/dev/src/overrides/assets/javascripts/custom.9c11c319.min.js.map
new file mode 100644
index 00000000..37bc358e
--- /dev/null
+++ b/dev/src/overrides/assets/javascripts/custom.9c11c319.min.js.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["node_modules/fuzzaldrin-plus/lib/scorer.js", "node_modules/fuzzaldrin-plus/lib/pathScorer.js", "node_modules/fuzzaldrin-plus/lib/query.js", "node_modules/fuzzaldrin-plus/lib/filter.js", "node_modules/fuzzaldrin-plus/lib/matcher.js", "node_modules/fuzzaldrin-plus/lib/fuzzaldrin.js", "node_modules/rxjs/node_modules/tslib/tslib.es6.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/templates/assets/javascripts/browser/element/_/index.ts", "src/templates/assets/javascripts/browser/element/focus/index.ts", "src/templates/assets/javascripts/browser/element/offset/content/index.ts", "src/templates/assets/javascripts/utilities/h/index.ts", "src/templates/assets/javascripts/utilities/round/index.ts", "src/templates/assets/javascripts/browser/script/index.ts", "src/templates/assets/javascripts/browser/element/size/_/index.ts", "src/templates/assets/javascripts/browser/element/size/content/index.ts", "src/templates/assets/javascripts/browser/element/visibility/index.ts", "src/templates/assets/javascripts/browser/toggle/index.ts", "src/templates/assets/javascripts/_/index.ts", "src/templates/assets/javascripts/browser/location/_/index.ts", "src/templates/assets/javascripts/browser/request/index.ts", "src/overrides/assets/javascripts/components/_/index.ts", "src/overrides/assets/javascripts/components/iconsearch/query/index.ts", "src/overrides/assets/javascripts/components/iconsearch/result/index.ts", "src/overrides/assets/javascripts/templates/iconsearch/index.tsx", "src/overrides/assets/javascripts/templates/sponsorship/index.tsx", "src/overrides/assets/javascripts/components/iconsearch/_/index.ts", "src/overrides/assets/javascripts/components/sponsorship/index.ts", "src/overrides/assets/javascripts/integrations/analytics/index.ts", "src/overrides/assets/javascripts/custom.ts"],
+ "sourcesContent": ["(function() {\n var AcronymResult, computeScore, emptyAcronymResult, isAcronymFullWord, isMatch, isSeparator, isWordEnd, isWordStart, miss_coeff, pos_bonus, scoreAcronyms, scoreCharacter, scoreConsecutives, scoreExact, scoreExactMatch, scorePattern, scorePosition, scoreSize, tau_size, wm;\n\n wm = 150;\n\n pos_bonus = 20;\n\n tau_size = 150;\n\n miss_coeff = 0.75;\n\n exports.score = function(string, query, options) {\n var allowErrors, preparedQuery, score, string_lw;\n preparedQuery = options.preparedQuery, allowErrors = options.allowErrors;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return 0;\n }\n string_lw = string.toLowerCase();\n score = computeScore(string, string_lw, preparedQuery);\n return Math.ceil(score);\n };\n\n exports.isMatch = isMatch = function(subject, query_lw, query_up) {\n var i, j, m, n, qj_lw, qj_up, si;\n m = subject.length;\n n = query_lw.length;\n if (!m || n > m) {\n return false;\n }\n i = -1;\n j = -1;\n while (++j < n) {\n qj_lw = query_lw.charCodeAt(j);\n qj_up = query_up.charCodeAt(j);\n while (++i < m) {\n si = subject.charCodeAt(i);\n if (si === qj_lw || si === qj_up) {\n break;\n }\n }\n if (i === m) {\n return false;\n }\n }\n return true;\n };\n\n exports.computeScore = computeScore = function(subject, subject_lw, preparedQuery) {\n var acro, acro_score, align, csc_diag, csc_row, csc_score, csc_should_rebuild, i, j, m, miss_budget, miss_left, n, pos, query, query_lw, record_miss, score, score_diag, score_row, score_up, si_lw, start, sz;\n query = preparedQuery.query;\n query_lw = preparedQuery.query_lw;\n m = subject.length;\n n = query.length;\n acro = scoreAcronyms(subject, subject_lw, query, query_lw);\n acro_score = acro.score;\n if (acro.count === n) {\n return scoreExact(n, m, acro_score, acro.pos);\n }\n pos = subject_lw.indexOf(query_lw);\n if (pos > -1) {\n return scoreExactMatch(subject, subject_lw, query, query_lw, pos, n, m);\n }\n score_row = new Array(n);\n csc_row = new Array(n);\n sz = scoreSize(n, m);\n miss_budget = Math.ceil(miss_coeff * n) + 5;\n miss_left = miss_budget;\n csc_should_rebuild = true;\n j = -1;\n while (++j < n) {\n score_row[j] = 0;\n csc_row[j] = 0;\n }\n i = -1;\n while (++i < m) {\n si_lw = subject_lw[i];\n if (!si_lw.charCodeAt(0) in preparedQuery.charCodes) {\n if (csc_should_rebuild) {\n j = -1;\n while (++j < n) {\n csc_row[j] = 0;\n }\n csc_should_rebuild = false;\n }\n continue;\n }\n score = 0;\n score_diag = 0;\n csc_diag = 0;\n record_miss = true;\n csc_should_rebuild = true;\n j = -1;\n while (++j < n) {\n score_up = score_row[j];\n if (score_up > score) {\n score = score_up;\n }\n csc_score = 0;\n if (query_lw[j] === si_lw) {\n start = isWordStart(i, subject, subject_lw);\n csc_score = csc_diag > 0 ? csc_diag : scoreConsecutives(subject, subject_lw, query, query_lw, i, j, start);\n align = score_diag + scoreCharacter(i, j, start, acro_score, csc_score);\n if (align > score) {\n score = align;\n miss_left = miss_budget;\n } else {\n if (record_miss && --miss_left <= 0) {\n return Math.max(score, score_row[n - 1]) * sz;\n }\n record_miss = false;\n }\n }\n score_diag = score_up;\n csc_diag = csc_row[j];\n csc_row[j] = csc_score;\n score_row[j] = score;\n }\n }\n score = score_row[n - 1];\n return score * sz;\n };\n\n exports.isWordStart = isWordStart = function(pos, subject, subject_lw) {\n var curr_s, prev_s;\n if (pos === 0) {\n return true;\n }\n curr_s = subject[pos];\n prev_s = subject[pos - 1];\n return isSeparator(prev_s) || (curr_s !== subject_lw[pos] && prev_s === subject_lw[pos - 1]);\n };\n\n exports.isWordEnd = isWordEnd = function(pos, subject, subject_lw, len) {\n var curr_s, next_s;\n if (pos === len - 1) {\n return true;\n }\n curr_s = subject[pos];\n next_s = subject[pos + 1];\n return isSeparator(next_s) || (curr_s === subject_lw[pos] && next_s !== subject_lw[pos + 1]);\n };\n\n isSeparator = function(c) {\n return c === ' ' || c === '.' || c === '-' || c === '_' || c === '/' || c === '\\\\';\n };\n\n scorePosition = function(pos) {\n var sc;\n if (pos < pos_bonus) {\n sc = pos_bonus - pos;\n return 100 + sc * sc;\n } else {\n return Math.max(100 + pos_bonus - pos, 0);\n }\n };\n\n exports.scoreSize = scoreSize = function(n, m) {\n return tau_size / (tau_size + Math.abs(m - n));\n };\n\n scoreExact = function(n, m, quality, pos) {\n return 2 * n * (wm * quality + scorePosition(pos)) * scoreSize(n, m);\n };\n\n exports.scorePattern = scorePattern = function(count, len, sameCase, start, end) {\n var bonus, sz;\n sz = count;\n bonus = 6;\n if (sameCase === count) {\n bonus += 2;\n }\n if (start) {\n bonus += 3;\n }\n if (end) {\n bonus += 1;\n }\n if (count === len) {\n if (start) {\n if (sameCase === len) {\n sz += 2;\n } else {\n sz += 1;\n }\n }\n if (end) {\n bonus += 1;\n }\n }\n return sameCase + sz * (sz + bonus);\n };\n\n exports.scoreCharacter = scoreCharacter = function(i, j, start, acro_score, csc_score) {\n var posBonus;\n posBonus = scorePosition(i);\n if (start) {\n return posBonus + wm * ((acro_score > csc_score ? acro_score : csc_score) + 10);\n }\n return posBonus + wm * csc_score;\n };\n\n exports.scoreConsecutives = scoreConsecutives = function(subject, subject_lw, query, query_lw, i, j, startOfWord) {\n var k, m, mi, n, nj, sameCase, sz;\n m = subject.length;\n n = query.length;\n mi = m - i;\n nj = n - j;\n k = mi < nj ? mi : nj;\n sameCase = 0;\n sz = 0;\n if (query[j] === subject[i]) {\n sameCase++;\n }\n while (++sz < k && query_lw[++j] === subject_lw[++i]) {\n if (query[j] === subject[i]) {\n sameCase++;\n }\n }\n if (sz < k) {\n i--;\n }\n if (sz === 1) {\n return 1 + 2 * sameCase;\n }\n return scorePattern(sz, n, sameCase, startOfWord, isWordEnd(i, subject, subject_lw, m));\n };\n\n exports.scoreExactMatch = scoreExactMatch = function(subject, subject_lw, query, query_lw, pos, n, m) {\n var end, i, pos2, sameCase, start;\n start = isWordStart(pos, subject, subject_lw);\n if (!start) {\n pos2 = subject_lw.indexOf(query_lw, pos + 1);\n if (pos2 > -1) {\n start = isWordStart(pos2, subject, subject_lw);\n if (start) {\n pos = pos2;\n }\n }\n }\n i = -1;\n sameCase = 0;\n while (++i < n) {\n if (query[pos + i] === subject[i]) {\n sameCase++;\n }\n }\n end = isWordEnd(pos + n - 1, subject, subject_lw, m);\n return scoreExact(n, m, scorePattern(n, n, sameCase, start, end), pos);\n };\n\n AcronymResult = (function() {\n function AcronymResult(score, pos, count) {\n this.score = score;\n this.pos = pos;\n this.count = count;\n }\n\n return AcronymResult;\n\n })();\n\n emptyAcronymResult = new AcronymResult(0, 0.1, 0);\n\n exports.scoreAcronyms = scoreAcronyms = function(subject, subject_lw, query, query_lw) {\n var count, fullWord, i, j, m, n, qj_lw, sameCase, score, sepCount, sumPos;\n m = subject.length;\n n = query.length;\n if (!(m > 1 && n > 1)) {\n return emptyAcronymResult;\n }\n count = 0;\n sepCount = 0;\n sumPos = 0;\n sameCase = 0;\n i = -1;\n j = -1;\n while (++j < n) {\n qj_lw = query_lw[j];\n if (isSeparator(qj_lw)) {\n i = subject_lw.indexOf(qj_lw, i + 1);\n if (i > -1) {\n sepCount++;\n continue;\n } else {\n break;\n }\n }\n while (++i < m) {\n if (qj_lw === subject_lw[i] && isWordStart(i, subject, subject_lw)) {\n if (query[j] === subject[i]) {\n sameCase++;\n }\n sumPos += i;\n count++;\n break;\n }\n }\n if (i === m) {\n break;\n }\n }\n if (count < 2) {\n return emptyAcronymResult;\n }\n fullWord = count === n ? isAcronymFullWord(subject, subject_lw, query, count) : false;\n score = scorePattern(count, n, sameCase, true, fullWord);\n return new AcronymResult(score, sumPos / count, count + sepCount);\n };\n\n isAcronymFullWord = function(subject, subject_lw, query, nbAcronymInQuery) {\n var count, i, m, n;\n m = subject.length;\n n = query.length;\n count = 0;\n if (m > 12 * n) {\n return false;\n }\n i = -1;\n while (++i < m) {\n if (isWordStart(i, subject, subject_lw) && ++count > nbAcronymInQuery) {\n return false;\n }\n }\n return true;\n };\n\n}).call(this);\n", "(function() {\n var computeScore, countDir, file_coeff, getExtension, getExtensionScore, isMatch, scorePath, scoreSize, tau_depth, _ref;\n\n _ref = require('./scorer'), isMatch = _ref.isMatch, computeScore = _ref.computeScore, scoreSize = _ref.scoreSize;\n\n tau_depth = 20;\n\n file_coeff = 2.5;\n\n exports.score = function(string, query, options) {\n var allowErrors, preparedQuery, score, string_lw;\n preparedQuery = options.preparedQuery, allowErrors = options.allowErrors;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return 0;\n }\n string_lw = string.toLowerCase();\n score = computeScore(string, string_lw, preparedQuery);\n score = scorePath(string, string_lw, score, options);\n return Math.ceil(score);\n };\n\n scorePath = function(subject, subject_lw, fullPathScore, options) {\n var alpha, basePathScore, basePos, depth, end, extAdjust, fileLength, pathSeparator, preparedQuery, useExtensionBonus;\n if (fullPathScore === 0) {\n return 0;\n }\n preparedQuery = options.preparedQuery, useExtensionBonus = options.useExtensionBonus, pathSeparator = options.pathSeparator;\n end = subject.length - 1;\n while (subject[end] === pathSeparator) {\n end--;\n }\n basePos = subject.lastIndexOf(pathSeparator, end);\n fileLength = end - basePos;\n extAdjust = 1.0;\n if (useExtensionBonus) {\n extAdjust += getExtensionScore(subject_lw, preparedQuery.ext, basePos, end, 2);\n fullPathScore *= extAdjust;\n }\n if (basePos === -1) {\n return fullPathScore;\n }\n depth = preparedQuery.depth;\n while (basePos > -1 && depth-- > 0) {\n basePos = subject.lastIndexOf(pathSeparator, basePos - 1);\n }\n basePathScore = basePos === -1 ? fullPathScore : extAdjust * computeScore(subject.slice(basePos + 1, end + 1), subject_lw.slice(basePos + 1, end + 1), preparedQuery);\n alpha = 0.5 * tau_depth / (tau_depth + countDir(subject, end + 1, pathSeparator));\n return alpha * basePathScore + (1 - alpha) * fullPathScore * scoreSize(0, file_coeff * fileLength);\n };\n\n exports.countDir = countDir = function(path, end, pathSeparator) {\n var count, i;\n if (end < 1) {\n return 0;\n }\n count = 0;\n i = -1;\n while (++i < end && path[i] === pathSeparator) {\n continue;\n }\n while (++i < end) {\n if (path[i] === pathSeparator) {\n count++;\n while (++i < end && path[i] === pathSeparator) {\n continue;\n }\n }\n }\n return count;\n };\n\n exports.getExtension = getExtension = function(str) {\n var pos;\n pos = str.lastIndexOf(\".\");\n if (pos < 0) {\n return \"\";\n } else {\n return str.substr(pos + 1);\n }\n };\n\n getExtensionScore = function(candidate, ext, startPos, endPos, maxDepth) {\n var m, matched, n, pos;\n if (!ext.length) {\n return 0;\n }\n pos = candidate.lastIndexOf(\".\", endPos);\n if (!(pos > startPos)) {\n return 0;\n }\n n = ext.length;\n m = endPos - pos;\n if (m < n) {\n n = m;\n m = ext.length;\n }\n pos++;\n matched = -1;\n while (++matched < n) {\n if (candidate[pos + matched] !== ext[matched]) {\n break;\n }\n }\n if (matched === 0 && maxDepth > 0) {\n return 0.9 * getExtensionScore(candidate, ext, startPos, pos - 2, maxDepth - 1);\n }\n return matched / m;\n };\n\n}).call(this);\n", "(function() {\n var Query, coreChars, countDir, getCharCodes, getExtension, opt_char_re, truncatedUpperCase, _ref;\n\n _ref = require(\"./pathScorer\"), countDir = _ref.countDir, getExtension = _ref.getExtension;\n\n module.exports = Query = (function() {\n function Query(query, _arg) {\n var optCharRegEx, pathSeparator, _ref1;\n _ref1 = _arg != null ? _arg : {}, optCharRegEx = _ref1.optCharRegEx, pathSeparator = _ref1.pathSeparator;\n if (!(query && query.length)) {\n return null;\n }\n this.query = query;\n this.query_lw = query.toLowerCase();\n this.core = coreChars(query, optCharRegEx);\n this.core_lw = this.core.toLowerCase();\n this.core_up = truncatedUpperCase(this.core);\n this.depth = countDir(query, query.length, pathSeparator);\n this.ext = getExtension(this.query_lw);\n this.charCodes = getCharCodes(this.query_lw);\n }\n\n return Query;\n\n })();\n\n opt_char_re = /[ _\\-:\\/\\\\]/g;\n\n coreChars = function(query, optCharRegEx) {\n if (optCharRegEx == null) {\n optCharRegEx = opt_char_re;\n }\n return query.replace(optCharRegEx, '');\n };\n\n truncatedUpperCase = function(str) {\n var char, upper, _i, _len;\n upper = \"\";\n for (_i = 0, _len = str.length; _i < _len; _i++) {\n char = str[_i];\n upper += char.toUpperCase()[0];\n }\n return upper;\n };\n\n getCharCodes = function(str) {\n var charCodes, i, len;\n len = str.length;\n i = -1;\n charCodes = [];\n while (++i < len) {\n charCodes[str.charCodeAt(i)] = true;\n }\n return charCodes;\n };\n\n}).call(this);\n", "(function() {\n var Query, pathScorer, pluckCandidates, scorer, sortCandidates;\n\n scorer = require('./scorer');\n\n pathScorer = require('./pathScorer');\n\n Query = require('./query');\n\n pluckCandidates = function(a) {\n return a.candidate;\n };\n\n sortCandidates = function(a, b) {\n return b.score - a.score;\n };\n\n module.exports = function(candidates, query, options) {\n var bKey, candidate, key, maxInners, maxResults, score, scoreProvider, scoredCandidates, spotLeft, string, usePathScoring, _i, _len;\n scoredCandidates = [];\n key = options.key, maxResults = options.maxResults, maxInners = options.maxInners, usePathScoring = options.usePathScoring;\n spotLeft = (maxInners != null) && maxInners > 0 ? maxInners : candidates.length + 1;\n bKey = key != null;\n scoreProvider = usePathScoring ? pathScorer : scorer;\n for (_i = 0, _len = candidates.length; _i < _len; _i++) {\n candidate = candidates[_i];\n string = bKey ? candidate[key] : candidate;\n if (!string) {\n continue;\n }\n score = scoreProvider.score(string, query, options);\n if (score > 0) {\n scoredCandidates.push({\n candidate: candidate,\n score: score\n });\n if (!--spotLeft) {\n break;\n }\n }\n }\n scoredCandidates.sort(sortCandidates);\n candidates = scoredCandidates.map(pluckCandidates);\n if (maxResults != null) {\n candidates = candidates.slice(0, maxResults);\n }\n return candidates;\n };\n\n}).call(this);\n", "(function() {\n var basenameMatch, computeMatch, isMatch, isWordStart, match, mergeMatches, scoreAcronyms, scoreCharacter, scoreConsecutives, _ref;\n\n _ref = require('./scorer'), isMatch = _ref.isMatch, isWordStart = _ref.isWordStart, scoreConsecutives = _ref.scoreConsecutives, scoreCharacter = _ref.scoreCharacter, scoreAcronyms = _ref.scoreAcronyms;\n\n exports.match = match = function(string, query, options) {\n var allowErrors, baseMatches, matches, pathSeparator, preparedQuery, string_lw;\n allowErrors = options.allowErrors, preparedQuery = options.preparedQuery, pathSeparator = options.pathSeparator;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return [];\n }\n string_lw = string.toLowerCase();\n matches = computeMatch(string, string_lw, preparedQuery);\n if (matches.length === 0) {\n return matches;\n }\n if (string.indexOf(pathSeparator) > -1) {\n baseMatches = basenameMatch(string, string_lw, preparedQuery, pathSeparator);\n matches = mergeMatches(matches, baseMatches);\n }\n return matches;\n };\n\n exports.wrap = function(string, query, options) {\n var matchIndex, matchPos, matchPositions, output, strPos, tagClass, tagClose, tagOpen, _ref1;\n if ((options.wrap != null)) {\n _ref1 = options.wrap, tagClass = _ref1.tagClass, tagOpen = _ref1.tagOpen, tagClose = _ref1.tagClose;\n }\n if (tagClass == null) {\n tagClass = 'highlight';\n }\n if (tagOpen == null) {\n tagOpen = '<strong class=\"' + tagClass + '\">';\n }\n if (tagClose == null) {\n tagClose = '</strong>';\n }\n if (string === query) {\n return tagOpen + string + tagClose;\n }\n matchPositions = match(string, query, options);\n if (matchPositions.length === 0) {\n return string;\n }\n output = '';\n matchIndex = -1;\n strPos = 0;\n while (++matchIndex < matchPositions.length) {\n matchPos = matchPositions[matchIndex];\n if (matchPos > strPos) {\n output += string.substring(strPos, matchPos);\n strPos = matchPos;\n }\n while (++matchIndex < matchPositions.length) {\n if (matchPositions[matchIndex] === matchPos + 1) {\n matchPos++;\n } else {\n matchIndex--;\n break;\n }\n }\n matchPos++;\n if (matchPos > strPos) {\n output += tagOpen;\n output += string.substring(strPos, matchPos);\n output += tagClose;\n strPos = matchPos;\n }\n }\n if (strPos <= string.length - 1) {\n output += string.substring(strPos);\n }\n return output;\n };\n\n basenameMatch = function(subject, subject_lw, preparedQuery, pathSeparator) {\n var basePos, depth, end;\n end = subject.length - 1;\n while (subject[end] === pathSeparator) {\n end--;\n }\n basePos = subject.lastIndexOf(pathSeparator, end);\n if (basePos === -1) {\n return [];\n }\n depth = preparedQuery.depth;\n while (depth-- > 0) {\n basePos = subject.lastIndexOf(pathSeparator, basePos - 1);\n if (basePos === -1) {\n return [];\n }\n }\n basePos++;\n end++;\n return computeMatch(subject.slice(basePos, end), subject_lw.slice(basePos, end), preparedQuery, basePos);\n };\n\n mergeMatches = function(a, b) {\n var ai, bj, i, j, m, n, out;\n m = a.length;\n n = b.length;\n if (n === 0) {\n return a.slice();\n }\n if (m === 0) {\n return b.slice();\n }\n i = -1;\n j = 0;\n bj = b[j];\n out = [];\n while (++i < m) {\n ai = a[i];\n while (bj <= ai && ++j < n) {\n if (bj < ai) {\n out.push(bj);\n }\n bj = b[j];\n }\n out.push(ai);\n }\n while (j < n) {\n out.push(b[j++]);\n }\n return out;\n };\n\n computeMatch = function(subject, subject_lw, preparedQuery, offset) {\n var DIAGONAL, LEFT, STOP, UP, acro_score, align, backtrack, csc_diag, csc_row, csc_score, i, j, m, matches, move, n, pos, query, query_lw, score, score_diag, score_row, score_up, si_lw, start, trace;\n if (offset == null) {\n offset = 0;\n }\n query = preparedQuery.query;\n query_lw = preparedQuery.query_lw;\n m = subject.length;\n n = query.length;\n acro_score = scoreAcronyms(subject, subject_lw, query, query_lw).score;\n score_row = new Array(n);\n csc_row = new Array(n);\n STOP = 0;\n UP = 1;\n LEFT = 2;\n DIAGONAL = 3;\n trace = new Array(m * n);\n pos = -1;\n j = -1;\n while (++j < n) {\n score_row[j] = 0;\n csc_row[j] = 0;\n }\n i = -1;\n while (++i < m) {\n score = 0;\n score_up = 0;\n csc_diag = 0;\n si_lw = subject_lw[i];\n j = -1;\n while (++j < n) {\n csc_score = 0;\n align = 0;\n score_diag = score_up;\n if (query_lw[j] === si_lw) {\n start = isWordStart(i, subject, subject_lw);\n csc_score = csc_diag > 0 ? csc_diag : scoreConsecutives(subject, subject_lw, query, query_lw, i, j, start);\n align = score_diag + scoreCharacter(i, j, start, acro_score, csc_score);\n }\n score_up = score_row[j];\n csc_diag = csc_row[j];\n if (score > score_up) {\n move = LEFT;\n } else {\n score = score_up;\n move = UP;\n }\n if (align > score) {\n score = align;\n move = DIAGONAL;\n } else {\n csc_score = 0;\n }\n score_row[j] = score;\n csc_row[j] = csc_score;\n trace[++pos] = score > 0 ? move : STOP;\n }\n }\n i = m - 1;\n j = n - 1;\n pos = i * n + j;\n backtrack = true;\n matches = [];\n while (backtrack && i >= 0 && j >= 0) {\n switch (trace[pos]) {\n case UP:\n i--;\n pos -= n;\n break;\n case LEFT:\n j--;\n pos--;\n break;\n case DIAGONAL:\n matches.push(i + offset);\n j--;\n i--;\n pos -= n + 1;\n break;\n default:\n backtrack = false;\n }\n }\n matches.reverse();\n return matches;\n };\n\n}).call(this);\n", "(function() {\n var Query, defaultPathSeparator, filter, matcher, parseOptions, pathScorer, preparedQueryCache, scorer;\n\n filter = require('./filter');\n\n matcher = require('./matcher');\n\n scorer = require('./scorer');\n\n pathScorer = require('./pathScorer');\n\n Query = require('./query');\n\n preparedQueryCache = null;\n\n defaultPathSeparator = (typeof process !== \"undefined\" && process !== null ? process.platform : void 0) === \"win32\" ? '\\\\' : '/';\n\n module.exports = {\n filter: function(candidates, query, options) {\n if (options == null) {\n options = {};\n }\n if (!((query != null ? query.length : void 0) && (candidates != null ? candidates.length : void 0))) {\n return [];\n }\n options = parseOptions(options, query);\n return filter(candidates, query, options);\n },\n score: function(string, query, options) {\n if (options == null) {\n options = {};\n }\n if (!((string != null ? string.length : void 0) && (query != null ? query.length : void 0))) {\n return 0;\n }\n options = parseOptions(options, query);\n if (options.usePathScoring) {\n return pathScorer.score(string, query, options);\n } else {\n return scorer.score(string, query, options);\n }\n },\n match: function(string, query, options) {\n var _i, _ref, _results;\n if (options == null) {\n options = {};\n }\n if (!string) {\n return [];\n }\n if (!query) {\n return [];\n }\n if (string === query) {\n return (function() {\n _results = [];\n for (var _i = 0, _ref = string.length; 0 <= _ref ? _i < _ref : _i > _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }\n return _results;\n }).apply(this);\n }\n options = parseOptions(options, query);\n return matcher.match(string, query, options);\n },\n wrap: function(string, query, options) {\n if (options == null) {\n options = {};\n }\n if (!string) {\n return [];\n }\n if (!query) {\n return [];\n }\n options = parseOptions(options, query);\n return matcher.wrap(string, query, options);\n },\n prepareQuery: function(query, options) {\n if (options == null) {\n options = {};\n }\n options = parseOptions(options, query);\n return options.preparedQuery;\n }\n };\n\n parseOptions = function(options, query) {\n if (options.allowErrors == null) {\n options.allowErrors = false;\n }\n if (options.usePathScoring == null) {\n options.usePathScoring = true;\n }\n if (options.useExtensionBonus == null) {\n options.useExtensionBonus = false;\n }\n if (options.pathSeparator == null) {\n options.pathSeparator = defaultPathSeparator;\n }\n if (options.optCharRegEx == null) {\n options.optCharRegEx = null;\n }\n if (options.wrap == null) {\n options.wrap = null;\n }\n if (options.preparedQuery == null) {\n options.preparedQuery = preparedQueryCache && preparedQueryCache.query === query ? preparedQueryCache : (preparedQueryCache = new Query(query, options));\n }\n return options;\n };\n\n}).call(this);\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n", "/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n", "/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass<T>(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n", "/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove<T>(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements SubscriptionLike {\n /** @nocollapse */\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered finalizers to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _finalizers: Exclude<TeardownLogic, void>[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the finalization\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a finalizer to this subscription, so that finalization will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever finalizer is passed to it\n * will automatically be executed (unless the finalizer itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as finalizers to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The finalization logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the finalizer if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever finalizer is handed to it automatically.\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = this._finalizers ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a finalizer from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same finalizer instance of a function or an unsubscribable object to a `Subscription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All finalizer instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The finalizer to remove from this subscription\n */\n remove(teardown: Exclude<TeardownLogic, void>): void {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execFinalizer(finalizer: Unsubscribable | (() => void)) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n", "import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification<any>, subscriber: Subscriber<any>) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearTimeoutFunction = (handle: TimerHandle) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(handler: () => void, timeout?: number, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate?.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle as any);\n },\n delegate: undefined,\n};\n", "import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\n\n/**\n * Handles an error on another job either with the user-configured {@link onUnhandledError},\n * or by throwing it on that new job so it can be picked up by `window.onerror`, `process.on('error')`, etc.\n *\n * This should be called whenever there is an error that is out-of-band with the subscription\n * or when an error hits a terminal boundary of the subscription and no error handler was provided.\n *\n * @param err the error to report\n */\nexport function reportUnhandledError(err: any) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n // Execute the user-configured error handler.\n onUnhandledError(err);\n } else {\n // Throw so it is picked up by the runtime's uncaught error mechanism.\n throw err;\n }\n });\n}\n", "/* tslint:disable:no-empty */\nexport function noop() { }\n", "import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification<T>(value: T) {\n return createNotification('N', value, undefined) as NextNotification<T>;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n", "import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber<T>\n */\nexport class Subscriber<T> extends Subscription implements Observer<T> {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @nocollapse\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create<T>(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber<T> {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber<any> | Observer<any>; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber<any> | Observer<any>) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value?: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\n/**\n * This bind is captured here because we want to be able to have\n * compatibility with monoid libraries that tend to use a method named\n * `bind`. In particular, a library called Monio requires this.\n */\nconst _bind = Function.prototype.bind;\n\nfunction bind<Fn extends (...args: any[]) => any>(fn: Fn, thisArg: any): Fn {\n return _bind.call(fn, thisArg);\n}\n\n/**\n * Internal optimization only, DO NOT EXPOSE.\n * @internal\n */\nclass ConsumerObserver<T> implements Observer<T> {\n constructor(private partialObserver: Partial<Observer<T>>) {}\n\n next(value: T): void {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n\n error(err: any): void {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n\n complete(): void {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\n\nexport class SafeSubscriber<T> extends Subscriber<T> {\n constructor(\n observerOrNext?: Partial<Observer<T>> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let partialObserver: Partial<Observer<T>>;\n if (isFunction(observerOrNext) || !observerOrNext) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n partialObserver = {\n next: (observerOrNext ?? undefined) as (((value: T) => void) | undefined),\n error: error ?? undefined,\n complete: complete ?? undefined,\n };\n } else {\n // The first argument is a partial observer.\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n } else {\n // The \"normal\" path. Just use the partial observer directly.\n partialObserver = observerOrNext;\n }\n }\n\n // Wrap the partial observer to ensure it's a full observer, and\n // make sure proper error handling is accounted for.\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\n\nfunction handleUnhandledError(error: any) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(error);\n }\n}\n\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent\n * @param subscriber The stopped subscriber\n */\nfunction handleStoppedNotification(notification: ObservableNotification<any>, subscriber: Subscriber<any>) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly<Observer<any>> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n", "/**\n * Symbol.observable or a string \"@@observable\". Used for interop\n *\n * @deprecated We will no longer be exporting this symbol in upcoming versions of RxJS.\n * Instead polyfill and use Symbol.observable directly *or* use https://www.npmjs.com/package/symbol-observable\n */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n", "/**\n * This function takes one parameter and just returns it. Simply put,\n * this is like `<T>(x: T): T => x`.\n *\n * ## Examples\n *\n * This is useful in some cases when using things like `mergeMap`\n *\n * ```ts\n * import { interval, take, map, range, mergeMap, identity } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(5));\n *\n * const result$ = source$.pipe(\n * map(i => range(i)),\n * mergeMap(identity) // same as mergeMap(x => x)\n * );\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * Or when you want to selectively apply an operator\n *\n * ```ts\n * import { interval, take, identity } from 'rxjs';\n *\n * const shouldLimit = () => Math.random() < 0.5;\n *\n * const source$ = interval(1000);\n *\n * const result$ = source$.pipe(shouldLimit() ? take(5) : identity);\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * @param x Any value that is returned by this function\n * @returns The value passed as the first parameter to this function\n */\nexport function identity<T>(x: T): T {\n return x;\n}\n", "import { identity } from './identity';\nimport { UnaryFunction } from '../types';\n\nexport function pipe(): typeof identity;\nexport function pipe<T, A>(fn1: UnaryFunction<T, A>): UnaryFunction<T, A>;\nexport function pipe<T, A, B>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>): UnaryFunction<T, B>;\nexport function pipe<T, A, B, C>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>): UnaryFunction<T, C>;\nexport function pipe<T, A, B, C, D>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>\n): UnaryFunction<T, D>;\nexport function pipe<T, A, B, C, D, E>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>\n): UnaryFunction<T, E>;\nexport function pipe<T, A, B, C, D, E, F>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>\n): UnaryFunction<T, F>;\nexport function pipe<T, A, B, C, D, E, F, G>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>,\n fn7: UnaryFunction<F, G>\n): UnaryFunction<T, G>;\nexport function pipe<T, A, B, C, D, E, F, G, H>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>,\n fn7: UnaryFunction<F, G>,\n fn8: UnaryFunction<G, H>\n): UnaryFunction<T, H>;\nexport function pipe<T, A, B, C, D, E, F, G, H, I>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>,\n fn7: UnaryFunction<F, G>,\n fn8: UnaryFunction<G, H>,\n fn9: UnaryFunction<H, I>\n): UnaryFunction<T, I>;\nexport function pipe<T, A, B, C, D, E, F, G, H, I>(\n fn1: UnaryFunction<T, A>,\n fn2: UnaryFunction<A, B>,\n fn3: UnaryFunction<B, C>,\n fn4: UnaryFunction<C, D>,\n fn5: UnaryFunction<D, E>,\n fn6: UnaryFunction<E, F>,\n fn7: UnaryFunction<F, G>,\n fn8: UnaryFunction<G, H>,\n fn9: UnaryFunction<H, I>,\n ...fns: UnaryFunction<any, any>[]\n): UnaryFunction<T, unknown>;\n\n/**\n * pipe() can be called on one or more functions, each of which can take one argument (\"UnaryFunction\")\n * and uses it to return a value.\n * It returns a function that takes one argument, passes it to the first UnaryFunction, and then\n * passes the result to the next one, passes that result to the next one, and so on. \n */\nexport function pipe(...fns: Array<UnaryFunction<any, any>>): UnaryFunction<any, any> {\n return pipeFromArray(fns);\n}\n\n/** @internal */\nexport function pipeFromArray<T, R>(fns: Array<UnaryFunction<T, R>>): UnaryFunction<T, R> {\n if (fns.length === 0) {\n return identity as UnaryFunction<any, any>;\n }\n\n if (fns.length === 1) {\n return fns[0];\n }\n\n return function piped(input: T): R {\n return fns.reduce((prev: any, fn: UnaryFunction<T, R>) => fn(prev), input as any);\n };\n}\n", "import { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable<T>\n */\nexport class Observable<T> implements Subscribable<T> {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable<any> | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator<any, T> | undefined;\n\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable<T>, subscriber: Subscriber<T>) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new observable\n * @nocollapse\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = <T>(subscribe?: (subscriber: Subscriber<T>) => TeardownLogic) => {\n return new Observable<T>(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param operator the operator defining the operation to take on the observable\n * @return a new observable with the Operator applied\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift<R>(operator?: Operator<T, R>): Observable<R> {\n const observable = new Observable<R>();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observerOrNext?: Partial<Observer<T>> | ((value: T) => void)): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * <span class=\"informal\">Use it when you have all these Observables, but still nothing is happening.</span>\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * #### Examples\n *\n * Subscribe with an {@link guide/observer Observer}\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Subscribe with functions ({@link deprecations/subscribe-arguments deprecated})\n *\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Cancel a subscription\n *\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 'unsubscribed!' after 2.5s\n * ```\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {Subscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(\n observerOrNext?: Partial<Observer<T>> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber<T>): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * #### Example\n *\n * ```ts\n * import { interval, take } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ' + value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total: ' + total)\n * );\n *\n * // Expected:\n * // 'observable -> 0'\n * // 'observable -> 1'\n * // 'observable -> 2'\n * // 'observable -> 3'\n * // 'Total: 6'\n * ```\n *\n * @param next a handler for each value emitted by the observable\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next: (value: T) => void): Promise<void>;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise<void>;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise<void> {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor<void>((resolve, reject) => {\n const subscriber = new SafeSubscriber<T>({\n next: (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n }) as Promise<void>;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber<any>): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable<T>;\n pipe<A>(op1: OperatorFunction<T, A>): Observable<A>;\n pipe<A, B>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>): Observable<B>;\n pipe<A, B, C>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>): Observable<C>;\n pipe<A, B, C, D>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>\n ): Observable<D>;\n pipe<A, B, C, D, E>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>\n ): Observable<E>;\n pipe<A, B, C, D, E, F>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>\n ): Observable<F>;\n pipe<A, B, C, D, E, F, G>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>,\n op7: OperatorFunction<F, G>\n ): Observable<G>;\n pipe<A, B, C, D, E, F, G, H>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>,\n op7: OperatorFunction<F, G>,\n op8: OperatorFunction<G, H>\n ): Observable<H>;\n pipe<A, B, C, D, E, F, G, H, I>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>,\n op7: OperatorFunction<F, G>,\n op8: OperatorFunction<G, H>,\n op9: OperatorFunction<H, I>\n ): Observable<I>;\n pipe<A, B, C, D, E, F, G, H, I>(\n op1: OperatorFunction<T, A>,\n op2: OperatorFunction<A, B>,\n op3: OperatorFunction<B, C>,\n op4: OperatorFunction<C, D>,\n op5: OperatorFunction<D, E>,\n op6: OperatorFunction<E, F>,\n op7: OperatorFunction<F, G>,\n op8: OperatorFunction<G, H>,\n op9: OperatorFunction<H, I>,\n ...operations: OperatorFunction<any, any>[]\n ): Observable<unknown>;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * ## Example\n *\n * ```ts\n * import { interval, filter, map, scan } from 'rxjs';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x));\n * ```\n */\n pipe(...operations: OperatorFunction<any, any>[]): Observable<any> {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise<T | undefined>;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise<T | undefined>;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise<T | undefined>;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @method toPromise\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise<T | undefined> {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise<T | undefined>;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver<T>(value: any): value is Observer<T> {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber<T>(value: any): value is Subscriber<T> {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction } from '../types';\nimport { isFunction } from './isFunction';\n\n/**\n * Used to determine if an object is an Observable with a lift function.\n */\nexport function hasLift(source: any): source is { lift: InstanceType<typeof Observable>['lift'] } {\n return isFunction(source?.lift);\n}\n\n/**\n * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way.\n * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription.\n */\nexport function operate<T, R>(\n init: (liftedSource: Observable<T>, subscriber: Subscriber<R>) => (() => void) | void\n): OperatorFunction<T, R> {\n return (source: Observable<T>) => {\n if (hasLift(source)) {\n return source.lift(function (this: Subscriber<R>, liftedSource: Observable<T>) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n", "import { Subscriber } from '../Subscriber';\n\n/**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\nexport function createOperatorSubscriber<T>(\n destination: Subscriber<any>,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n onFinalize?: () => void\n): Subscriber<T> {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber<T> extends Subscriber<T> {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional finalization logic here. This will only be called on finalization if the\n * subscriber itself is not already closed. This is called after all other finalization logic is executed.\n * @param shouldUnsubscribe An optional check to see if an unsubscribe call should truly unsubscribe.\n * NOTE: This currently **ONLY** exists to support the strange behavior of {@link groupBy}, where unsubscription\n * to the resulting observable does not actually disconnect from the source if there are active subscriptions\n * to any grouped observable. (DO NOT EXPOSE OR USE EXTERNALLY!!!)\n */\n constructor(\n destination: Subscriber<any>,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void,\n private shouldUnsubscribe?: () => boolean\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber<T>, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber<T>, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber<T>) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n }\n}\n", "import { Subscription } from '../Subscription';\n\ninterface AnimationFrameProvider {\n schedule(callback: FrameRequestCallback): Subscription;\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n delegate:\n | {\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n }\n | undefined;\n}\n\nexport const animationFrameProvider: AnimationFrameProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n // Clear the cancel function. The request has been fulfilled, so\n // attempting to cancel the request upon unsubscription would be\n // pointless.\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel?.(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n", "import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject<T> extends Observable<T> implements SubscriptionLike {\n closed = false;\n\n private currentObservers: Observer<T>[] | null = null;\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer<T>[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @nocollapse\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = <T>(destination: Observer<T>, source: Observable<T>): AnonymousSubject<T> => {\n return new AnonymousSubject<T>(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift<R>(operator: Operator<T, R>): Observable<R> {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber<T>): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber<T>): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber<any>) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber<any>) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create custom Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return {Observable} Observable that the Subject casts to\n */\n asObservable(): Observable<T> {\n const observable: any = new Observable<T>();\n observable.source = this;\n return observable;\n }\n}\n\n/**\n * @class AnonymousSubject<T>\n */\nexport class AnonymousSubject<T> extends Subject<T> {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer<T>,\n source?: Observable<T>\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber<T>): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n", "import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n", "import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple of exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject<T> extends Subject<T> {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param bufferSize The size of the buffer to replay on subscription\n * @param windowTime The amount of time the buffered items will stay buffered\n * @param timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber<T>): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Subscription } from '../Subscription';\nimport { SchedulerAction } from '../types';\n\n/**\n * A unit of work to be executed in a `scheduler`. An action is typically\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action<T> extends Subscription {\n * new (scheduler: Scheduler, work: (state?: T) => void);\n * schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action<T>\n */\nexport class Action<T> extends Subscription {\n constructor(scheduler: Scheduler, work: (this: SchedulerAction<T>, state?: T) => void) {\n super();\n }\n /**\n * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\n * some context object, `state`. May happen at some point in the future,\n * according to the `delay` parameter, if specified.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler.\n * @return {void}\n */\n public schedule(state?: T, delay: number = 0): Subscription {\n return this;\n }\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearIntervalFunction = (handle: TimerHandle) => void;\n\ninterface IntervalProvider {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n delegate:\n | {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n }\n | undefined;\n}\n\nexport const intervalProvider: IntervalProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setInterval(handler: () => void, timeout?: number, ...args) {\n const { delegate } = intervalProvider;\n if (delegate?.setInterval) {\n return delegate.setInterval(handler, timeout, ...args);\n }\n return setInterval(handler, timeout, ...args);\n },\n clearInterval(handle) {\n const { delegate } = intervalProvider;\n return (delegate?.clearInterval || clearInterval)(handle as any);\n },\n delegate: undefined,\n};\n", "import { Action } from './Action';\nimport { SchedulerAction } from '../types';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncAction<T> extends Action<T> {\n public id: TimerHandle | undefined;\n public state?: T;\n // @ts-ignore: Property has no initializer and is not definitely assigned\n public delay: number;\n protected pending: boolean = false;\n\n constructor(protected scheduler: AsyncScheduler, protected work: (this: SchedulerAction<T>, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (this.closed) {\n return this;\n }\n\n // Always replace the current state with the new state.\n this.state = state;\n\n const id = this.id;\n const scheduler = this.scheduler;\n\n //\n // Important implementation note:\n //\n // Actions only execute once by default, unless rescheduled from within the\n // scheduled callback. This allows us to implement single and repeat\n // actions via the same code path, without adding API surface area, as well\n // as mimic traditional recursion but across asynchronous boundaries.\n //\n // However, JS runtimes and timers distinguish between intervals achieved by\n // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n // serial `setTimeout` calls can be individually delayed, which delays\n // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n // guarantee the interval callback will be invoked more precisely to the\n // interval period, regardless of load.\n //\n // Therefore, we use `setInterval` to schedule single and repeat actions.\n // If the action reschedules itself with the same delay, the interval is not\n // canceled. If the action doesn't reschedule, or reschedules with a\n // different delay, the interval will be canceled after scheduled callback\n // execution.\n //\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n // Set the pending flag indicating that this action has been scheduled, or\n // has recursively rescheduled itself.\n this.pending = true;\n\n this.delay = delay;\n // If this action has already an async Id, don't request a new one.\n this.id = this.id ?? this.requestAsyncId(scheduler, this.id, delay);\n\n return this;\n }\n\n protected requestAsyncId(scheduler: AsyncScheduler, _id?: TimerHandle, delay: number = 0): TimerHandle {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n\n protected recycleAsyncId(_scheduler: AsyncScheduler, id?: TimerHandle, delay: number | null = 0): TimerHandle | undefined {\n // If this action is rescheduled with the same delay time, don't clear the interval id.\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n // Otherwise, if the action's delay time is different from the current delay,\n // or the action has been rescheduled before it's executed, clear the interval id\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n\n return undefined;\n }\n\n /**\n * Immediately executes this action and the `work` it contains.\n * @return {any}\n */\n public execute(state: T, delay: number): any {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n // Dequeue if the action didn't reschedule itself. Don't call\n // unsubscribe(), because the action could reschedule later.\n // For example:\n // ```\n // scheduler.schedule(function doWork(counter) {\n // /* ... I'm a busy worker bee ... */\n // var originalAction = this;\n // /* wait 100ms before rescheduling the action */\n // setTimeout(function () {\n // originalAction.schedule(counter + 1);\n // }, 100);\n // }, 1000);\n // ```\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n\n protected _execute(state: T, _delay: number): any {\n let errored: boolean = false;\n let errorValue: any;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n // HACK: Since code elsewhere is relying on the \"truthiness\" of the\n // return here, we can't have it return \"\" or 0 or false.\n // TODO: Clean this up when we refactor schedulers mid-version-8 or so.\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n\n unsubscribe() {\n if (!this.closed) {\n const { id, scheduler } = this;\n const { actions } = scheduler;\n\n this.work = this.state = this.scheduler = null!;\n this.pending = false;\n\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null!;\n super.unsubscribe();\n }\n }\n}\n", "import { Action } from './scheduler/Action';\nimport { Subscription } from './Subscription';\nimport { SchedulerLike, SchedulerAction } from './types';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an `Action`.\n *\n * ```ts\n * class Scheduler {\n * now(): number;\n * schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\n * should not be used directly. Rather, create your own class and implement\n * {@link SchedulerLike}. Will be made internal in v8.\n */\nexport class Scheduler implements SchedulerLike {\n public static now: () => number = dateTimestampProvider.now;\n\n constructor(private schedulerActionCtor: typeof Action, now: () => number = Scheduler.now) {\n this.now = now;\n }\n\n /**\n * A getter method that returns a number representing the current time\n * (at the time this function was called) according to the scheduler's own\n * internal clock.\n * @return {number} A number that represents the current time. May or may not\n * have a relation to wall-clock time. May or may not refer to a time unit\n * (e.g. milliseconds).\n */\n public now: () => number;\n\n /**\n * Schedules a function, `work`, for execution. May happen at some point in\n * the future, according to the `delay` parameter, if specified. May be passed\n * some context object, `state`, which will be passed to the `work` function.\n *\n * The given arguments will be processed an stored as an Action object in a\n * queue of actions.\n *\n * @param {function(state: ?T): ?Subscription} work A function representing a\n * task, or some unit of work to be executed by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler itself.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @return {Subscription} A subscription in order to be able to unsubscribe\n * the scheduled work.\n */\n public schedule<T>(work: (this: SchedulerAction<T>, state?: T) => void, delay: number = 0, state?: T): Subscription {\n return new this.schedulerActionCtor<T>(this, work).schedule(state, delay);\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Action } from './Action';\nimport { AsyncAction } from './AsyncAction';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncScheduler extends Scheduler {\n public actions: Array<AsyncAction<any>> = [];\n /**\n * A flag to indicate whether the Scheduler is currently executing a batch of\n * queued actions.\n * @type {boolean}\n * @internal\n */\n public _active: boolean = false;\n /**\n * An internal ID used to track the latest asynchronous task such as those\n * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n * others.\n * @type {any}\n * @internal\n */\n public _scheduled: TimerHandle | undefined;\n\n constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {\n super(SchedulerAction, now);\n }\n\n public flush(action: AsyncAction<any>): void {\n const { actions } = this;\n\n if (this._active) {\n actions.push(action);\n return;\n }\n\n let error: any;\n this._active = true;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()!)); // exhaust the scheduler queue\n\n this._active = false;\n\n if (error) {\n while ((action = actions.shift()!)) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\n/**\n *\n * Async Scheduler\n *\n * <span class=\"informal\">Schedule task as if you used setTimeout(task, duration)</span>\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asapScheduler} scheduler.\n *\n * ## Examples\n * Use async scheduler to delay task\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * const task = () => console.log('it works!');\n *\n * asyncScheduler.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n * ```\n *\n * Use async scheduler to repeat task in intervals\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * function task(state) {\n * console.log(state);\n * this.schedule(state + 1, 1000); // `this` references currently executing Action,\n * // which we reschedule with new state and delay\n * }\n *\n * asyncScheduler.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n * ```\n */\n\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\n\n/**\n * @deprecated Renamed to {@link asyncScheduler}. Will be removed in v8.\n */\nexport const async = asyncScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nimport { SchedulerAction } from '../types';\nimport { animationFrameProvider } from './animationFrameProvider';\nimport { TimerHandle } from './timerHandle';\n\nexport class AnimationFrameAction<T> extends AsyncAction<T> {\n constructor(protected scheduler: AnimationFrameScheduler, protected work: (this: SchedulerAction<T>, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If an animation frame has already been requested, don't request another\n // one. If an animation frame hasn't been requested yet, request one. Return\n // the current animation frame request id.\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n\n protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle | undefined {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue has no remaining actions with the same async id,\n // cancel the requested animation frame and set the scheduled flag to\n // undefined so the next AnimationFrameAction will request its own.\n const { actions } = scheduler;\n if (id != null && actions[actions.length - 1]?.id !== id) {\n animationFrameProvider.cancelAnimationFrame(id as number);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AnimationFrameScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction<any>): void {\n this._active = true;\n // The async id that effects a call to flush is stored in _scheduled.\n // Before executing an action, it's necessary to check the action's async\n // id to determine whether it's supposed to be executed in the current\n // flush.\n // Previous implementations of this method used a count to determine this,\n // but that was unsound, as actions that are unsubscribed - i.e. cancelled -\n // are removed from the actions array and that can shift actions that are\n // scheduled to be executed in a subsequent flush into positions at which\n // they are executed within the current flush.\n const flushId = this._scheduled;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n action = action || actions.shift()!;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n\n this._active = false;\n\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\n\n/**\n *\n * Animation Frame Scheduler\n *\n * <span class=\"informal\">Perform task when `window.requestAnimationFrame` would fire</span>\n *\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\n * behaviour.\n *\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\n * It makes sure scheduled task will happen just before next browser content repaint,\n * thus performing animations as efficiently as possible.\n *\n * ## Example\n * Schedule div height animation\n * ```ts\n * // html: <div style=\"background: #0ff;\"></div>\n * import { animationFrameScheduler } from 'rxjs';\n *\n * const div = document.querySelector('div');\n *\n * animationFrameScheduler.schedule(function(height) {\n * div.style.height = height + \"px\";\n *\n * this.schedule(height + 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * }, 0, 0);\n *\n * // You will see a div element growing in height\n * ```\n */\n\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\n\n/**\n * @deprecated Renamed to {@link animationFrameScheduler}. Will be removed in v8.\n */\nexport const animationFrame = animationFrameScheduler;\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * A simple Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * <span class=\"informal\">Just emits 'complete', and nothing else.</span>\n *\n * ![](empty.png)\n *\n * A simple Observable that only emits the complete notification. It can be used\n * for composing with other Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n *\n * Emit the number 7, then complete\n *\n * ```ts\n * import { EMPTY, startWith } from 'rxjs';\n *\n * const result = EMPTY.pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * Map and flatten only odd numbers to the sequence `'a'`, `'b'`, `'c'`\n *\n * ```ts\n * import { interval, mergeMap, of, EMPTY } from 'rxjs';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : EMPTY),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link NEVER}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const EMPTY = new Observable<never>((subscriber) => subscriber.complete());\n\n/**\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable<never>((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport function isScheduler(value: any): value is SchedulerLike {\n return value && isFunction(value.schedule);\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last<T>(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n", "export const isArrayLike = (<T>(x: any): x is ArrayLike<T> => x && typeof x.length === 'number' && typeof x !== 'function');", "import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike<any> {\n return isFunction(value?.then);\n}\n", "import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable<any> {\n return isFunction(input[Symbol_observable]);\n}\n", "import { isFunction } from './isFunction';\n\nexport function isAsyncIterable<T>(obj: any): obj is AsyncIterable<T> {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n", "/**\n * Creates the TypeError to throw if an invalid object is passed to `from` or `scheduled`.\n * @param input The object that was passed.\n */\nexport function createInvalidObservableTypeError(input: any) {\n // TODO: We should create error codes that can be looked up, so this can be less verbose.\n return new TypeError(\n `You provided ${\n input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`\n } where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`\n );\n}\n", "export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n", "import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable<any> {\n return isFunction(input?.[Symbol_iterator]);\n}\n", "import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator<T>(readableStream: ReadableStreamLike<T>): AsyncGenerator<T> {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike<T>(obj: any): obj is ReadableStreamLike<T> {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an <iframe>.\n return isFunction(obj?.getReader);\n}\n", "import { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { ObservableInput, ObservedValueOf, ReadableStreamLike } from '../types';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { Subscriber } from '../Subscriber';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\n\nexport function innerFrom<O extends ObservableInput<any>>(input: O): Observable<ObservedValueOf<O>>;\nexport function innerFrom<T>(input: ObservableInput<T>): Observable<T> {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n\n throw createInvalidObservableTypeError(input);\n}\n\n/**\n * Creates an RxJS Observable from an object that implements `Symbol.observable`.\n * @param obj An object that properly implements `Symbol.observable`.\n */\nexport function fromInteropObservable<T>(obj: any) {\n return new Observable((subscriber: Subscriber<T>) => {\n const obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n // Should be caught by observable subscribe function error handling.\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\n\n/**\n * Synchronously emits the values of an array like and completes.\n * This is exported because there are creation functions and operators that need to\n * make direct use of the same logic, and there's no reason to make them run through\n * `from` conditionals because we *know* they're dealing with an array.\n * @param array The array to emit values from\n */\nexport function fromArrayLike<T>(array: ArrayLike<T>) {\n return new Observable((subscriber: Subscriber<T>) => {\n // Loop over the array and emit each value. Note two things here:\n // 1. We're making sure that the subscriber is not closed on each loop.\n // This is so we don't continue looping over a very large array after\n // something like a `take`, `takeWhile`, or other synchronous unsubscription\n // has already unsubscribed.\n // 2. In this form, reentrant code can alter that array we're looping over.\n // This is a known issue, but considered an edge case. The alternative would\n // be to copy the array before executing the loop, but this has\n // performance implications.\n for (let i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\n\nexport function fromPromise<T>(promise: PromiseLike<T>) {\n return new Observable((subscriber: Subscriber<T>) => {\n promise\n .then(\n (value) => {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n },\n (err: any) => subscriber.error(err)\n )\n .then(null, reportUnhandledError);\n });\n}\n\nexport function fromIterable<T>(iterable: Iterable<T>) {\n return new Observable((subscriber: Subscriber<T>) => {\n for (const value of iterable) {\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n });\n}\n\nexport function fromAsyncIterable<T>(asyncIterable: AsyncIterable<T>) {\n return new Observable((subscriber: Subscriber<T>) => {\n process(asyncIterable, subscriber).catch((err) => subscriber.error(err));\n });\n}\n\nexport function fromReadableStreamLike<T>(readableStream: ReadableStreamLike<T>) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\n\nasync function process<T>(asyncIterable: AsyncIterable<T>, subscriber: Subscriber<T>) {\n for await (const value of asyncIterable) {\n subscriber.next(value);\n // A side-effect may have closed our subscriber,\n // check before the next iteration.\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n}\n", "import { Subscription } from '../Subscription';\nimport { SchedulerAction, SchedulerLike } from '../types';\n\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay: number,\n repeat: true\n): void;\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay?: number,\n repeat?: false\n): Subscription;\n\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay = 0,\n repeat = false\n): Subscription | void {\n const scheduleSubscription = scheduler.schedule(function (this: SchedulerAction<any>) {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n } else {\n this.unsubscribe();\n }\n }, delay);\n\n parentSubscription.add(scheduleSubscription);\n\n if (!repeat) {\n // Because user-land scheduler implementations are unlikely to properly reuse\n // Actions for repeat scheduling, we can't trust that the returned subscription\n // will control repeat subscription scenarios. So we're trying to avoid using them\n // incorrectly within this library.\n return scheduleSubscription;\n }\n}\n", "/** @prettier */\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Re-emits all notifications from source Observable with specified scheduler.\n *\n * <span class=\"informal\">Ensure a specific scheduler is used, from outside of an Observable.</span>\n *\n * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule\n * notifications emitted by the source Observable. It might be useful, if you do not have control over\n * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.\n *\n * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,\n * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal\n * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits\n * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.\n * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split\n * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source\n * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a\n * little bit more, to ensure that they are emitted at expected moments.\n *\n * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications\n * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`\n * will delay all notifications - including error notifications - while `delay` will pass through error\n * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator\n * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used\n * for notification emissions in general.\n *\n * ## Example\n *\n * Ensure values in subscribe are called just before browser repaint\n *\n * ```ts\n * import { interval, observeOn, animationFrameScheduler } from 'rxjs';\n *\n * const someDiv = document.createElement('div');\n * someDiv.style.cssText = 'width: 200px;background: #09c';\n * document.body.appendChild(someDiv);\n * const intervals = interval(10); // Intervals are scheduled\n * // with async scheduler by default...\n * intervals.pipe(\n * observeOn(animationFrameScheduler) // ...but we will observe on animationFrame\n * ) // scheduler to ensure smooth animation.\n * .subscribe(val => {\n * someDiv.style.height = val + 'px';\n * });\n * ```\n *\n * @see {@link delay}\n *\n * @param scheduler Scheduler that will be used to reschedule notifications from source Observable.\n * @param delay Number of milliseconds that states with what delay every notification should be rescheduled.\n * @return A function that returns an Observable that emits the same\n * notifications as the source Observable, but with provided scheduler.\n */\nexport function observeOn<T>(scheduler: SchedulerLike, delay = 0): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => executeSchedule(subscriber, scheduler, () => subscriber.next(value), delay),\n () => executeSchedule(subscriber, scheduler, () => subscriber.complete(), delay),\n (err) => executeSchedule(subscriber, scheduler, () => subscriber.error(err), delay)\n )\n );\n });\n}\n", "import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\n\n/**\n * Asynchronously subscribes Observers to this Observable on the specified {@link SchedulerLike}.\n *\n * With `subscribeOn` you can decide what type of scheduler a specific Observable will be using when it is subscribed to.\n *\n * Schedulers control the speed and order of emissions to observers from an Observable stream.\n *\n * ![](subscribeOn.png)\n *\n * ## Example\n *\n * Given the following code:\n *\n * ```ts\n * import { of, merge } from 'rxjs';\n *\n * const a = of(1, 2, 3);\n * const b = of(4, 5, 6);\n *\n * merge(a, b).subscribe(console.log);\n *\n * // Outputs\n * // 1\n * // 2\n * // 3\n * // 4\n * // 5\n * // 6\n * ```\n *\n * Both Observable `a` and `b` will emit their values directly and synchronously once they are subscribed to.\n *\n * If we instead use the `subscribeOn` operator declaring that we want to use the {@link asyncScheduler} for values emitted by Observable `a`:\n *\n * ```ts\n * import { of, subscribeOn, asyncScheduler, merge } from 'rxjs';\n *\n * const a = of(1, 2, 3).pipe(subscribeOn(asyncScheduler));\n * const b = of(4, 5, 6);\n *\n * merge(a, b).subscribe(console.log);\n *\n * // Outputs\n * // 4\n * // 5\n * // 6\n * // 1\n * // 2\n * // 3\n * ```\n *\n * The reason for this is that Observable `b` emits its values directly and synchronously like before\n * but the emissions from `a` are scheduled on the event loop because we are now using the {@link asyncScheduler} for that specific Observable.\n *\n * @param scheduler The {@link SchedulerLike} to perform subscription actions on.\n * @param delay A delay to pass to the scheduler to delay subscriptions\n * @return A function that returns an Observable modified so that its\n * subscriptions happen on the specified {@link SchedulerLike}.\n */\nexport function subscribeOn<T>(scheduler: SchedulerLike, delay: number = 0): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n subscriber.add(scheduler.schedule(() => source.subscribe(subscriber), delay));\n });\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { InteropObservable, SchedulerLike } from '../types';\n\nexport function scheduleObservable<T>(input: InteropObservable<T>, scheduler: SchedulerLike) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { SchedulerLike } from '../types';\n\nexport function schedulePromise<T>(input: PromiseLike<T>, scheduler: SchedulerLike) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\nexport function scheduleArray<T>(input: ArrayLike<T>, scheduler: SchedulerLike) {\n return new Observable<T>((subscriber) => {\n // The current array index.\n let i = 0;\n // Start iterating over the array like on a schedule.\n return scheduler.schedule(function () {\n if (i === input.length) {\n // If we have hit the end of the array like in the\n // previous job, we can complete.\n subscriber.complete();\n } else {\n // Otherwise let's next the value at the current index,\n // then increment our index.\n subscriber.next(input[i++]);\n // If the last emission didn't cause us to close the subscriber\n // (via take or some side effect), reschedule the job and we'll\n // make another pass.\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\n\n/**\n * Used in {@link scheduled} to create an observable from an Iterable.\n * @param input The iterable to create an observable from\n * @param scheduler The scheduler to use\n */\nexport function scheduleIterable<T>(input: Iterable<T>, scheduler: SchedulerLike) {\n return new Observable<T>((subscriber) => {\n let iterator: Iterator<T, T>;\n\n // Schedule the initial creation of the iterator from\n // the iterable. This is so the code in the iterable is\n // not called until the scheduled job fires.\n executeSchedule(subscriber, scheduler, () => {\n // Create the iterator.\n iterator = (input as any)[Symbol_iterator]();\n\n executeSchedule(\n subscriber,\n scheduler,\n () => {\n let value: T;\n let done: boolean | undefined;\n try {\n // Pull the value out of the iterator\n ({ value, done } = iterator.next());\n } catch (err) {\n // We got an error while pulling from the iterator\n subscriber.error(err);\n return;\n }\n\n if (done) {\n // If it is \"done\" we just complete. This mimics the\n // behavior of JavaScript's `for..of` consumption of\n // iterables, which will not emit the value from an iterator\n // result of `{ done: true: value: 'here' }`.\n subscriber.complete();\n } else {\n // The iterable is not done, emit the value.\n subscriber.next(value);\n }\n },\n 0,\n true\n );\n });\n\n // During finalization, if we see this iterator has a `return` method,\n // then we know it is a Generator, and not just an Iterator. So we call\n // the `return()` function. This will ensure that any `finally { }` blocks\n // inside of the generator we can hit will be hit properly.\n return () => isFunction(iterator?.return) && iterator.return();\n });\n}\n", "import { SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\n\nexport function scheduleAsyncIterable<T>(input: AsyncIterable<T>, scheduler: SchedulerLike) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable<T>((subscriber) => {\n executeSchedule(subscriber, scheduler, () => {\n const iterator = input[Symbol.asyncIterator]();\n executeSchedule(\n subscriber,\n scheduler,\n () => {\n iterator.next().then((result) => {\n if (result.done) {\n // This will remove the subscriptions from\n // the parent subscription.\n subscriber.complete();\n } else {\n subscriber.next(result.value);\n }\n });\n },\n 0,\n true\n );\n });\n });\n}\n", "import { SchedulerLike, ReadableStreamLike } from '../types';\nimport { Observable } from '../Observable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\n\nexport function scheduleReadableStreamLike<T>(input: ReadableStreamLike<T>, scheduler: SchedulerLike): Observable<T> {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n", "import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\n\n/**\n * Converts from a common {@link ObservableInput} type to an observable where subscription and emissions\n * are scheduled on the provided scheduler.\n *\n * @see {@link from}\n * @see {@link of}\n *\n * @param input The observable, array, promise, iterable, etc you would like to schedule\n * @param scheduler The scheduler to use to schedule the subscription and emissions from\n * the returned observable.\n */\nexport function scheduled<T>(input: ObservableInput<T>, scheduler: SchedulerLike): Observable<T> {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n", "import { Observable } from '../Observable';\nimport { ObservableInput, SchedulerLike, ObservedValueOf } from '../types';\nimport { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\n\nexport function from<O extends ObservableInput<any>>(input: O): Observable<ObservedValueOf<O>>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function from<O extends ObservableInput<any>>(input: O, scheduler: SchedulerLike | undefined): Observable<ObservedValueOf<O>>;\n\n/**\n * Creates an Observable from an Array, an array-like object, a Promise, an iterable object, or an Observable-like object.\n *\n * <span class=\"informal\">Converts almost anything to an Observable.</span>\n *\n * ![](from.png)\n *\n * `from` converts various other objects and data types into Observables. It also converts a Promise, an array-like, or an\n * <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable\" target=\"_blank\">iterable</a>\n * object into an Observable that emits the items in that promise, array, or iterable. A String, in this context, is treated\n * as an array of characters. Observable-like objects (contains a function named with the ES2015 Symbol for Observable) can also be\n * converted through this operator.\n *\n * ## Examples\n *\n * Converts an array to an Observable\n *\n * ```ts\n * import { from } from 'rxjs';\n *\n * const array = [10, 20, 30];\n * const result = from(array);\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 10\n * // 20\n * // 30\n * ```\n *\n * Convert an infinite iterable (from a generator) to an Observable\n *\n * ```ts\n * import { from, take } from 'rxjs';\n *\n * function* generateDoubles(seed) {\n * let i = seed;\n * while (true) {\n * yield i;\n * i = 2 * i; // double it\n * }\n * }\n *\n * const iterator = generateDoubles(3);\n * const result = from(iterator).pipe(take(10));\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 3\n * // 6\n * // 12\n * // 24\n * // 48\n * // 96\n * // 192\n * // 384\n * // 768\n * // 1536\n * ```\n *\n * With `asyncScheduler`\n *\n * ```ts\n * import { from, asyncScheduler } from 'rxjs';\n *\n * console.log('start');\n *\n * const array = [10, 20, 30];\n * const result = from(array, asyncScheduler);\n *\n * result.subscribe(x => console.log(x));\n *\n * console.log('end');\n *\n * // Logs:\n * // 'start'\n * // 'end'\n * // 10\n * // 20\n * // 30\n * ```\n *\n * @see {@link fromEvent}\n * @see {@link fromEventPattern}\n *\n * @param {ObservableInput<T>} A subscription object, a Promise, an Observable-like,\n * an Array, an iterable, or an array-like object to be converted.\n * @param {SchedulerLike} An optional {@link SchedulerLike} on which to schedule the emission of values.\n * @return {Observable<T>}\n */\nexport function from<T>(input: ObservableInput<T>, scheduler?: SchedulerLike): Observable<T> {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n", "import { SchedulerLike, ValueFromArray } from '../types';\nimport { Observable } from '../Observable';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\n\n// Devs are more likely to pass null or undefined than they are a scheduler\n// without accompanying values. To make things easier for (naughty) devs who\n// use the `strictNullChecks: false` TypeScript compiler option, these\n// overloads with explicit null and undefined values are included.\n\nexport function of(value: null): Observable<null>;\nexport function of(value: undefined): Observable<undefined>;\n\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function of(scheduler: SchedulerLike): Observable<never>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function of<A extends readonly unknown[]>(...valuesAndScheduler: [...A, SchedulerLike]): Observable<ValueFromArray<A>>;\n\nexport function of(): Observable<never>;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function of<T>(): Observable<T>;\nexport function of<T>(value: T): Observable<T>;\nexport function of<A extends readonly unknown[]>(...values: A): Observable<ValueFromArray<A>>;\n\n/**\n * Converts the arguments to an observable sequence.\n *\n * <span class=\"informal\">Each argument becomes a `next` notification.</span>\n *\n * ![](of.png)\n *\n * Unlike {@link from}, it does not do any flattening and emits each argument in whole\n * as a separate `next` notification.\n *\n * ## Examples\n *\n * Emit the values `10, 20, 30`\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * of(10, 20, 30)\n * .subscribe({\n * next: value => console.log('next:', value),\n * error: err => console.log('error:', err),\n * complete: () => console.log('the end'),\n * });\n *\n * // Outputs\n * // next: 10\n * // next: 20\n * // next: 30\n * // the end\n * ```\n *\n * Emit the array `[1, 2, 3]`\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * of([1, 2, 3])\n * .subscribe({\n * next: value => console.log('next:', value),\n * error: err => console.log('error:', err),\n * complete: () => console.log('the end'),\n * });\n *\n * // Outputs\n * // next: [1, 2, 3]\n * // the end\n * ```\n *\n * @see {@link from}\n * @see {@link range}\n *\n * @param {...T} values A comma separated list of arguments you want to be emitted\n * @return {Observable} An Observable that emits the arguments\n * described above and then completes.\n */\nexport function of<T>(...args: Array<T | SchedulerLike>): Observable<T> {\n const scheduler = popScheduler(args);\n return from(args as T[], scheduler);\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { SchedulerLike } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * Creates an observable that will create an error instance and push it to the consumer as an error\n * immediately upon subscription.\n *\n * <span class=\"informal\">Just errors and does nothing else</span>\n *\n * ![](throw.png)\n *\n * This creation function is useful for creating an observable that will create an error and error every\n * time it is subscribed to. Generally, inside of most operators when you might want to return an errored\n * observable, this is unnecessary. In most cases, such as in the inner return of {@link concatMap},\n * {@link mergeMap}, {@link defer}, and many others, you can simply throw the error, and RxJS will pick\n * that up and notify the consumer of the error.\n *\n * ## Example\n *\n * Create a simple observable that will create a new error with a timestamp and log it\n * and the message every time you subscribe to it\n *\n * ```ts\n * import { throwError } from 'rxjs';\n *\n * let errorCount = 0;\n *\n * const errorWithTimestamp$ = throwError(() => {\n * const error: any = new Error(`This is error number ${ ++errorCount }`);\n * error.timestamp = Date.now();\n * return error;\n * });\n *\n * errorWithTimestamp$.subscribe({\n * error: err => console.log(err.timestamp, err.message)\n * });\n *\n * errorWithTimestamp$.subscribe({\n * error: err => console.log(err.timestamp, err.message)\n * });\n *\n * // Logs the timestamp and a new error message for each subscription\n * ```\n *\n * ### Unnecessary usage\n *\n * Using `throwError` inside of an operator or creation function\n * with a callback, is usually not necessary\n *\n * ```ts\n * import { of, concatMap, timer, throwError } from 'rxjs';\n *\n * const delays$ = of(1000, 2000, Infinity, 3000);\n *\n * delays$.pipe(\n * concatMap(ms => {\n * if (ms < 10000) {\n * return timer(ms);\n * } else {\n * // This is probably overkill.\n * return throwError(() => new Error(`Invalid time ${ ms }`));\n * }\n * })\n * )\n * .subscribe({\n * next: console.log,\n * error: console.error\n * });\n * ```\n *\n * You can just throw the error instead\n *\n * ```ts\n * import { of, concatMap, timer } from 'rxjs';\n *\n * const delays$ = of(1000, 2000, Infinity, 3000);\n *\n * delays$.pipe(\n * concatMap(ms => {\n * if (ms < 10000) {\n * return timer(ms);\n * } else {\n * // Cleaner and easier to read for most folks.\n * throw new Error(`Invalid time ${ ms }`);\n * }\n * })\n * )\n * .subscribe({\n * next: console.log,\n * error: console.error\n * });\n * ```\n *\n * @param errorFactory A factory function that will create the error instance that is pushed.\n */\nexport function throwError(errorFactory: () => any): Observable<never>;\n\n/**\n * Returns an observable that will error with the specified error immediately upon subscription.\n *\n * @param error The error instance to emit\n * @deprecated Support for passing an error value will be removed in v8. Instead, pass a factory function to `throwError(() => new Error('test'))`. This is\n * because it will create the error at the moment it should be created and capture a more appropriate stack trace. If\n * for some reason you need to create the error ahead of time, you can still do that: `const err = new Error('test'); throwError(() => err);`.\n */\nexport function throwError(error: any): Observable<never>;\n\n/**\n * Notifies the consumer of an error using a given scheduler by scheduling it at delay `0` upon subscription.\n *\n * @param errorOrErrorFactory An error instance or error factory\n * @param scheduler A scheduler to use to schedule the error notification\n * @deprecated The `scheduler` parameter will be removed in v8.\n * Use `throwError` in combination with {@link observeOn}: `throwError(() => new Error('test')).pipe(observeOn(scheduler));`.\n * Details: https://rxjs.dev/deprecations/scheduler-argument\n */\nexport function throwError(errorOrErrorFactory: any, scheduler: SchedulerLike): Observable<never>;\n\nexport function throwError(errorOrErrorFactory: any, scheduler?: SchedulerLike): Observable<never> {\n const errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : () => errorOrErrorFactory;\n const init = (subscriber: Subscriber<never>) => subscriber.error(errorFactory());\n return new Observable(scheduler ? (subscriber) => scheduler.schedule(init as any, 0, subscriber) : init);\n}\n", "/**\n * Checks to see if a value is not only a `Date` object,\n * but a *valid* `Date` object that can be converted to a\n * number. For example, `new Date('blah')` is indeed an\n * `instanceof Date`, however it cannot be converted to a\n * number.\n */\nexport function isValidDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value as any);\n}\n", "import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\nexport function map<T, R>(project: (value: T, index: number) => R): OperatorFunction<T, R>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function map<T, R, A>(project: (this: A, value: T, index: number) => R, thisArg: A): OperatorFunction<T, R>;\n\n/**\n * Applies a given `project` function to each value emitted by the source\n * Observable, and emits the resulting values as an Observable.\n *\n * <span class=\"informal\">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),\n * it passes each source value through a transformation function to get\n * corresponding output values.</span>\n *\n * ![](map.png)\n *\n * Similar to the well known `Array.prototype.map` function, this operator\n * applies a projection to each value and emits that projection in the output\n * Observable.\n *\n * ## Example\n *\n * Map every click to the `clientX` position of that click\n *\n * ```ts\n * import { fromEvent, map } from 'rxjs';\n *\n * const clicks = fromEvent<PointerEvent>(document, 'click');\n * const positions = clicks.pipe(map(ev => ev.clientX));\n *\n * positions.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link mapTo}\n * @see {@link pluck}\n *\n * @param {function(value: T, index: number): R} project The function to apply\n * to each `value` emitted by the source Observable. The `index` parameter is\n * the number `i` for the i-th emission that has happened since the\n * subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to define what `this` is in the\n * `project` function.\n * @return A function that returns an Observable that emits the values from the\n * source Observable transformed by the given `project` function.\n */\nexport function map<T, R>(project: (value: T, index: number) => R, thisArg?: any): OperatorFunction<T, R> {\n return operate((source, subscriber) => {\n // The index of the value from the source. Used with projection.\n let index = 0;\n // Subscribe to the source, all errors and completions are sent along\n // to the consumer.\n source.subscribe(\n createOperatorSubscriber(subscriber, (value: T) => {\n // Call the projection function with the appropriate this context,\n // and send the resulting value to the consumer.\n subscriber.next(project.call(thisArg, value, index++));\n })\n );\n });\n}\n", "import { OperatorFunction } from \"../types\";\nimport { map } from \"../operators/map\";\n\nconst { isArray } = Array;\n\nfunction callOrApply<T, R>(fn: ((...values: T[]) => R), args: T|T[]): R {\n return isArray(args) ? fn(...args) : fn(args);\n}\n\n/**\n * Used in several -- mostly deprecated -- situations where we need to \n * apply a list of arguments or a single argument to a result selector.\n */\nexport function mapOneOrManyArgs<T, R>(fn: ((...values: T[]) => R)): OperatorFunction<T|T[], R> {\n return map(args => callOrApply(fn, args))\n}", "const { isArray } = Array;\nconst { getPrototypeOf, prototype: objectProto, keys: getKeys } = Object;\n\n/**\n * Used in functions where either a list of arguments, a single array of arguments, or a\n * dictionary of arguments can be returned. Returns an object with an `args` property with\n * the arguments in an array, if it is a dictionary, it will also return the `keys` in another\n * property.\n */\nexport function argsArgArrayOrObject<T, O extends Record<string, T>>(args: T[] | [O] | [T[]]): { args: T[]; keys: string[] | null } {\n if (args.length === 1) {\n const first = args[0];\n if (isArray(first)) {\n return { args: first, keys: null };\n }\n if (isPOJO(first)) {\n const keys = getKeys(first);\n return {\n args: keys.map((key) => first[key]),\n keys,\n };\n }\n }\n\n return { args: args as T[], keys: null };\n}\n\nfunction isPOJO(obj: any): obj is object {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n", "export function createObject(keys: string[], values: any[]) {\n return keys.reduce((result, key, i) => ((result[key] = values[i]), result), {} as any);\n}\n", "import { Observable } from '../Observable';\nimport { ObservableInput, SchedulerLike, ObservedValueOf, ObservableInputTuple } from '../types';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { Subscriber } from '../Subscriber';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { Subscription } from '../Subscription';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { AnyCatcher } from '../AnyCatcher';\nimport { executeSchedule } from '../util/executeSchedule';\n\n// combineLatest(any)\n// We put this first because we need to catch cases where the user has supplied\n// _exactly `any`_ as the argument. Since `any` literally matches _anything_,\n// we don't want it to randomly hit one of the other type signatures below,\n// as we have no idea at build-time what type we should be returning when given an any.\n\n/**\n * You have passed `any` here, we can't figure out if it is\n * an array or an object, so you're getting `unknown`. Use better types.\n * @param arg Something typed as `any`\n */\nexport function combineLatest<T extends AnyCatcher>(arg: T): Observable<unknown>;\n\n// combineLatest([a, b, c])\nexport function combineLatest(sources: []): Observable<never>;\nexport function combineLatest<A extends readonly unknown[]>(sources: readonly [...ObservableInputTuple<A>]): Observable<A>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest<A extends readonly unknown[], R>(\n sources: readonly [...ObservableInputTuple<A>],\n resultSelector: (...values: A) => R,\n scheduler: SchedulerLike\n): Observable<R>;\nexport function combineLatest<A extends readonly unknown[], R>(\n sources: readonly [...ObservableInputTuple<A>],\n resultSelector: (...values: A) => R\n): Observable<R>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest<A extends readonly unknown[]>(\n sources: readonly [...ObservableInputTuple<A>],\n scheduler: SchedulerLike\n): Observable<A>;\n\n// combineLatest(a, b, c)\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function combineLatest<A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): Observable<A>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest<A extends readonly unknown[], R>(\n ...sourcesAndResultSelectorAndScheduler: [...ObservableInputTuple<A>, (...values: A) => R, SchedulerLike]\n): Observable<R>;\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function combineLatest<A extends readonly unknown[], R>(\n ...sourcesAndResultSelector: [...ObservableInputTuple<A>, (...values: A) => R]\n): Observable<R>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest<A extends readonly unknown[]>(\n ...sourcesAndScheduler: [...ObservableInputTuple<A>, SchedulerLike]\n): Observable<A>;\n\n// combineLatest({a, b, c})\nexport function combineLatest(sourcesObject: { [K in any]: never }): Observable<never>;\nexport function combineLatest<T extends Record<string, ObservableInput<any>>>(\n sourcesObject: T\n): Observable<{ [K in keyof T]: ObservedValueOf<T[K]> }>;\n\n/**\n * Combines multiple Observables to create an Observable whose values are\n * calculated from the latest values of each of its input Observables.\n *\n * <span class=\"informal\">Whenever any input Observable emits a value, it\n * computes a formula using the latest values from all the inputs, then emits\n * the output of that formula.</span>\n *\n * ![](combineLatest.png)\n *\n * `combineLatest` combines the values from all the Observables passed in the\n * observables array. This is done by subscribing to each Observable in order and,\n * whenever any Observable emits, collecting an array of the most recent\n * values from each Observable. So if you pass `n` Observables to this operator,\n * the returned Observable will always emit an array of `n` values, in an order\n * corresponding to the order of the passed Observables (the value from the first Observable\n * will be at index 0 of the array and so on).\n *\n * Static version of `combineLatest` accepts an array of Observables. Note that an array of\n * Observables is a good choice, if you don't know beforehand how many Observables\n * you will combine. Passing an empty array will result in an Observable that\n * completes immediately.\n *\n * To ensure the output array always has the same length, `combineLatest` will\n * actually wait for all input Observables to emit at least once,\n * before it starts emitting results. This means if some Observable emits\n * values before other Observables started emitting, all these values but the last\n * will be lost. On the other hand, if some Observable does not emit a value but\n * completes, resulting Observable will complete at the same moment without\n * emitting anything, since it will now be impossible to include a value from the\n * completed Observable in the resulting array. Also, if some input Observable does\n * not emit any value and never completes, `combineLatest` will also never emit\n * and never complete, since, again, it will wait for all streams to emit some\n * value.\n *\n * If at least one Observable was passed to `combineLatest` and all passed Observables\n * emitted something, the resulting Observable will complete when all combined\n * streams complete. So even if some Observable completes, the result of\n * `combineLatest` will still emit values when other Observables do. In case\n * of a completed Observable, its value from now on will always be the last\n * emitted value. On the other hand, if any Observable errors, `combineLatest`\n * will error immediately as well, and all other Observables will be unsubscribed.\n *\n * ## Examples\n *\n * Combine two timer Observables\n *\n * ```ts\n * import { timer, combineLatest } from 'rxjs';\n *\n * const firstTimer = timer(0, 1000); // emit 0, 1, 2... after every second, starting from now\n * const secondTimer = timer(500, 1000); // emit 0, 1, 2... after every second, starting 0,5s from now\n * const combinedTimers = combineLatest([firstTimer, secondTimer]);\n * combinedTimers.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0] after 0.5s\n * // [1, 0] after 1s\n * // [1, 1] after 1.5s\n * // [2, 1] after 2s\n * ```\n *\n * Combine a dictionary of Observables\n *\n * ```ts\n * import { of, delay, startWith, combineLatest } from 'rxjs';\n *\n * const observables = {\n * a: of(1).pipe(delay(1000), startWith(0)),\n * b: of(5).pipe(delay(5000), startWith(0)),\n * c: of(10).pipe(delay(10000), startWith(0))\n * };\n * const combined = combineLatest(observables);\n * combined.subscribe(value => console.log(value));\n * // Logs\n * // { a: 0, b: 0, c: 0 } immediately\n * // { a: 1, b: 0, c: 0 } after 1s\n * // { a: 1, b: 5, c: 0 } after 5s\n * // { a: 1, b: 5, c: 10 } after 10s\n * ```\n *\n * Combine an array of Observables\n *\n * ```ts\n * import { of, delay, startWith, combineLatest } from 'rxjs';\n *\n * const observables = [1, 5, 10].map(\n * n => of(n).pipe(\n * delay(n * 1000), // emit 0 and then emit n after n seconds\n * startWith(0)\n * )\n * );\n * const combined = combineLatest(observables);\n * combined.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0, 0] immediately\n * // [1, 0, 0] after 1s\n * // [1, 5, 0] after 5s\n * // [1, 5, 10] after 10s\n * ```\n *\n * Use map operator to dynamically calculate the Body-Mass Index\n *\n * ```ts\n * import { of, combineLatest, map } from 'rxjs';\n *\n * const weight = of(70, 72, 76, 79, 75);\n * const height = of(1.76, 1.77, 1.78);\n * const bmi = combineLatest([weight, height]).pipe(\n * map(([w, h]) => w / (h * h)),\n * );\n * bmi.subscribe(x => console.log('BMI is ' + x));\n *\n * // With output to console:\n * // BMI is 24.212293388429753\n * // BMI is 23.93948099205209\n * // BMI is 23.671253629592222\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link merge}\n * @see {@link withLatestFrom}\n *\n * @param {ObservableInput} [observables] An array of input Observables to combine with each other.\n * An array of Observables must be given as the first argument.\n * @param {function} [project] An optional function to project the values from\n * the combined latest values into a new value on the output Observable.\n * @param {SchedulerLike} [scheduler=null] The {@link SchedulerLike} to use for subscribing to\n * each input Observable.\n * @return {Observable} An Observable of projected values from the most recent\n * values from each input Observable, or an array of the most recent values from\n * each input Observable.\n */\nexport function combineLatest<O extends ObservableInput<any>, R>(...args: any[]): Observable<R> | Observable<ObservedValueOf<O>[]> {\n const scheduler = popScheduler(args);\n const resultSelector = popResultSelector(args);\n\n const { args: observables, keys } = argsArgArrayOrObject(args);\n\n if (observables.length === 0) {\n // If no observables are passed, or someone has passed an empty array\n // of observables, or even an empty object POJO, we need to just\n // complete (EMPTY), but we have to honor the scheduler provided if any.\n return from([], scheduler as any);\n }\n\n const result = new Observable<ObservedValueOf<O>[]>(\n combineLatestInit(\n observables as ObservableInput<ObservedValueOf<O>>[],\n scheduler,\n keys\n ? // A handler for scrubbing the array of args into a dictionary.\n (values) => createObject(keys, values)\n : // A passthrough to just return the array\n identity\n )\n );\n\n return resultSelector ? (result.pipe(mapOneOrManyArgs(resultSelector)) as Observable<R>) : result;\n}\n\nexport function combineLatestInit(\n observables: ObservableInput<any>[],\n scheduler?: SchedulerLike,\n valueTransform: (values: any[]) => any = identity\n) {\n return (subscriber: Subscriber<any>) => {\n // The outer subscription. We're capturing this in a function\n // because we may have to schedule it.\n maybeSchedule(\n scheduler,\n () => {\n const { length } = observables;\n // A store for the values each observable has emitted so far. We match observable to value on index.\n const values = new Array(length);\n // The number of currently active subscriptions, as they complete, we decrement this number to see if\n // we are all done combining values, so we can complete the result.\n let active = length;\n // The number of inner sources that still haven't emitted the first value\n // We need to track this because all sources need to emit one value in order\n // to start emitting values.\n let remainingFirstValues = length;\n // The loop to kick off subscription. We're keying everything on index `i` to relate the observables passed\n // in to the slot in the output array or the key in the array of keys in the output dictionary.\n for (let i = 0; i < length; i++) {\n maybeSchedule(\n scheduler,\n () => {\n const source = from(observables[i], scheduler as any);\n let hasFirstValue = false;\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n // When we get a value, record it in our set of values.\n values[i] = value;\n if (!hasFirstValue) {\n // If this is our first value, record that.\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n // We're not waiting for any more\n // first values, so we can emit!\n subscriber.next(valueTransform(values.slice()));\n }\n },\n () => {\n if (!--active) {\n // We only complete the result if we have no more active\n // inner observables.\n subscriber.complete();\n }\n }\n )\n );\n },\n subscriber\n );\n }\n },\n subscriber\n );\n };\n}\n\n/**\n * A small utility to handle the couple of locations where we want to schedule if a scheduler was provided,\n * but we don't if there was no scheduler.\n */\nfunction maybeSchedule(scheduler: SchedulerLike | undefined, execute: () => void, subscription: Subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n } else {\n execute();\n }\n}\n", "import { Observable } from '../Observable';\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subscriber } from '../Subscriber';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * A process embodying the general \"merge\" strategy. This is used in\n * `mergeMap` and `mergeScan` because the logic is otherwise nearly identical.\n * @param source The original source observable\n * @param subscriber The consumer subscriber\n * @param project The projection function to get our inner sources\n * @param concurrent The number of concurrent inner subscriptions\n * @param onBeforeNext Additional logic to apply before nexting to our consumer\n * @param expand If `true` this will perform an \"expand\" strategy, which differs only\n * in that it recurses, and the inner subscription must be schedule-able.\n * @param innerSubScheduler A scheduler to use to schedule inner subscriptions,\n * this is to support the expand strategy, mostly, and should be deprecated\n */\nexport function mergeInternals<T, R>(\n source: Observable<T>,\n subscriber: Subscriber<R>,\n project: (value: T, index: number) => ObservableInput<R>,\n concurrent: number,\n onBeforeNext?: (innerValue: R) => void,\n expand?: boolean,\n innerSubScheduler?: SchedulerLike,\n additionalFinalizer?: () => void\n) {\n // Buffered values, in the event of going over our concurrency limit\n const buffer: T[] = [];\n // The number of active inner subscriptions.\n let active = 0;\n // An index to pass to our accumulator function\n let index = 0;\n // Whether or not the outer source has completed.\n let isComplete = false;\n\n /**\n * Checks to see if we can complete our result or not.\n */\n const checkComplete = () => {\n // If the outer has completed, and nothing is left in the buffer,\n // and we don't have any active inner subscriptions, then we can\n // Emit the state and complete.\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n\n // If we're under our concurrency limit, just start the inner subscription, otherwise buffer and wait.\n const outerNext = (value: T) => (active < concurrent ? doInnerSub(value) : buffer.push(value));\n\n const doInnerSub = (value: T) => {\n // If we're expanding, we need to emit the outer values and the inner values\n // as the inners will \"become outers\" in a way as they are recursively fed\n // back to the projection mechanism.\n expand && subscriber.next(value as any);\n\n // Increment the number of active subscriptions so we can track it\n // against our concurrency limit later.\n active++;\n\n // A flag used to show that the inner observable completed.\n // This is checked during finalization to see if we should\n // move to the next item in the buffer, if there is on.\n let innerComplete = false;\n\n // Start our inner subscription.\n innerFrom(project(value, index++)).subscribe(\n createOperatorSubscriber(\n subscriber,\n (innerValue) => {\n // `mergeScan` has additional handling here. For example\n // taking the inner value and updating state.\n onBeforeNext?.(innerValue);\n\n if (expand) {\n // If we're expanding, then just recurse back to our outer\n // handler. It will emit the value first thing.\n outerNext(innerValue as any);\n } else {\n // Otherwise, emit the inner value.\n subscriber.next(innerValue);\n }\n },\n () => {\n // Flag that we have completed, so we know to check the buffer\n // during finalization.\n innerComplete = true;\n },\n // Errors are passed to the destination.\n undefined,\n () => {\n // During finalization, if the inner completed (it wasn't errored or\n // cancelled), then we want to try the next item in the buffer if\n // there is one.\n if (innerComplete) {\n // We have to wrap this in a try/catch because it happens during\n // finalization, possibly asynchronously, and we want to pass\n // any errors that happen (like in a projection function) to\n // the outer Subscriber.\n try {\n // INNER SOURCE COMPLETE\n // Decrement the active count to ensure that the next time\n // we try to call `doInnerSub`, the number is accurate.\n active--;\n // If we have more values in the buffer, try to process those\n // Note that this call will increment `active` ahead of the\n // next conditional, if there were any more inner subscriptions\n // to start.\n while (buffer.length && active < concurrent) {\n const bufferedValue = buffer.shift()!;\n // Particularly for `expand`, we need to check to see if a scheduler was provided\n // for when we want to start our inner subscription. Otherwise, we just start\n // are next inner subscription.\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));\n } else {\n doInnerSub(bufferedValue);\n }\n }\n // Check to see if we can complete, and complete if so.\n checkComplete();\n } catch (err) {\n subscriber.error(err);\n }\n }\n }\n )\n );\n };\n\n // Subscribe to our source observable.\n source.subscribe(\n createOperatorSubscriber(subscriber, outerNext, () => {\n // Outer completed, make a note of it, and check to see if we can complete everything.\n isComplete = true;\n checkComplete();\n })\n );\n\n // Additional finalization (for when the destination is torn down).\n // Other finalization is added implicitly via subscription above.\n return () => {\n additionalFinalizer?.();\n };\n}\n", "import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function mergeMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n concurrent?: number\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: undefined,\n concurrent?: number\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R,\n concurrent?: number\n): OperatorFunction<T, R>;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link mergeAll}.</span>\n *\n * ![](mergeMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger.\n *\n * ## Example\n *\n * Map and flatten each letter to an Observable ticking every 1 second\n *\n * ```ts\n * import { of, mergeMap, interval, map } from 'rxjs';\n *\n * const letters = of('a', 'b', 'c');\n * const result = letters.pipe(\n * mergeMap(x => interval(1000).pipe(map(i => x + i)))\n * );\n *\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // a0\n * // b0\n * // c0\n * // a1\n * // b1\n * // c1\n * // continues to list a, b, c every second with respective ascending integers\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and merging\n * the results of the Observables obtained from this transformation.\n */\nexport function mergeMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector?: ((outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R) | number,\n concurrent: number = Infinity\n): OperatorFunction<T, ObservedValueOf<O> | R> {\n if (isFunction(resultSelector)) {\n // DEPRECATED PATH\n return mergeMap((a, i) => map((b: any, ii: number) => resultSelector(a, b, i, ii))(innerFrom(project(a, i))), concurrent);\n } else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n\n return operate((source, subscriber) => mergeInternals(source, subscriber, project, concurrent));\n}\n", "import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nimport { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\n\n/**\n * Converts a higher-order Observable into a first-order Observable which\n * concurrently delivers all values that are emitted on the inner Observables.\n *\n * <span class=\"informal\">Flattens an Observable-of-Observables.</span>\n *\n * ![](mergeAll.png)\n *\n * `mergeAll` subscribes to an Observable that emits Observables, also known as\n * a higher-order Observable. Each time it observes one of these emitted inner\n * Observables, it subscribes to that and delivers all the values from the\n * inner Observable on the output Observable. The output Observable only\n * completes once all inner Observables have completed. Any error delivered by\n * a inner Observable will be immediately emitted on the output Observable.\n *\n * ## Examples\n *\n * Spawn a new interval Observable for each click event, and blend their outputs as one Observable\n *\n * ```ts\n * import { fromEvent, map, interval, mergeAll } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(map(() => interval(1000)));\n * const firstOrder = higherOrder.pipe(mergeAll());\n *\n * firstOrder.subscribe(x => console.log(x));\n * ```\n *\n * Count from 0 to 9 every second for each click, but only allow 2 concurrent timers\n *\n * ```ts\n * import { fromEvent, map, interval, take, mergeAll } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map(() => interval(1000).pipe(take(10)))\n * );\n * const firstOrder = higherOrder.pipe(mergeAll(2));\n *\n * firstOrder.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concatAll}\n * @see {@link exhaustAll}\n * @see {@link merge}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link zipAll}\n *\n * @param {number} [concurrent=Infinity] Maximum number of inner\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits values coming from\n * all the inner Observables emitted by the source Observable.\n */\nexport function mergeAll<O extends ObservableInput<any>>(concurrent: number = Infinity): OperatorFunction<O, ObservedValueOf<O>> {\n return mergeMap(identity, concurrent);\n}\n", "import { mergeAll } from './mergeAll';\nimport { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\n\n/**\n * Converts a higher-order Observable into a first-order Observable by\n * concatenating the inner Observables in order.\n *\n * <span class=\"informal\">Flattens an Observable-of-Observables by putting one\n * inner Observable after the other.</span>\n *\n * ![](concatAll.svg)\n *\n * Joins every Observable emitted by the source (a higher-order Observable), in\n * a serial fashion. It subscribes to each inner Observable only after the\n * previous inner Observable has completed, and merges all of their values into\n * the returned observable.\n *\n * __Warning:__ If the source Observable emits Observables quickly and\n * endlessly, and the inner Observables it emits generally complete slower than\n * the source emits, you can run into memory issues as the incoming Observables\n * collect in an unbounded buffer.\n *\n * Note: `concatAll` is equivalent to `mergeAll` with concurrency parameter set\n * to `1`.\n *\n * ## Example\n *\n * For each click event, tick every second from 0 to 3, with no concurrency\n *\n * ```ts\n * import { fromEvent, map, interval, take, concatAll } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map(() => interval(1000).pipe(take(4)))\n * );\n * const firstOrder = higherOrder.pipe(concatAll());\n * firstOrder.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concat}\n * @see {@link concatMap}\n * @see {@link concatMapTo}\n * @see {@link exhaustAll}\n * @see {@link mergeAll}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link zipAll}\n *\n * @return A function that returns an Observable emitting values from all the\n * inner Observables concatenated.\n */\nexport function concatAll<O extends ObservableInput<any>>(): OperatorFunction<O, ObservedValueOf<O>> {\n return mergeAll(1);\n}\n", "import { Observable } from '../Observable';\nimport { ObservableInputTuple, SchedulerLike } from '../types';\nimport { concatAll } from '../operators/concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\n\nexport function concat<T extends readonly unknown[]>(...inputs: [...ObservableInputTuple<T>]): Observable<T[number]>;\nexport function concat<T extends readonly unknown[]>(\n ...inputsAndScheduler: [...ObservableInputTuple<T>, SchedulerLike]\n): Observable<T[number]>;\n\n/**\n * Creates an output Observable which sequentially emits all values from the first given\n * Observable and then moves on to the next.\n *\n * <span class=\"informal\">Concatenates multiple Observables together by\n * sequentially emitting their values, one Observable after the other.</span>\n *\n * ![](concat.png)\n *\n * `concat` joins multiple Observables together, by subscribing to them one at a time and\n * merging their results into the output Observable. You can pass either an array of\n * Observables, or put them directly as arguments. Passing an empty array will result\n * in Observable that completes immediately.\n *\n * `concat` will subscribe to first input Observable and emit all its values, without\n * changing or affecting them in any way. When that Observable completes, it will\n * subscribe to then next Observable passed and, again, emit its values. This will be\n * repeated, until the operator runs out of Observables. When last input Observable completes,\n * `concat` will complete as well. At any given moment only one Observable passed to operator\n * emits values. If you would like to emit values from passed Observables concurrently, check out\n * {@link merge} instead, especially with optional `concurrent` parameter. As a matter of fact,\n * `concat` is an equivalent of `merge` operator with `concurrent` parameter set to `1`.\n *\n * Note that if some input Observable never completes, `concat` will also never complete\n * and Observables following the one that did not complete will never be subscribed. On the other\n * hand, if some Observable simply completes immediately after it is subscribed, it will be\n * invisible for `concat`, which will just move on to the next Observable.\n *\n * If any Observable in chain errors, instead of passing control to the next Observable,\n * `concat` will error immediately as well. Observables that would be subscribed after\n * the one that emitted error, never will.\n *\n * If you pass to `concat` the same Observable many times, its stream of values\n * will be \"replayed\" on every subscription, which means you can repeat given Observable\n * as many times as you like. If passing the same Observable to `concat` 1000 times becomes tedious,\n * you can always use {@link repeat}.\n *\n * ## Examples\n *\n * Concatenate a timer counting from 0 to 3 with a synchronous sequence from 1 to 10\n *\n * ```ts\n * import { interval, take, range, concat } from 'rxjs';\n *\n * const timer = interval(1000).pipe(take(4));\n * const sequence = range(1, 10);\n * const result = concat(timer, sequence);\n * result.subscribe(x => console.log(x));\n *\n * // results in:\n * // 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10\n * ```\n *\n * Concatenate 3 Observables\n *\n * ```ts\n * import { interval, take, concat } from 'rxjs';\n *\n * const timer1 = interval(1000).pipe(take(10));\n * const timer2 = interval(2000).pipe(take(6));\n * const timer3 = interval(500).pipe(take(10));\n *\n * const result = concat(timer1, timer2, timer3);\n * result.subscribe(x => console.log(x));\n *\n * // results in the following:\n * // (Prints to console sequentially)\n * // -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9\n * // -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5\n * // -500ms-> 0 -500ms-> 1 -500ms-> ... 9\n * ```\n *\n * Concatenate the same Observable to repeat it\n *\n * ```ts\n * import { interval, take, concat } from 'rxjs';\n *\n * const timer = interval(1000).pipe(take(2));\n *\n * concat(timer, timer) // concatenating the same Observable!\n * .subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('...and it is done!')\n * });\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 0 after 3s\n * // 1 after 4s\n * // '...and it is done!' also after 4s\n * ```\n *\n * @see {@link concatAll}\n * @see {@link concatMap}\n * @see {@link concatMapTo}\n * @see {@link startWith}\n * @see {@link endWith}\n *\n * @param args Input Observables to concatenate.\n */\nexport function concat(...args: any[]): Observable<unknown> {\n return concatAll()(from(args, popScheduler(args)));\n}\n", "import { Observable } from '../Observable';\nimport { ObservedValueOf, ObservableInput } from '../types';\nimport { innerFrom } from './innerFrom';\n\n/**\n * Creates an Observable that, on subscribe, calls an Observable factory to\n * make an Observable for each new Observer.\n *\n * <span class=\"informal\">Creates the Observable lazily, that is, only when it\n * is subscribed.\n * </span>\n *\n * ![](defer.png)\n *\n * `defer` allows you to create an Observable only when the Observer\n * subscribes. It waits until an Observer subscribes to it, calls the given\n * factory function to get an Observable -- where a factory function typically\n * generates a new Observable -- and subscribes the Observer to this Observable.\n * In case the factory function returns a falsy value, then EMPTY is used as\n * Observable instead. Last but not least, an exception during the factory\n * function call is transferred to the Observer by calling `error`.\n *\n * ## Example\n *\n * Subscribe to either an Observable of clicks or an Observable of interval, at random\n *\n * ```ts\n * import { defer, fromEvent, interval } from 'rxjs';\n *\n * const clicksOrInterval = defer(() => {\n * return Math.random() > 0.5\n * ? fromEvent(document, 'click')\n * : interval(1000);\n * });\n * clicksOrInterval.subscribe(x => console.log(x));\n *\n * // Results in the following behavior:\n * // If the result of Math.random() is greater than 0.5 it will listen\n * // for clicks anywhere on the \"document\"; when document is clicked it\n * // will log a MouseEvent object to the console. If the result is less\n * // than 0.5 it will emit ascending numbers, one every second(1000ms).\n * ```\n *\n * @see {@link Observable}\n *\n * @param {function(): ObservableInput} observableFactory The Observable\n * factory function to invoke for each Observer that subscribes to the output\n * Observable. May also return a Promise, which will be converted on the fly\n * to an Observable.\n * @return {Observable} An Observable whose Observers' subscriptions trigger\n * an invocation of the given Observable factory function.\n */\nexport function defer<R extends ObservableInput<any>>(observableFactory: () => R): Observable<ObservedValueOf<R>> {\n return new Observable<ObservedValueOf<R>>((subscriber) => {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { Observable } from '../Observable';\nimport { mergeMap } from '../operators/mergeMap';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\n\n// These constants are used to create handler registry functions using array mapping below.\nconst nodeEventEmitterMethods = ['addListener', 'removeListener'] as const;\nconst eventTargetMethods = ['addEventListener', 'removeEventListener'] as const;\nconst jqueryMethods = ['on', 'off'] as const;\n\nexport interface NodeStyleEventEmitter {\n addListener(eventName: string | symbol, handler: NodeEventHandler): this;\n removeListener(eventName: string | symbol, handler: NodeEventHandler): this;\n}\n\nexport type NodeEventHandler = (...args: any[]) => void;\n\n// For APIs that implement `addListener` and `removeListener` methods that may\n// not use the same arguments or return EventEmitter values\n// such as React Native\nexport interface NodeCompatibleEventEmitter {\n addListener(eventName: string, handler: NodeEventHandler): void | {};\n removeListener(eventName: string, handler: NodeEventHandler): void | {};\n}\n\n// Use handler types like those in @types/jquery. See:\n// https://github.com/DefinitelyTyped/DefinitelyTyped/blob/847731ba1d7fa6db6b911c0e43aa0afe596e7723/types/jquery/misc.d.ts#L6395\nexport interface JQueryStyleEventEmitter<TContext, T> {\n on(eventName: string, handler: (this: TContext, t: T, ...args: any[]) => any): void;\n off(eventName: string, handler: (this: TContext, t: T, ...args: any[]) => any): void;\n}\n\nexport interface EventListenerObject<E> {\n handleEvent(evt: E): void;\n}\n\nexport interface HasEventTargetAddRemove<E> {\n addEventListener(\n type: string,\n listener: ((evt: E) => void) | EventListenerObject<E> | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: ((evt: E) => void) | EventListenerObject<E> | null,\n options?: EventListenerOptions | boolean\n ): void;\n}\n\nexport interface EventListenerOptions {\n capture?: boolean;\n passive?: boolean;\n once?: boolean;\n}\n\nexport interface AddEventListenerOptions extends EventListenerOptions {\n once?: boolean;\n passive?: boolean;\n}\n\nexport function fromEvent<T>(target: HasEventTargetAddRemove<T> | ArrayLike<HasEventTargetAddRemove<T>>, eventName: string): Observable<T>;\nexport function fromEvent<T, R>(\n target: HasEventTargetAddRemove<T> | ArrayLike<HasEventTargetAddRemove<T>>,\n eventName: string,\n resultSelector: (event: T) => R\n): Observable<R>;\nexport function fromEvent<T>(\n target: HasEventTargetAddRemove<T> | ArrayLike<HasEventTargetAddRemove<T>>,\n eventName: string,\n options: EventListenerOptions\n): Observable<T>;\nexport function fromEvent<T, R>(\n target: HasEventTargetAddRemove<T> | ArrayLike<HasEventTargetAddRemove<T>>,\n eventName: string,\n options: EventListenerOptions,\n resultSelector: (event: T) => R\n): Observable<R>;\n\nexport function fromEvent(target: NodeStyleEventEmitter | ArrayLike<NodeStyleEventEmitter>, eventName: string): Observable<unknown>;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function fromEvent<T>(target: NodeStyleEventEmitter | ArrayLike<NodeStyleEventEmitter>, eventName: string): Observable<T>;\nexport function fromEvent<R>(\n target: NodeStyleEventEmitter | ArrayLike<NodeStyleEventEmitter>,\n eventName: string,\n resultSelector: (...args: any[]) => R\n): Observable<R>;\n\nexport function fromEvent(\n target: NodeCompatibleEventEmitter | ArrayLike<NodeCompatibleEventEmitter>,\n eventName: string\n): Observable<unknown>;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function fromEvent<T>(target: NodeCompatibleEventEmitter | ArrayLike<NodeCompatibleEventEmitter>, eventName: string): Observable<T>;\nexport function fromEvent<R>(\n target: NodeCompatibleEventEmitter | ArrayLike<NodeCompatibleEventEmitter>,\n eventName: string,\n resultSelector: (...args: any[]) => R\n): Observable<R>;\n\nexport function fromEvent<T>(\n target: JQueryStyleEventEmitter<any, T> | ArrayLike<JQueryStyleEventEmitter<any, T>>,\n eventName: string\n): Observable<T>;\nexport function fromEvent<T, R>(\n target: JQueryStyleEventEmitter<any, T> | ArrayLike<JQueryStyleEventEmitter<any, T>>,\n eventName: string,\n resultSelector: (value: T, ...args: any[]) => R\n): Observable<R>;\n\n/**\n * Creates an Observable that emits events of a specific type coming from the\n * given event target.\n *\n * <span class=\"informal\">Creates an Observable from DOM events, or Node.js\n * EventEmitter events or others.</span>\n *\n * ![](fromEvent.png)\n *\n * `fromEvent` accepts as a first argument event target, which is an object with methods\n * for registering event handler functions. As a second argument it takes string that indicates\n * type of event we want to listen for. `fromEvent` supports selected types of event targets,\n * which are described in detail below. If your event target does not match any of the ones listed,\n * you should use {@link fromEventPattern}, which can be used on arbitrary APIs.\n * When it comes to APIs supported by `fromEvent`, their methods for adding and removing event\n * handler functions have different names, but they all accept a string describing event type\n * and function itself, which will be called whenever said event happens.\n *\n * Every time resulting Observable is subscribed, event handler function will be registered\n * to event target on given event type. When that event fires, value\n * passed as a first argument to registered function will be emitted by output Observable.\n * When Observable is unsubscribed, function will be unregistered from event target.\n *\n * Note that if event target calls registered function with more than one argument, second\n * and following arguments will not appear in resulting stream. In order to get access to them,\n * you can pass to `fromEvent` optional project function, which will be called with all arguments\n * passed to event handler. Output Observable will then emit value returned by project function,\n * instead of the usual value.\n *\n * Remember that event targets listed below are checked via duck typing. It means that\n * no matter what kind of object you have and no matter what environment you work in,\n * you can safely use `fromEvent` on that object if it exposes described methods (provided\n * of course they behave as was described above). So for example if Node.js library exposes\n * event target which has the same method names as DOM EventTarget, `fromEvent` is still\n * a good choice.\n *\n * If the API you use is more callback then event handler oriented (subscribed\n * callback function fires only once and thus there is no need to manually\n * unregister it), you should use {@link bindCallback} or {@link bindNodeCallback}\n * instead.\n *\n * `fromEvent` supports following types of event targets:\n *\n * **DOM EventTarget**\n *\n * This is an object with `addEventListener` and `removeEventListener` methods.\n *\n * In the browser, `addEventListener` accepts - apart from event type string and event\n * handler function arguments - optional third parameter, which is either an object or boolean,\n * both used for additional configuration how and when passed function will be called. When\n * `fromEvent` is used with event target of that type, you can provide this values\n * as third parameter as well.\n *\n * **Node.js EventEmitter**\n *\n * An object with `addListener` and `removeListener` methods.\n *\n * **JQuery-style event target**\n *\n * An object with `on` and `off` methods\n *\n * **DOM NodeList**\n *\n * List of DOM Nodes, returned for example by `document.querySelectorAll` or `Node.childNodes`.\n *\n * Although this collection is not event target in itself, `fromEvent` will iterate over all Nodes\n * it contains and install event handler function in every of them. When returned Observable\n * is unsubscribed, function will be removed from all Nodes.\n *\n * **DOM HtmlCollection**\n *\n * Just as in case of NodeList it is a collection of DOM nodes. Here as well event handler function is\n * installed and removed in each of elements.\n *\n *\n * ## Examples\n *\n * Emit clicks happening on the DOM document\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * clicks.subscribe(x => console.log(x));\n *\n * // Results in:\n * // MouseEvent object logged to console every time a click\n * // occurs on the document.\n * ```\n *\n * Use `addEventListener` with capture option\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n *\n * const div = document.createElement('div');\n * div.style.cssText = 'width: 200px; height: 200px; background: #09c;';\n * document.body.appendChild(div);\n *\n * // note optional configuration parameter which will be passed to addEventListener\n * const clicksInDocument = fromEvent(document, 'click', { capture: true });\n * const clicksInDiv = fromEvent(div, 'click');\n *\n * clicksInDocument.subscribe(() => console.log('document'));\n * clicksInDiv.subscribe(() => console.log('div'));\n *\n * // By default events bubble UP in DOM tree, so normally\n * // when we would click on div in document\n * // \"div\" would be logged first and then \"document\".\n * // Since we specified optional `capture` option, document\n * // will catch event when it goes DOWN DOM tree, so console\n * // will log \"document\" and then \"div\".\n * ```\n *\n * @see {@link bindCallback}\n * @see {@link bindNodeCallback}\n * @see {@link fromEventPattern}\n *\n * @param {FromEventTarget<T>} target The DOM EventTarget, Node.js\n * EventEmitter, JQuery-like event target, NodeList or HTMLCollection to attach the event handler to.\n * @param {string} eventName The event name of interest, being emitted by the\n * `target`.\n * @param {EventListenerOptions} [options] Options to pass through to addEventListener\n * @return {Observable<T>}\n */\nexport function fromEvent<T>(\n target: any,\n eventName: string,\n options?: EventListenerOptions | ((...args: any[]) => T),\n resultSelector?: (...args: any[]) => T\n): Observable<T> {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent<T>(target, eventName, options as EventListenerOptions).pipe(mapOneOrManyArgs(resultSelector));\n }\n\n // Figure out our add and remove methods. In order to do this,\n // we are going to analyze the target in a preferred order, if\n // the target matches a given signature, we take the two \"add\" and \"remove\"\n // method names and apply them to a map to create opposite versions of the\n // same function. This is because they all operate in duplicate pairs,\n // `addListener(name, handler)`, `removeListener(name, handler)`, for example.\n // The call only differs by method name, as to whether or not you're adding or removing.\n const [add, remove] =\n // If it is an EventTarget, we need to use a slightly different method than the other two patterns.\n isEventTarget(target)\n ? eventTargetMethods.map((methodName) => (handler: any) => target[methodName](eventName, handler, options as EventListenerOptions))\n : // In all other cases, the call pattern is identical with the exception of the method names.\n isNodeStyleEventEmitter(target)\n ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName))\n : isJQueryStyleEventEmitter(target)\n ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName))\n : [];\n\n // If add is falsy, it's because we didn't match a pattern above.\n // Check to see if it is an ArrayLike, because if it is, we want to\n // try to apply fromEvent to all of it's items. We do this check last,\n // because there are may be some types that are both ArrayLike *and* implement\n // event registry points, and we'd rather delegate to that when possible.\n if (!add) {\n if (isArrayLike(target)) {\n return mergeMap((subTarget: any) => fromEvent(subTarget, eventName, options as EventListenerOptions))(\n innerFrom(target)\n ) as Observable<T>;\n }\n }\n\n // If add is falsy and we made it here, it's because we didn't\n // match any valid target objects above.\n if (!add) {\n throw new TypeError('Invalid event target');\n }\n\n return new Observable<T>((subscriber) => {\n // The handler we are going to register. Forwards the event object, by itself, or\n // an array of arguments to the event handler, if there is more than one argument,\n // to the consumer.\n const handler = (...args: any[]) => subscriber.next(1 < args.length ? args : args[0]);\n // Do the work of adding the handler to the target.\n add(handler);\n // When we finalize, we want to remove the handler and free up memory.\n return () => remove!(handler);\n });\n}\n\n/**\n * Used to create `add` and `remove` functions to register and unregister event handlers\n * from a target in the most common handler pattern, where there are only two arguments.\n * (e.g. `on(name, fn)`, `off(name, fn)`, `addListener(name, fn)`, or `removeListener(name, fn)`)\n * @param target The target we're calling methods on\n * @param eventName The event name for the event we're creating register or unregister functions for\n */\nfunction toCommonHandlerRegistry(target: any, eventName: string) {\n return (methodName: string) => (handler: any) => target[methodName](eventName, handler);\n}\n\n/**\n * Checks to see if the target implements the required node-style EventEmitter methods\n * for adding and removing event handlers.\n * @param target the object to check\n */\nfunction isNodeStyleEventEmitter(target: any): target is NodeStyleEventEmitter {\n return isFunction(target.addListener) && isFunction(target.removeListener);\n}\n\n/**\n * Checks to see if the target implements the required jQuery-style EventEmitter methods\n * for adding and removing event handlers.\n * @param target the object to check\n */\nfunction isJQueryStyleEventEmitter(target: any): target is JQueryStyleEventEmitter<any, any> {\n return isFunction(target.on) && isFunction(target.off);\n}\n\n/**\n * Checks to see if the target implements the required EventTarget methods\n * for adding and removing event handlers.\n * @param target the object to check\n */\nfunction isEventTarget(target: any): target is HasEventTargetAddRemove<any> {\n return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\n\n/**\n * Creates an observable that will wait for a specified time period, or exact date, before\n * emitting the number 0.\n *\n * <span class=\"informal\">Used to emit a notification after a delay.</span>\n *\n * This observable is useful for creating delays in code, or racing against other values\n * for ad-hoc timeouts.\n *\n * The `delay` is specified by default in milliseconds, however providing a custom scheduler could\n * create a different behavior.\n *\n * ## Examples\n *\n * Wait 3 seconds and start another observable\n *\n * You might want to use `timer` to delay subscription to an\n * observable by a set amount of time. Here we use a timer with\n * {@link concatMapTo} or {@link concatMap} in order to wait\n * a few seconds and start a subscription to a source.\n *\n * ```ts\n * import { of, timer, concatMap } from 'rxjs';\n *\n * // This could be any observable\n * const source = of(1, 2, 3);\n *\n * timer(3000)\n * .pipe(concatMap(() => source))\n * .subscribe(console.log);\n * ```\n *\n * Take all values until the start of the next minute\n *\n * Using a `Date` as the trigger for the first emission, you can\n * do things like wait until midnight to fire an event, or in this case,\n * wait until a new minute starts (chosen so the example wouldn't take\n * too long to run) in order to stop watching a stream. Leveraging\n * {@link takeUntil}.\n *\n * ```ts\n * import { interval, takeUntil, timer } from 'rxjs';\n *\n * // Build a Date object that marks the\n * // next minute.\n * const currentDate = new Date();\n * const startOfNextMinute = new Date(\n * currentDate.getFullYear(),\n * currentDate.getMonth(),\n * currentDate.getDate(),\n * currentDate.getHours(),\n * currentDate.getMinutes() + 1\n * );\n *\n * // This could be any observable stream\n * const source = interval(1000);\n *\n * const result = source.pipe(\n * takeUntil(timer(startOfNextMinute))\n * );\n *\n * result.subscribe(console.log);\n * ```\n *\n * ### Known Limitations\n *\n * - The {@link asyncScheduler} uses `setTimeout` which has limitations for how far in the future it can be scheduled.\n *\n * - If a `scheduler` is provided that returns a timestamp other than an epoch from `now()`, and\n * a `Date` object is passed to the `dueTime` argument, the calculation for when the first emission\n * should occur will be incorrect. In this case, it would be best to do your own calculations\n * ahead of time, and pass a `number` in as the `dueTime`.\n *\n * @param due If a `number`, the amount of time in milliseconds to wait before emitting.\n * If a `Date`, the exact time at which to emit.\n * @param scheduler The scheduler to use to schedule the delay. Defaults to {@link asyncScheduler}.\n */\nexport function timer(due: number | Date, scheduler?: SchedulerLike): Observable<0>;\n\n/**\n * Creates an observable that starts an interval after a specified delay, emitting incrementing numbers -- starting at `0` --\n * on each interval after words.\n *\n * The `delay` and `intervalDuration` are specified by default in milliseconds, however providing a custom scheduler could\n * create a different behavior.\n *\n * ## Example\n *\n * ### Start an interval that starts right away\n *\n * Since {@link interval} waits for the passed delay before starting,\n * sometimes that's not ideal. You may want to start an interval immediately.\n * `timer` works well for this. Here we have both side-by-side so you can\n * see them in comparison.\n *\n * Note that this observable will never complete.\n *\n * ```ts\n * import { timer, interval } from 'rxjs';\n *\n * timer(0, 1000).subscribe(n => console.log('timer', n));\n * interval(1000).subscribe(n => console.log('interval', n));\n * ```\n *\n * ### Known Limitations\n *\n * - The {@link asyncScheduler} uses `setTimeout` which has limitations for how far in the future it can be scheduled.\n *\n * - If a `scheduler` is provided that returns a timestamp other than an epoch from `now()`, and\n * a `Date` object is passed to the `dueTime` argument, the calculation for when the first emission\n * should occur will be incorrect. In this case, it would be best to do your own calculations\n * ahead of time, and pass a `number` in as the `startDue`.\n * @param startDue If a `number`, is the time to wait before starting the interval.\n * If a `Date`, is the exact time at which to start the interval.\n * @param intervalDuration The delay between each value emitted in the interval. Passing a\n * negative number here will result in immediate completion after the first value is emitted, as though\n * no `intervalDuration` was passed at all.\n * @param scheduler The scheduler to use to schedule the delay. Defaults to {@link asyncScheduler}.\n */\nexport function timer(startDue: number | Date, intervalDuration: number, scheduler?: SchedulerLike): Observable<number>;\n\n/**\n * @deprecated The signature allowing `undefined` to be passed for `intervalDuration` will be removed in v8. Use the `timer(dueTime, scheduler?)` signature instead.\n */\nexport function timer(dueTime: number | Date, unused: undefined, scheduler?: SchedulerLike): Observable<0>;\n\nexport function timer(\n dueTime: number | Date = 0,\n intervalOrScheduler?: number | SchedulerLike,\n scheduler: SchedulerLike = asyncScheduler\n): Observable<number> {\n // Since negative intervalDuration is treated as though no\n // interval was specified at all, we start with a negative number.\n let intervalDuration = -1;\n\n if (intervalOrScheduler != null) {\n // If we have a second argument, and it's a scheduler,\n // override the scheduler we had defaulted. Otherwise,\n // it must be an interval.\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n } else {\n // Note that this *could* be negative, in which case\n // it's like not passing an intervalDuration at all.\n intervalDuration = intervalOrScheduler;\n }\n }\n\n return new Observable((subscriber) => {\n // If a valid date is passed, calculate how long to wait before\n // executing the first value... otherwise, if it's a number just schedule\n // that many milliseconds (or scheduler-specified unit size) in the future.\n let due = isValidDate(dueTime) ? +dueTime - scheduler!.now() : dueTime;\n\n if (due < 0) {\n // Ensure we don't schedule in the future.\n due = 0;\n }\n\n // The incrementing value we emit.\n let n = 0;\n\n // Start the timer.\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n // Emit the next value and increment.\n subscriber.next(n++);\n\n if (0 <= intervalDuration) {\n // If we have a interval after the initial timer,\n // reschedule with the period.\n this.schedule(undefined, intervalDuration);\n } else {\n // We didn't have an interval. So just complete.\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n", "import { Observable } from '../Observable';\nimport { ObservableInput, ObservableInputTuple, SchedulerLike } from '../types';\nimport { mergeAll } from '../operators/mergeAll';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from './from';\n\nexport function merge<A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): Observable<A[number]>;\nexport function merge<A extends readonly unknown[]>(...sourcesAndConcurrency: [...ObservableInputTuple<A>, number?]): Observable<A[number]>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `mergeAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function merge<A extends readonly unknown[]>(\n ...sourcesAndScheduler: [...ObservableInputTuple<A>, SchedulerLike?]\n): Observable<A[number]>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `mergeAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function merge<A extends readonly unknown[]>(\n ...sourcesAndConcurrencyAndScheduler: [...ObservableInputTuple<A>, number?, SchedulerLike?]\n): Observable<A[number]>;\n\n/**\n * Creates an output Observable which concurrently emits all values from every\n * given input Observable.\n *\n * <span class=\"informal\">Flattens multiple Observables together by blending\n * their values into one Observable.</span>\n *\n * ![](merge.png)\n *\n * `merge` subscribes to each given input Observable (as arguments), and simply\n * forwards (without doing any transformation) all the values from all the input\n * Observables to the output Observable. The output Observable only completes\n * once all input Observables have completed. Any error delivered by an input\n * Observable will be immediately emitted on the output Observable.\n *\n * ## Examples\n *\n * Merge together two Observables: 1s interval and clicks\n *\n * ```ts\n * import { merge, fromEvent, interval } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const timer = interval(1000);\n * const clicksOrTimer = merge(clicks, timer);\n * clicksOrTimer.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // timer will emit ascending values, one every second(1000ms) to console\n * // clicks logs MouseEvents to console every time the \"document\" is clicked\n * // Since the two streams are merged you see these happening\n * // as they occur.\n * ```\n *\n * Merge together 3 Observables, but run only 2 concurrently\n *\n * ```ts\n * import { interval, take, merge } from 'rxjs';\n *\n * const timer1 = interval(1000).pipe(take(10));\n * const timer2 = interval(2000).pipe(take(6));\n * const timer3 = interval(500).pipe(take(10));\n *\n * const concurrent = 2; // the argument\n * const merged = merge(timer1, timer2, timer3, concurrent);\n * merged.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // - First timer1 and timer2 will run concurrently\n * // - timer1 will emit a value every 1000ms for 10 iterations\n * // - timer2 will emit a value every 2000ms for 6 iterations\n * // - after timer1 hits its max iteration, timer2 will\n * // continue, and timer3 will start to run concurrently with timer2\n * // - when timer2 hits its max iteration it terminates, and\n * // timer3 will continue to emit a value every 500ms until it is complete\n * ```\n *\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n *\n * @param {...ObservableInput} observables Input Observables to merge together.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {SchedulerLike} [scheduler=null] The {@link SchedulerLike} to use for managing\n * concurrency of input Observables.\n * @return {Observable} an Observable that emits items that are the result of\n * every input Observable.\n */\nexport function merge(...args: (ObservableInput<unknown> | number | SchedulerLike)[]): Observable<unknown> {\n const scheduler = popScheduler(args);\n const concurrent = popNumber(args, Infinity);\n const sources = args as ObservableInput<unknown>[];\n return !sources.length\n ? // No source provided\n EMPTY\n : sources.length === 1\n ? // One source? Just return it.\n innerFrom(sources[0])\n : // Merge all sources\n mergeAll(concurrent)(from(sources, scheduler));\n}\n", "import { Observable } from '../Observable';\nimport { noop } from '../util/noop';\n\n/**\n * An Observable that emits no items to the Observer and never completes.\n *\n * ![](never.png)\n *\n * A simple Observable that emits neither values nor errors nor the completion\n * notification. It can be used for testing purposes or for composing with other\n * Observables. Please note that by never emitting a complete notification, this\n * Observable keeps the subscription from being disposed automatically.\n * Subscriptions need to be manually disposed.\n *\n * ## Example\n *\n * Emit the number 7, then never emit anything else (not even complete)\n *\n * ```ts\n * import { NEVER, startWith } from 'rxjs';\n *\n * const info = () => console.log('Will not be called');\n *\n * const result = NEVER.pipe(startWith(7));\n * result.subscribe({\n * next: x => console.log(x),\n * error: info,\n * complete: info\n * });\n * ```\n *\n * @see {@link Observable}\n * @see {@link EMPTY}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const NEVER = new Observable<never>(noop);\n\n/**\n * @deprecated Replaced with the {@link NEVER} constant. Will be removed in v8.\n */\nexport function never() {\n return NEVER;\n}\n", "const { isArray } = Array;\n\n/**\n * Used in operators and functions that accept either a list of arguments, or an array of arguments\n * as a single argument.\n */\nexport function argsOrArgArray<T>(args: (T | T[])[]): T[] {\n return args.length === 1 && isArray(args[0]) ? args[0] : (args as T[]);\n}\n", "import { OperatorFunction, MonoTypeOperatorFunction, TruthyTypesOf } from '../types';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function filter<T, S extends T, A>(predicate: (this: A, value: T, index: number) => value is S, thisArg: A): OperatorFunction<T, S>;\nexport function filter<T, S extends T>(predicate: (value: T, index: number) => value is S): OperatorFunction<T, S>;\nexport function filter<T>(predicate: BooleanConstructor): OperatorFunction<T, TruthyTypesOf<T>>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function filter<T, A>(predicate: (this: A, value: T, index: number) => boolean, thisArg: A): MonoTypeOperatorFunction<T>;\nexport function filter<T>(predicate: (value: T, index: number) => boolean): MonoTypeOperatorFunction<T>;\n\n/**\n * Filter items emitted by the source Observable by only emitting those that\n * satisfy a specified predicate.\n *\n * <span class=\"informal\">Like\n * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),\n * it only emits a value from the source if it passes a criterion function.</span>\n *\n * ![](filter.png)\n *\n * Similar to the well-known `Array.prototype.filter` method, this operator\n * takes values from the source Observable, passes them through a `predicate`\n * function and only emits those values that yielded `true`.\n *\n * ## Example\n *\n * Emit only click events whose target was a DIV element\n *\n * ```ts\n * import { fromEvent, filter } from 'rxjs';\n *\n * const div = document.createElement('div');\n * div.style.cssText = 'width: 200px; height: 200px; background: #09c;';\n * document.body.appendChild(div);\n *\n * const clicks = fromEvent(document, 'click');\n * const clicksOnDivs = clicks.pipe(filter(ev => (<HTMLElement>ev.target).tagName === 'DIV'));\n * clicksOnDivs.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n * @see {@link ignoreElements}\n * @see {@link partition}\n * @see {@link skip}\n *\n * @param predicate A function that\n * evaluates each value emitted by the source Observable. If it returns `true`,\n * the value is emitted, if `false` the value is not passed to the output\n * Observable. The `index` parameter is the number `i` for the i-th source\n * emission that has happened since the subscription, starting from the number\n * `0`.\n * @param thisArg An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return A function that returns an Observable that emits items from the\n * source Observable that satisfy the specified `predicate`.\n */\nexport function filter<T>(predicate: (value: T, index: number) => boolean, thisArg?: any): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n // An index passed to our predicate function on each call.\n let index = 0;\n\n // Subscribe to the source, all errors and completions are\n // forwarded to the consumer.\n source.subscribe(\n // Call the predicate with the appropriate `this` context,\n // if the predicate returns `true`, then send the value\n // to the consumer.\n createOperatorSubscriber(subscriber, (value) => predicate.call(thisArg, value, index++) && subscriber.next(value))\n );\n });\n}\n", "import { Observable } from '../Observable';\nimport { ObservableInputTuple } from '../types';\nimport { innerFrom } from './innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { EMPTY } from './empty';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { popResultSelector } from '../util/args';\n\nexport function zip<A extends readonly unknown[]>(sources: [...ObservableInputTuple<A>]): Observable<A>;\nexport function zip<A extends readonly unknown[], R>(\n sources: [...ObservableInputTuple<A>],\n resultSelector: (...values: A) => R\n): Observable<R>;\nexport function zip<A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): Observable<A>;\nexport function zip<A extends readonly unknown[], R>(\n ...sourcesAndResultSelector: [...ObservableInputTuple<A>, (...values: A) => R]\n): Observable<R>;\n\n/**\n * Combines multiple Observables to create an Observable whose values are calculated from the values, in order, of each\n * of its input Observables.\n *\n * If the last parameter is a function, this function is used to compute the created value from the input values.\n * Otherwise, an array of the input values is returned.\n *\n * ## Example\n *\n * Combine age and name from different sources\n *\n * ```ts\n * import { of, zip, map } from 'rxjs';\n *\n * const age$ = of(27, 25, 29);\n * const name$ = of('Foo', 'Bar', 'Beer');\n * const isDev$ = of(true, true, false);\n *\n * zip(age$, name$, isDev$).pipe(\n * map(([age, name, isDev]) => ({ age, name, isDev }))\n * )\n * .subscribe(x => console.log(x));\n *\n * // Outputs\n * // { age: 27, name: 'Foo', isDev: true }\n * // { age: 25, name: 'Bar', isDev: true }\n * // { age: 29, name: 'Beer', isDev: false }\n * ```\n *\n * @param sources\n * @return {Observable<R>}\n */\nexport function zip(...args: unknown[]): Observable<unknown> {\n const resultSelector = popResultSelector(args);\n\n const sources = argsOrArgArray(args) as Observable<unknown>[];\n\n return sources.length\n ? new Observable<unknown[]>((subscriber) => {\n // A collection of buffers of values from each source.\n // Keyed by the same index with which the sources were passed in.\n let buffers: unknown[][] = sources.map(() => []);\n\n // An array of flags of whether or not the sources have completed.\n // This is used to check to see if we should complete the result.\n // Keyed by the same index with which the sources were passed in.\n let completed = sources.map(() => false);\n\n // When everything is done, release the arrays above.\n subscriber.add(() => {\n buffers = completed = null!;\n });\n\n // Loop over our sources and subscribe to each one. The index `i` is\n // especially important here, because we use it in closures below to\n // access the related buffers and completion properties\n for (let sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) {\n innerFrom(sources[sourceIndex]).subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n buffers[sourceIndex].push(value);\n // if every buffer has at least one value in it, then we\n // can shift out the oldest value from each buffer and emit\n // them as an array.\n if (buffers.every((buffer) => buffer.length)) {\n const result: any = buffers.map((buffer) => buffer.shift()!);\n // Emit the array. If theres' a result selector, use that.\n subscriber.next(resultSelector ? resultSelector(...result) : result);\n // If any one of the sources is both complete and has an empty buffer\n // then we complete the result. This is because we cannot possibly have\n // any more values to zip together.\n if (buffers.some((buffer, i) => !buffer.length && completed[i])) {\n subscriber.complete();\n }\n }\n },\n () => {\n // This source completed. Mark it as complete so we can check it later\n // if we have to.\n completed[sourceIndex] = true;\n // But, if this complete source has nothing in its buffer, then we\n // can complete the result, because we can't possibly have any more\n // values from this to zip together with the other values.\n !buffers[sourceIndex].length && subscriber.complete();\n }\n )\n );\n }\n\n // When everything is done, release the arrays above.\n return () => {\n buffers = completed = null!;\n };\n })\n : EMPTY;\n}\n", "import { Subscriber } from '../Subscriber';\nimport { MonoTypeOperatorFunction, ObservableInput } from '../types';\n\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Ignores source values for a duration determined by another Observable, then\n * emits the most recent value from the source Observable, then repeats this\n * process.\n *\n * <span class=\"informal\">It's like {@link auditTime}, but the silencing\n * duration is determined by a second Observable.</span>\n *\n * ![](audit.svg)\n *\n * `audit` is similar to `throttle`, but emits the last value from the silenced\n * time window, instead of the first value. `audit` emits the most recent value\n * from the source Observable on the output Observable as soon as its internal\n * timer becomes disabled, and ignores source values while the timer is enabled.\n * Initially, the timer is disabled. As soon as the first source value arrives,\n * the timer is enabled by calling the `durationSelector` function with the\n * source value, which returns the \"duration\" Observable. When the duration\n * Observable emits a value, the timer is disabled, then the most\n * recent source value is emitted on the output Observable, and this process\n * repeats for the next source value.\n *\n * ## Example\n *\n * Emit clicks at a rate of at most one click per second\n *\n * ```ts\n * import { fromEvent, audit, interval } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(audit(ev => interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link auditTime}\n * @see {@link debounce}\n * @see {@link delayWhen}\n * @see {@link sample}\n * @see {@link throttle}\n *\n * @param durationSelector A function\n * that receives a value from the source Observable, for computing the silencing\n * duration, returned as an Observable or a Promise.\n * @return A function that returns an Observable that performs rate-limiting of\n * emissions from the source Observable.\n */\nexport function audit<T>(durationSelector: (value: T) => ObservableInput<any>): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue: T | null = null;\n let durationSubscriber: Subscriber<any> | null = null;\n let isComplete = false;\n\n const endDuration = () => {\n durationSubscriber?.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n hasValue = false;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n isComplete && subscriber.complete();\n };\n\n const cleanupDuration = () => {\n durationSubscriber = null;\n isComplete && subscriber.complete();\n };\n\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n hasValue = true;\n lastValue = value;\n if (!durationSubscriber) {\n innerFrom(durationSelector(value)).subscribe(\n (durationSubscriber = createOperatorSubscriber(subscriber, endDuration, cleanupDuration))\n );\n }\n },\n () => {\n isComplete = true;\n (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete();\n }\n )\n );\n });\n}\n", "import { asyncScheduler } from '../scheduler/async';\nimport { audit } from './audit';\nimport { timer } from '../observable/timer';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\n\n/**\n * Ignores source values for `duration` milliseconds, then emits the most recent\n * value from the source Observable, then repeats this process.\n *\n * <span class=\"informal\">When it sees a source value, it ignores that plus\n * the next ones for `duration` milliseconds, and then it emits the most recent\n * value from the source.</span>\n *\n * ![](auditTime.png)\n *\n * `auditTime` is similar to `throttleTime`, but emits the last value from the\n * silenced time window, instead of the first value. `auditTime` emits the most\n * recent value from the source Observable on the output Observable as soon as\n * its internal timer becomes disabled, and ignores source values while the\n * timer is enabled. Initially, the timer is disabled. As soon as the first\n * source value arrives, the timer is enabled. After `duration` milliseconds (or\n * the time unit determined internally by the optional `scheduler`) has passed,\n * the timer is disabled, then the most recent source value is emitted on the\n * output Observable, and this process repeats for the next source value.\n * Optionally takes a {@link SchedulerLike} for managing timers.\n *\n * ## Example\n *\n * Emit clicks at a rate of at most one click per second\n *\n * ```ts\n * import { fromEvent, auditTime } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(auditTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link debounceTime}\n * @see {@link delay}\n * @see {@link sampleTime}\n * @see {@link throttleTime}\n *\n * @param {number} duration Time to wait before emitting the most recent source\n * value, measured in milliseconds or the time unit determined internally\n * by the optional `scheduler`.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the rate-limiting behavior.\n * @return A function that returns an Observable that performs rate-limiting of\n * emissions from the source Observable.\n */\nexport function auditTime<T>(duration: number, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction<T> {\n return audit(() => timer(duration, scheduler));\n}\n", "import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { arrRemove } from '../util/arrRemove';\n\n/**\n * Buffers the source Observable values until the size hits the maximum\n * `bufferSize` given.\n *\n * <span class=\"informal\">Collects values from the past as an array, and emits\n * that array only when its size reaches `bufferSize`.</span>\n *\n * ![](bufferCount.png)\n *\n * Buffers a number of values from the source Observable by `bufferSize` then\n * emits the buffer and clears it, and starts a new buffer each\n * `startBufferEvery` values. If `startBufferEvery` is not provided or is\n * `null`, then new buffers are started immediately at the start of the source\n * and when each buffer closes and is emitted.\n *\n * ## Examples\n *\n * Emit the last two click events as an array\n *\n * ```ts\n * import { fromEvent, bufferCount } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferCount(2));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * On every click, emit the last two click events as an array\n *\n * ```ts\n * import { fromEvent, bufferCount } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferCount(2, 1));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link buffer}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link pairwise}\n * @see {@link windowCount}\n *\n * @param {number} bufferSize The maximum size of the buffer emitted.\n * @param {number} [startBufferEvery] Interval at which to start a new buffer.\n * For example if `startBufferEvery` is `2`, then a new buffer will be started\n * on every other value from the source. A new buffer is started at the\n * beginning of the source by default.\n * @return A function that returns an Observable of arrays of buffered values.\n */\nexport function bufferCount<T>(bufferSize: number, startBufferEvery: number | null = null): OperatorFunction<T, T[]> {\n // If no `startBufferEvery` value was supplied, then we're\n // opening and closing on the bufferSize itself.\n startBufferEvery = startBufferEvery ?? bufferSize;\n\n return operate((source, subscriber) => {\n let buffers: T[][] = [];\n let count = 0;\n\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n let toEmit: T[][] | null = null;\n\n // Check to see if we need to start a buffer.\n // This will start one at the first value, and then\n // a new one every N after that.\n if (count++ % startBufferEvery! === 0) {\n buffers.push([]);\n }\n\n // Push our value into our active buffers.\n for (const buffer of buffers) {\n buffer.push(value);\n // Check to see if we're over the bufferSize\n // if we are, record it so we can emit it later.\n // If we emitted it now and removed it, it would\n // mutate the `buffers` array while we're looping\n // over it.\n if (bufferSize <= buffer.length) {\n toEmit = toEmit ?? [];\n toEmit.push(buffer);\n }\n }\n\n if (toEmit) {\n // We have found some buffers that are over the\n // `bufferSize`. Emit them, and remove them from our\n // buffers list.\n for (const buffer of toEmit) {\n arrRemove(buffers, buffer);\n subscriber.next(buffer);\n }\n }\n },\n () => {\n // When the source completes, emit all of our\n // active buffers.\n for (const buffer of buffers) {\n subscriber.next(buffer);\n }\n subscriber.complete();\n },\n // Pass all errors through to consumer.\n undefined,\n () => {\n // Clean up our memory when we finalize\n buffers = null!;\n }\n )\n );\n });\n}\n", "import { asyncScheduler } from '../scheduler/async';\nimport { Subscription } from '../Subscription';\nimport { MonoTypeOperatorFunction, SchedulerAction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits a notification from the source Observable only after a particular time span\n * has passed without another source emission.\n *\n * <span class=\"informal\">It's like {@link delay}, but passes only the most\n * recent notification from each burst of emissions.</span>\n *\n * ![](debounceTime.png)\n *\n * `debounceTime` delays notifications emitted by the source Observable, but drops\n * previous pending delayed emissions if a new notification arrives on the source\n * Observable. This operator keeps track of the most recent notification from the\n * source Observable, and emits that only when `dueTime` has passed\n * without any other notification appearing on the source Observable. If a new value\n * appears before `dueTime` silence occurs, the previous notification will be dropped\n * and will not be emitted and a new `dueTime` is scheduled.\n * If the completing event happens during `dueTime` the last cached notification\n * is emitted before the completion event is forwarded to the output observable.\n * If the error event happens during `dueTime` or after it only the error event is\n * forwarded to the output observable. The cache notification is not emitted in this case.\n *\n * This is a rate-limiting operator, because it is impossible for more than one\n * notification to be emitted in any time window of duration `dueTime`, but it is also\n * a delay-like operator since output emissions do not occur at the same time as\n * they did on the source Observable. Optionally takes a {@link SchedulerLike} for\n * managing timers.\n *\n * ## Example\n *\n * Emit the most recent click after a burst of clicks\n *\n * ```ts\n * import { fromEvent, debounceTime } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(debounceTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link auditTime}\n * @see {@link debounce}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link throttle}\n * @see {@link throttleTime}\n *\n * @param {number} dueTime The timeout duration in milliseconds (or the time\n * unit determined internally by the optional `scheduler`) for the window of\n * time required to wait for emission silence before emitting the most recent\n * source value.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the timeout for each value.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by the specified `dueTime`, and may drop some values\n * if they occur too frequently.\n */\nexport function debounceTime<T>(dueTime: number, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n let activeTask: Subscription | null = null;\n let lastValue: T | null = null;\n let lastTime: number | null = null;\n\n const emit = () => {\n if (activeTask) {\n // We have a value! Free up memory first, then emit the value.\n activeTask.unsubscribe();\n activeTask = null;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n };\n function emitWhenIdle(this: SchedulerAction<unknown>) {\n // This is called `dueTime` after the first value\n // but we might have received new values during this window!\n\n const targetTime = lastTime! + dueTime;\n const now = scheduler.now();\n if (now < targetTime) {\n // On that case, re-schedule to the new target\n activeTask = this.schedule(undefined, targetTime - now);\n subscriber.add(activeTask);\n return;\n }\n\n emit();\n }\n\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value: T) => {\n lastValue = value;\n lastTime = scheduler.now();\n\n // Only set up a task if it's not already up\n if (!activeTask) {\n activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n subscriber.add(activeTask);\n }\n },\n () => {\n // Source completed.\n // Emit any pending debounced values then complete\n emit();\n subscriber.complete();\n },\n // Pass all errors through to consumer.\n undefined,\n () => {\n // Finalization.\n lastValue = activeTask = null;\n }\n )\n );\n });\n}\n", "import { MonoTypeOperatorFunction } from '../types';\nimport { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits only the first `count` values emitted by the source Observable.\n *\n * <span class=\"informal\">Takes the first `count` values from the source, then\n * completes.</span>\n *\n * ![](take.png)\n *\n * `take` returns an Observable that emits only the first `count` values emitted\n * by the source Observable. If the source emits fewer than `count` values then\n * all of its values are emitted. After that, it completes, regardless if the\n * source completes.\n *\n * ## Example\n *\n * Take the first 5 seconds of an infinite 1-second interval Observable\n *\n * ```ts\n * import { interval, take } from 'rxjs';\n *\n * const intervalCount = interval(1000);\n * const takeFive = intervalCount.pipe(take(5));\n * takeFive.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * // 3\n * // 4\n * ```\n *\n * @see {@link takeLast}\n * @see {@link takeUntil}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param count The maximum number of `next` values to emit.\n * @return A function that returns an Observable that emits only the first\n * `count` values emitted by the source Observable, or all of the values from\n * the source if the source emits fewer than `count` values.\n */\nexport function take<T>(count: number): MonoTypeOperatorFunction<T> {\n return count <= 0\n ? // If we are taking no values, that's empty.\n () => EMPTY\n : operate((source, subscriber) => {\n let seen = 0;\n source.subscribe(\n createOperatorSubscriber(subscriber, (value) => {\n // Increment the number of values we have seen,\n // then check it against the allowed count to see\n // if we are still letting values through.\n if (++seen <= count) {\n subscriber.next(value);\n // If we have met or passed our allowed count,\n // we need to complete. We have to do <= here,\n // because re-entrant code will increment `seen` twice.\n if (count <= seen) {\n subscriber.complete();\n }\n }\n })\n );\n });\n}\n", "import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\n\n/**\n * Ignores all items emitted by the source Observable and only passes calls of `complete` or `error`.\n *\n * ![](ignoreElements.png)\n *\n * The `ignoreElements` operator suppresses all items emitted by the source Observable,\n * but allows its termination notification (either `error` or `complete`) to pass through unchanged.\n *\n * If you do not care about the items being emitted by an Observable, but you do want to be notified\n * when it completes or when it terminates with an error, you can apply the `ignoreElements` operator\n * to the Observable, which will ensure that it will never call its observers\u2019 `next` handlers.\n *\n * ## Example\n *\n * Ignore all `next` emissions from the source\n *\n * ```ts\n * import { of, ignoreElements } from 'rxjs';\n *\n * of('you', 'talking', 'to', 'me')\n * .pipe(ignoreElements())\n * .subscribe({\n * next: word => console.log(word),\n * error: err => console.log('error:', err),\n * complete: () => console.log('the end'),\n * });\n *\n * // result:\n * // 'the end'\n * ```\n *\n * @return A function that returns an empty Observable that only calls\n * `complete` or `error`, based on which one is called by the source\n * Observable.\n */\nexport function ignoreElements(): OperatorFunction<unknown, never> {\n return operate((source, subscriber) => {\n source.subscribe(createOperatorSubscriber(subscriber, noop));\n });\n}\n", "import { OperatorFunction } from '../types';\nimport { map } from './map';\n\n/** @deprecated To be removed in v9. Use {@link map} instead: `map(() => value)`. */\nexport function mapTo<R>(value: R): OperatorFunction<unknown, R>;\n/**\n * @deprecated Do not specify explicit type parameters. Signatures with type parameters\n * that cannot be inferred will be removed in v8. `mapTo` itself will be removed in v9,\n * use {@link map} instead: `map(() => value)`.\n * */\nexport function mapTo<T, R>(value: R): OperatorFunction<T, R>;\n\n/**\n * Emits the given constant value on the output Observable every time the source\n * Observable emits a value.\n *\n * <span class=\"informal\">Like {@link map}, but it maps every source value to\n * the same output value every time.</span>\n *\n * ![](mapTo.png)\n *\n * Takes a constant `value` as argument, and emits that whenever the source\n * Observable emits a value. In other words, ignores the actual source value,\n * and simply uses the emission moment to know when to emit the given `value`.\n *\n * ## Example\n *\n * Map every click to the string `'Hi'`\n *\n * ```ts\n * import { fromEvent, mapTo } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const greetings = clicks.pipe(mapTo('Hi'));\n *\n * greetings.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link map}\n *\n * @param value The value to map each source value to.\n * @return A function that returns an Observable that emits the given `value`\n * every time the source Observable emits.\n * @deprecated To be removed in v9. Use {@link map} instead: `map(() => value)`.\n */\nexport function mapTo<R>(value: R): OperatorFunction<unknown, R> {\n return map(() => value);\n}\n", "import { Observable } from '../Observable';\nimport { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\nimport { innerFrom } from '../observable/innerFrom';\n\n/** @deprecated The `subscriptionDelay` parameter will be removed in v8. */\nexport function delayWhen<T>(\n delayDurationSelector: (value: T, index: number) => ObservableInput<any>,\n subscriptionDelay: Observable<any>\n): MonoTypeOperatorFunction<T>;\nexport function delayWhen<T>(delayDurationSelector: (value: T, index: number) => ObservableInput<any>): MonoTypeOperatorFunction<T>;\n\n/**\n * Delays the emission of items from the source Observable by a given time span\n * determined by the emissions of another Observable.\n *\n * <span class=\"informal\">It's like {@link delay}, but the time span of the\n * delay duration is determined by a second Observable.</span>\n *\n * ![](delayWhen.png)\n *\n * `delayWhen` operator shifts each emitted value from the source Observable by\n * a time span determined by another Observable. When the source emits a value,\n * the `delayDurationSelector` function is called with the value emitted from\n * the source Observable as the first argument to the `delayDurationSelector`.\n * The `delayDurationSelector` function should return an {@link ObservableInput},\n * that is internally converted to an Observable that is called the \"duration\"\n * Observable.\n *\n * The source value is emitted on the output Observable only when the \"duration\"\n * Observable emits ({@link guide/glossary-and-semantics#next next}s) any value.\n * Upon that, the \"duration\" Observable gets unsubscribed.\n *\n * Before RxJS V7, the {@link guide/glossary-and-semantics#complete completion}\n * of the \"duration\" Observable would have been triggering the emission of the\n * source value to the output Observable, but with RxJS V7, this is not the case\n * anymore.\n *\n * Only next notifications (from the \"duration\" Observable) trigger values from\n * the source Observable to be passed to the output Observable. If the \"duration\"\n * Observable only emits the complete notification (without next), the value\n * emitted by the source Observable will never get to the output Observable - it\n * will be swallowed. If the \"duration\" Observable errors, the error will be\n * propagated to the output Observable.\n *\n * Optionally, `delayWhen` takes a second argument, `subscriptionDelay`, which\n * is an Observable. When `subscriptionDelay` emits its first value or\n * completes, the source Observable is subscribed to and starts behaving like\n * described in the previous paragraph. If `subscriptionDelay` is not provided,\n * `delayWhen` will subscribe to the source Observable as soon as the output\n * Observable is subscribed.\n *\n * ## Example\n *\n * Delay each click by a random amount of time, between 0 and 5 seconds\n *\n * ```ts\n * import { fromEvent, delayWhen, interval } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const delayedClicks = clicks.pipe(\n * delayWhen(() => interval(Math.random() * 5000))\n * );\n * delayedClicks.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link delay}\n * @see {@link throttle}\n * @see {@link throttleTime}\n * @see {@link debounce}\n * @see {@link debounceTime}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link audit}\n * @see {@link auditTime}\n *\n * @param delayDurationSelector A function that returns an `ObservableInput` for\n * each `value` emitted by the source Observable, which is then used to delay the\n * emission of that `value` on the output Observable until the `ObservableInput`\n * returned from this function emits a next value. When called, beside `value`,\n * this function receives a zero-based `index` of the emission order.\n * @param subscriptionDelay An Observable that triggers the subscription to the\n * source Observable once it emits any value.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by an amount of time specified by the Observable\n * returned by `delayDurationSelector`.\n */\nexport function delayWhen<T>(\n delayDurationSelector: (value: T, index: number) => ObservableInput<any>,\n subscriptionDelay?: Observable<any>\n): MonoTypeOperatorFunction<T> {\n if (subscriptionDelay) {\n // DEPRECATED PATH\n return (source: Observable<T>) =>\n concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n }\n\n return mergeMap((value, index) => innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value)));\n}\n", "import { asyncScheduler } from '../scheduler/async';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\n\n/**\n * Delays the emission of items from the source Observable by a given timeout or\n * until a given Date.\n *\n * <span class=\"informal\">Time shifts each item by some specified amount of\n * milliseconds.</span>\n *\n * ![](delay.svg)\n *\n * If the delay argument is a Number, this operator time shifts the source\n * Observable by that amount of time expressed in milliseconds. The relative\n * time intervals between the values are preserved.\n *\n * If the delay argument is a Date, this operator time shifts the start of the\n * Observable execution until the given date occurs.\n *\n * ## Examples\n *\n * Delay each click by one second\n *\n * ```ts\n * import { fromEvent, delay } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const delayedClicks = clicks.pipe(delay(1000)); // each click emitted after 1 second\n * delayedClicks.subscribe(x => console.log(x));\n * ```\n *\n * Delay all clicks until a future date happens\n *\n * ```ts\n * import { fromEvent, delay } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const date = new Date('March 15, 2050 12:00:00'); // in the future\n * const delayedClicks = clicks.pipe(delay(date)); // click emitted only after that date\n * delayedClicks.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link delayWhen}\n * @see {@link throttle}\n * @see {@link throttleTime}\n * @see {@link debounce}\n * @see {@link debounceTime}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link audit}\n * @see {@link auditTime}\n *\n * @param {number|Date} due The delay duration in milliseconds (a `number`) or\n * a `Date` until which the emission of the source items is delayed.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the time-shift for each item.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by the specified timeout or Date.\n */\nexport function delay<T>(due: number | Date, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction<T> {\n const duration = timer(due, scheduler);\n return delayWhen(() => duration);\n}\n", "import { MonoTypeOperatorFunction } from '../types';\nimport { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\nexport function distinctUntilChanged<T>(comparator?: (previous: T, current: T) => boolean): MonoTypeOperatorFunction<T>;\nexport function distinctUntilChanged<T, K>(\n comparator: (previous: K, current: K) => boolean,\n keySelector: (value: T) => K\n): MonoTypeOperatorFunction<T>;\n\n/**\n * Returns a result {@link Observable} that emits all values pushed by the source observable if they\n * are distinct in comparison to the last value the result observable emitted.\n *\n * When provided without parameters or with the first parameter (`{@link distinctUntilChanged#comparator comparator}`),\n * it behaves like this:\n *\n * 1. It will always emit the first value from the source.\n * 2. For all subsequent values pushed by the source, they will be compared to the previously emitted values\n * using the provided `comparator` or an `===` equality check.\n * 3. If the value pushed by the source is determined to be unequal by this check, that value is emitted and\n * becomes the new \"previously emitted value\" internally.\n *\n * When the second parameter (`{@link distinctUntilChanged#keySelector keySelector}`) is provided, the behavior\n * changes:\n *\n * 1. It will always emit the first value from the source.\n * 2. The `keySelector` will be run against all values, including the first value.\n * 3. For all values after the first, the selected key will be compared against the key selected from\n * the previously emitted value using the `comparator`.\n * 4. If the keys are determined to be unequal by this check, the value (not the key), is emitted\n * and the selected key from that value is saved for future comparisons against other keys.\n *\n * ## Examples\n *\n * A very basic example with no `{@link distinctUntilChanged#comparator comparator}`. Note that `1` is emitted more than once,\n * because it's distinct in comparison to the _previously emitted_ value,\n * not in comparison to _all other emitted values_.\n *\n * ```ts\n * import { of, distinctUntilChanged } from 'rxjs';\n *\n * of(1, 1, 1, 2, 2, 2, 1, 1, 3, 3)\n * .pipe(distinctUntilChanged())\n * .subscribe(console.log);\n * // Logs: 1, 2, 1, 3\n * ```\n *\n * With a `{@link distinctUntilChanged#comparator comparator}`, you can do custom comparisons. Let's say\n * you only want to emit a value when all of its components have\n * changed:\n *\n * ```ts\n * import { of, distinctUntilChanged } from 'rxjs';\n *\n * const totallyDifferentBuilds$ = of(\n * { engineVersion: '1.1.0', transmissionVersion: '1.2.0' },\n * { engineVersion: '1.1.0', transmissionVersion: '1.4.0' },\n * { engineVersion: '1.3.0', transmissionVersion: '1.4.0' },\n * { engineVersion: '1.3.0', transmissionVersion: '1.5.0' },\n * { engineVersion: '2.0.0', transmissionVersion: '1.5.0' }\n * ).pipe(\n * distinctUntilChanged((prev, curr) => {\n * return (\n * prev.engineVersion === curr.engineVersion ||\n * prev.transmissionVersion === curr.transmissionVersion\n * );\n * })\n * );\n *\n * totallyDifferentBuilds$.subscribe(console.log);\n *\n * // Logs:\n * // { engineVersion: '1.1.0', transmissionVersion: '1.2.0' }\n * // { engineVersion: '1.3.0', transmissionVersion: '1.4.0' }\n * // { engineVersion: '2.0.0', transmissionVersion: '1.5.0' }\n * ```\n *\n * You can also provide a custom `{@link distinctUntilChanged#comparator comparator}` to check that emitted\n * changes are only in one direction. Let's say you only want to get\n * the next record temperature:\n *\n * ```ts\n * import { of, distinctUntilChanged } from 'rxjs';\n *\n * const temps$ = of(30, 31, 20, 34, 33, 29, 35, 20);\n *\n * const recordHighs$ = temps$.pipe(\n * distinctUntilChanged((prevHigh, temp) => {\n * // If the current temp is less than\n * // or the same as the previous record,\n * // the record hasn't changed.\n * return temp <= prevHigh;\n * })\n * );\n *\n * recordHighs$.subscribe(console.log);\n * // Logs: 30, 31, 34, 35\n * ```\n *\n * Selecting update events only when the `updatedBy` field shows\n * the account changed hands.\n *\n * ```ts\n * import { of, distinctUntilChanged } from 'rxjs';\n *\n * // A stream of updates to a given account\n * const accountUpdates$ = of(\n * { updatedBy: 'blesh', data: [] },\n * { updatedBy: 'blesh', data: [] },\n * { updatedBy: 'ncjamieson', data: [] },\n * { updatedBy: 'ncjamieson', data: [] },\n * { updatedBy: 'blesh', data: [] }\n * );\n *\n * // We only want the events where it changed hands\n * const changedHands$ = accountUpdates$.pipe(\n * distinctUntilChanged(undefined, update => update.updatedBy)\n * );\n *\n * changedHands$.subscribe(console.log);\n * // Logs:\n * // { updatedBy: 'blesh', data: Array[0] }\n * // { updatedBy: 'ncjamieson', data: Array[0] }\n * // { updatedBy: 'blesh', data: Array[0] }\n * ```\n *\n * @see {@link distinct}\n * @see {@link distinctUntilKeyChanged}\n *\n * @param comparator A function used to compare the previous and current keys for\n * equality. Defaults to a `===` check.\n * @param keySelector Used to select a key value to be passed to the `comparator`.\n *\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values.\n */\nexport function distinctUntilChanged<T, K>(\n comparator?: (previous: K, current: K) => boolean,\n keySelector: (value: T) => K = identity as (value: T) => K\n): MonoTypeOperatorFunction<T> {\n // We've been allowing `null` do be passed as the `compare`, so we can't do\n // a default value for the parameter, because that will only work\n // for `undefined`.\n comparator = comparator ?? defaultCompare;\n\n return operate((source, subscriber) => {\n // The previous key, used to compare against keys selected\n // from new arrivals to determine \"distinctiveness\".\n let previousKey: K;\n // Whether or not this is the first value we've gotten.\n let first = true;\n\n source.subscribe(\n createOperatorSubscriber(subscriber, (value) => {\n // We always call the key selector.\n const currentKey = keySelector(value);\n\n // If it's the first value, we always emit it.\n // Otherwise, we compare this key to the previous key, and\n // if the comparer returns false, we emit.\n if (first || !comparator!(previousKey, currentKey)) {\n // Update our state *before* we emit the value\n // as emission can be the source of re-entrant code\n // in functional libraries like this. We only really\n // need to do this if it's the first value, or if the\n // key we're tracking in previous needs to change.\n first = false;\n previousKey = currentKey;\n\n // Emit the value!\n subscriber.next(value);\n }\n })\n );\n });\n}\n\nfunction defaultCompare(a: any, b: any) {\n return a === b;\n}\n", "import { distinctUntilChanged } from './distinctUntilChanged';\nimport { MonoTypeOperatorFunction } from '../types';\n\n/* tslint:disable:max-line-length */\nexport function distinctUntilKeyChanged<T>(key: keyof T): MonoTypeOperatorFunction<T>;\nexport function distinctUntilKeyChanged<T, K extends keyof T>(key: K, compare: (x: T[K], y: T[K]) => boolean): MonoTypeOperatorFunction<T>;\n/* tslint:enable:max-line-length */\n\n/**\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item,\n * using a property accessed by using the key provided to check if the two items are distinct.\n *\n * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.\n *\n * If a comparator function is not provided, an equality check is used by default.\n *\n * ## Examples\n *\n * An example comparing the name of persons\n *\n * ```ts\n * import { of, distinctUntilKeyChanged } from 'rxjs';\n *\n * of(\n * { age: 4, name: 'Foo' },\n * { age: 7, name: 'Bar' },\n * { age: 5, name: 'Foo' },\n * { age: 6, name: 'Foo' }\n * ).pipe(\n * distinctUntilKeyChanged('name')\n * )\n * .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo' }\n * // { age: 7, name: 'Bar' }\n * // { age: 5, name: 'Foo' }\n * ```\n *\n * An example comparing the first letters of the name\n *\n * ```ts\n * import { of, distinctUntilKeyChanged } from 'rxjs';\n *\n * of(\n * { age: 4, name: 'Foo1' },\n * { age: 7, name: 'Bar' },\n * { age: 5, name: 'Foo2' },\n * { age: 6, name: 'Foo3' }\n * ).pipe(\n * distinctUntilKeyChanged('name', (x, y) => x.substring(0, 3) === y.substring(0, 3))\n * )\n * .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo1' }\n * // { age: 7, name: 'Bar' }\n * // { age: 5, name: 'Foo2' }\n * ```\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n *\n * @param {string} key String key for object property lookup on each item.\n * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values based on the key specified.\n */\nexport function distinctUntilKeyChanged<T, K extends keyof T>(key: K, compare?: (x: T[K], y: T[K]) => boolean): MonoTypeOperatorFunction<T> {\n return distinctUntilChanged((x: T, y: T) => compare ? compare(x[key], y[key]) : x[key] === y[key]);\n}\n", "import { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\n\n/**\n * Returns an Observable that mirrors the source Observable, but will call a specified function when\n * the source terminates on complete or error.\n * The specified function will also be called when the subscriber explicitly unsubscribes.\n *\n * ## Examples\n *\n * Execute callback function when the observable completes\n *\n * ```ts\n * import { interval, take, finalize } from 'rxjs';\n *\n * // emit value in sequence every 1 second\n * const source = interval(1000);\n * const example = source.pipe(\n * take(5), //take only the first 5 values\n * finalize(() => console.log('Sequence complete')) // Execute when the observable completes\n * );\n * const subscribe = example.subscribe(val => console.log(val));\n *\n * // results:\n * // 0\n * // 1\n * // 2\n * // 3\n * // 4\n * // 'Sequence complete'\n * ```\n *\n * Execute callback function when the subscriber explicitly unsubscribes\n *\n * ```ts\n * import { interval, finalize, tap, noop, timer } from 'rxjs';\n *\n * const source = interval(100).pipe(\n * finalize(() => console.log('[finalize] Called')),\n * tap({\n * next: () => console.log('[next] Called'),\n * error: () => console.log('[error] Not called'),\n * complete: () => console.log('[tap complete] Not called')\n * })\n * );\n *\n * const sub = source.subscribe({\n * next: x => console.log(x),\n * error: noop,\n * complete: () => console.log('[complete] Not called')\n * });\n *\n * timer(150).subscribe(() => sub.unsubscribe());\n *\n * // results:\n * // '[next] Called'\n * // 0\n * // '[finalize] Called'\n * ```\n *\n * @param {function} callback Function to be called when source terminates.\n * @return A function that returns an Observable that mirrors the source, but\n * will call the specified function on termination.\n */\nexport function finalize<T>(callback: () => void): MonoTypeOperatorFunction<T> {\n return operate((source, subscriber) => {\n // TODO: This try/finally was only added for `useDeprecatedSynchronousErrorHandling`.\n // REMOVE THIS WHEN THAT HOT GARBAGE IS REMOVED IN V8.\n try {\n source.subscribe(subscriber);\n } finally {\n subscriber.add(callback);\n }\n });\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nimport { MonoTypeOperatorFunction, SubjectLike, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\n\nexport interface ShareConfig<T> {\n /**\n * The factory used to create the subject that will connect the source observable to\n * multicast consumers.\n */\n connector?: () => SubjectLike<T>;\n /**\n * If `true`, the resulting observable will reset internal state on error from source and return to a \"cold\" state. This\n * allows the resulting observable to be \"retried\" in the event of an error.\n * If `false`, when an error comes from the source it will push the error into the connecting subject, and the subject\n * will remain the connecting subject, meaning the resulting observable will not go \"cold\" again, and subsequent retries\n * or resubscriptions will resubscribe to that same subject. In all cases, RxJS subjects will emit the same error again, however\n * {@link ReplaySubject} will also push its buffered values before pushing the error.\n * It is also possible to pass a notifier factory returning an `ObservableInput` instead which grants more fine-grained\n * control over how and when the reset should happen. This allows behaviors like conditional or delayed resets.\n */\n resetOnError?: boolean | ((error: any) => ObservableInput<any>);\n /**\n * If `true`, the resulting observable will reset internal state on completion from source and return to a \"cold\" state. This\n * allows the resulting observable to be \"repeated\" after it is done.\n * If `false`, when the source completes, it will push the completion through the connecting subject, and the subject\n * will remain the connecting subject, meaning the resulting observable will not go \"cold\" again, and subsequent repeats\n * or resubscriptions will resubscribe to that same subject.\n * It is also possible to pass a notifier factory returning an `ObservableInput` instead which grants more fine-grained\n * control over how and when the reset should happen. This allows behaviors like conditional or delayed resets.\n */\n resetOnComplete?: boolean | (() => ObservableInput<any>);\n /**\n * If `true`, when the number of subscribers to the resulting observable reaches zero due to those subscribers unsubscribing, the\n * internal state will be reset and the resulting observable will return to a \"cold\" state. This means that the next\n * time the resulting observable is subscribed to, a new subject will be created and the source will be subscribed to\n * again.\n * If `false`, when the number of subscribers to the resulting observable reaches zero due to unsubscription, the subject\n * will remain connected to the source, and new subscriptions to the result will be connected through that same subject.\n * It is also possible to pass a notifier factory returning an `ObservableInput` instead which grants more fine-grained\n * control over how and when the reset should happen. This allows behaviors like conditional or delayed resets.\n */\n resetOnRefCountZero?: boolean | (() => ObservableInput<any>);\n}\n\nexport function share<T>(): MonoTypeOperatorFunction<T>;\n\nexport function share<T>(options: ShareConfig<T>): MonoTypeOperatorFunction<T>;\n\n/**\n * Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one\n * Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will\n * unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.\n * This is an alias for `multicast(() => new Subject()), refCount()`.\n *\n * The subscription to the underlying source Observable can be reset (unsubscribe and resubscribe for new subscribers),\n * if the subscriber count to the shared observable drops to 0, or if the source Observable errors or completes. It is\n * possible to use notifier factories for the resets to allow for behaviors like conditional or delayed resets. Please\n * note that resetting on error or complete of the source Observable does not behave like a transparent retry or restart\n * of the source because the error or complete will be forwarded to all subscribers and their subscription will be\n * closed. Only new subscribers after a reset on error or complete happened will cause a fresh subscription to the\n * source. To achieve transparent retries or restarts pipe the source through appropriate operators before sharing.\n *\n * ![](share.png)\n *\n * ## Example\n *\n * Generate new multicast Observable from the `source` Observable value\n *\n * ```ts\n * import { interval, tap, map, take, share } from 'rxjs';\n *\n * const source = interval(1000).pipe(\n * tap(x => console.log('Processing: ', x)),\n * map(x => x * x),\n * take(6),\n * share()\n * );\n *\n * source.subscribe(x => console.log('subscription 1: ', x));\n * source.subscribe(x => console.log('subscription 2: ', x));\n *\n * // Logs:\n * // Processing: 0\n * // subscription 1: 0\n * // subscription 2: 0\n * // Processing: 1\n * // subscription 1: 1\n * // subscription 2: 1\n * // Processing: 2\n * // subscription 1: 4\n * // subscription 2: 4\n * // Processing: 3\n * // subscription 1: 9\n * // subscription 2: 9\n * // Processing: 4\n * // subscription 1: 16\n * // subscription 2: 16\n * // Processing: 5\n * // subscription 1: 25\n * // subscription 2: 25\n * ```\n *\n * ## Example with notifier factory: Delayed reset\n *\n * ```ts\n * import { interval, take, share, timer } from 'rxjs';\n *\n * const source = interval(1000).pipe(\n * take(3),\n * share({\n * resetOnRefCountZero: () => timer(1000)\n * })\n * );\n *\n * const subscriptionOne = source.subscribe(x => console.log('subscription 1: ', x));\n * setTimeout(() => subscriptionOne.unsubscribe(), 1300);\n *\n * setTimeout(() => source.subscribe(x => console.log('subscription 2: ', x)), 1700);\n *\n * setTimeout(() => source.subscribe(x => console.log('subscription 3: ', x)), 5000);\n *\n * // Logs:\n * // subscription 1: 0\n * // (subscription 1 unsubscribes here)\n * // (subscription 2 subscribes here ~400ms later, source was not reset)\n * // subscription 2: 1\n * // subscription 2: 2\n * // (subscription 2 unsubscribes here)\n * // (subscription 3 subscribes here ~2000ms later, source did reset before)\n * // subscription 3: 0\n * // subscription 3: 1\n * // subscription 3: 2\n * ```\n *\n * @see {@link shareReplay}\n *\n * @return A function that returns an Observable that mirrors the source.\n */\nexport function share<T>(options: ShareConfig<T> = {}): MonoTypeOperatorFunction<T> {\n const { connector = () => new Subject<T>(), resetOnError = true, resetOnComplete = true, resetOnRefCountZero = true } = options;\n // It's necessary to use a wrapper here, as the _operator_ must be\n // referentially transparent. Otherwise, it cannot be used in calls to the\n // static `pipe` function - to create a partial pipeline.\n //\n // The _operator function_ - the function returned by the _operator_ - will\n // not be referentially transparent - as it shares its source - but the\n // _operator function_ is called when the complete pipeline is composed via a\n // call to a source observable's `pipe` method - not when the static `pipe`\n // function is called.\n return (wrapperSource) => {\n let connection: SafeSubscriber<T> | undefined;\n let resetConnection: Subscription | undefined;\n let subject: SubjectLike<T> | undefined;\n let refCount = 0;\n let hasCompleted = false;\n let hasErrored = false;\n\n const cancelReset = () => {\n resetConnection?.unsubscribe();\n resetConnection = undefined;\n };\n // Used to reset the internal state to a \"cold\"\n // state, as though it had never been subscribed to.\n const reset = () => {\n cancelReset();\n connection = subject = undefined;\n hasCompleted = hasErrored = false;\n };\n const resetAndUnsubscribe = () => {\n // We need to capture the connection before\n // we reset (if we need to reset).\n const conn = connection;\n reset();\n conn?.unsubscribe();\n };\n\n return operate<T, T>((source, subscriber) => {\n refCount++;\n if (!hasErrored && !hasCompleted) {\n cancelReset();\n }\n\n // Create the subject if we don't have one yet. Grab a local reference to\n // it as well, which avoids non-null assertions when using it and, if we\n // connect to it now, then error/complete need a reference after it was\n // reset.\n const dest = (subject = subject ?? connector());\n\n // Add the finalization directly to the subscriber - instead of returning it -\n // so that the handling of the subscriber's unsubscription will be wired\n // up _before_ the subscription to the source occurs. This is done so that\n // the assignment to the source connection's `closed` property will be seen\n // by synchronous firehose sources.\n subscriber.add(() => {\n refCount--;\n\n // If we're resetting on refCount === 0, and it's 0, we only want to do\n // that on \"unsubscribe\", really. Resetting on error or completion is a different\n // configuration.\n if (refCount === 0 && !hasErrored && !hasCompleted) {\n resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n }\n });\n\n // The following line adds the subscription to the subscriber passed.\n // Basically, `subscriber === dest.subscribe(subscriber)` is `true`.\n dest.subscribe(subscriber);\n\n if (\n !connection &&\n // Check this shareReplay is still activate - it can be reset to 0\n // and be \"unsubscribed\" _before_ it actually subscribes.\n // If we were to subscribe then, it'd leak and get stuck.\n refCount > 0\n ) {\n // We need to create a subscriber here - rather than pass an observer and\n // assign the returned subscription to connection - because it's possible\n // for reentrant subscriptions to the shared observable to occur and in\n // those situations we want connection to be already-assigned so that we\n // don't create another connection to the source.\n connection = new SafeSubscriber({\n next: (value) => dest.next(value),\n error: (err) => {\n hasErrored = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnError, err);\n dest.error(err);\n },\n complete: () => {\n hasCompleted = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnComplete);\n dest.complete();\n },\n });\n innerFrom(source).subscribe(connection);\n }\n })(wrapperSource);\n };\n}\n\nfunction handleReset<T extends unknown[] = never[]>(\n reset: () => void,\n on: boolean | ((...args: T) => ObservableInput<any>),\n ...args: T\n): Subscription | undefined {\n if (on === true) {\n reset();\n return;\n }\n\n if (on === false) {\n return;\n }\n\n const onSubscriber = new SafeSubscriber({\n next: () => {\n onSubscriber.unsubscribe();\n reset();\n },\n });\n\n return innerFrom(on(...args)).subscribe(onSubscriber);\n}\n", "import { ReplaySubject } from '../ReplaySubject';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { share } from './share';\n\nexport interface ShareReplayConfig {\n bufferSize?: number;\n windowTime?: number;\n refCount: boolean;\n scheduler?: SchedulerLike;\n}\n\nexport function shareReplay<T>(config: ShareReplayConfig): MonoTypeOperatorFunction<T>;\nexport function shareReplay<T>(bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;\n\n/**\n * Share source and replay specified number of emissions on subscription.\n *\n * This operator is a specialization of `replay` that connects to a source observable\n * and multicasts through a `ReplaySubject` constructed with the specified arguments.\n * A successfully completed source will stay cached in the `shareReplay`ed observable forever,\n * but an errored source can be retried.\n *\n * ## Why use `shareReplay`?\n *\n * You generally want to use `shareReplay` when you have side-effects or taxing computations\n * that you do not wish to be executed amongst multiple subscribers.\n * It may also be valuable in situations where you know you will have late subscribers to\n * a stream that need access to previously emitted values.\n * This ability to replay values on subscription is what differentiates {@link share} and `shareReplay`.\n *\n * ## Reference counting\n *\n * By default `shareReplay` will use `refCount` of false, meaning that it will _not_ unsubscribe the\n * source when the reference counter drops to zero, i.e. the inner `ReplaySubject` will _not_ be unsubscribed\n * (and potentially run for ever).\n * This is the default as it is expected that `shareReplay` is often used to keep around expensive to setup\n * observables which we want to keep running instead of having to do the expensive setup again.\n *\n * As of RXJS version 6.4.0 a new overload signature was added to allow for manual control over what\n * happens when the operators internal reference counter drops to zero.\n * If `refCount` is true, the source will be unsubscribed from once the reference count drops to zero, i.e.\n * the inner `ReplaySubject` will be unsubscribed. All new subscribers will receive value emissions from a\n * new `ReplaySubject` which in turn will cause a new subscription to the source observable.\n *\n * ## Examples\n *\n * Example with a third subscriber coming late to the party\n *\n * ```ts\n * import { interval, take, shareReplay } from 'rxjs';\n *\n * const shared$ = interval(2000).pipe(\n * take(6),\n * shareReplay(3)\n * );\n *\n * shared$.subscribe(x => console.log('sub A: ', x));\n * shared$.subscribe(y => console.log('sub B: ', y));\n *\n * setTimeout(() => {\n * shared$.subscribe(y => console.log('sub C: ', y));\n * }, 11000);\n *\n * // Logs:\n * // (after ~2000 ms)\n * // sub A: 0\n * // sub B: 0\n * // (after ~4000 ms)\n * // sub A: 1\n * // sub B: 1\n * // (after ~6000 ms)\n * // sub A: 2\n * // sub B: 2\n * // (after ~8000 ms)\n * // sub A: 3\n * // sub B: 3\n * // (after ~10000 ms)\n * // sub A: 4\n * // sub B: 4\n * // (after ~11000 ms, sub C gets the last 3 values)\n * // sub C: 2\n * // sub C: 3\n * // sub C: 4\n * // (after ~12000 ms)\n * // sub A: 5\n * // sub B: 5\n * // sub C: 5\n * ```\n *\n * Example for `refCount` usage\n *\n * ```ts\n * import { Observable, tap, interval, shareReplay, take } from 'rxjs';\n *\n * const log = <T>(name: string, source: Observable<T>) => source.pipe(\n * tap({\n * subscribe: () => console.log(`${ name }: subscribed`),\n * next: value => console.log(`${ name }: ${ value }`),\n * complete: () => console.log(`${ name }: completed`),\n * finalize: () => console.log(`${ name }: unsubscribed`)\n * })\n * );\n *\n * const obs$ = log('source', interval(1000));\n *\n * const shared$ = log('shared', obs$.pipe(\n * shareReplay({ bufferSize: 1, refCount: true }),\n * take(2)\n * ));\n *\n * shared$.subscribe(x => console.log('sub A: ', x));\n * shared$.subscribe(y => console.log('sub B: ', y));\n *\n * // PRINTS:\n * // shared: subscribed <-- reference count = 1\n * // source: subscribed\n * // shared: subscribed <-- reference count = 2\n * // source: 0\n * // shared: 0\n * // sub A: 0\n * // shared: 0\n * // sub B: 0\n * // source: 1\n * // shared: 1\n * // sub A: 1\n * // shared: completed <-- take(2) completes the subscription for sub A\n * // shared: unsubscribed <-- reference count = 1\n * // shared: 1\n * // sub B: 1\n * // shared: completed <-- take(2) completes the subscription for sub B\n * // shared: unsubscribed <-- reference count = 0\n * // source: unsubscribed <-- replaySubject unsubscribes from source observable because the reference count dropped to 0 and refCount is true\n *\n * // In case of refCount being false, the unsubscribe is never called on the source and the source would keep on emitting, even if no subscribers\n * // are listening.\n * // source: 2\n * // source: 3\n * // source: 4\n * // ...\n * ```\n *\n * @see {@link publish}\n * @see {@link share}\n * @see {@link publishReplay}\n *\n * @param configOrBufferSize Maximum element count of the replay buffer or {@link ShareReplayConfig configuration}\n * object.\n * @param windowTime Maximum time length of the replay buffer in milliseconds.\n * @param scheduler Scheduler where connected observers within the selector function\n * will be invoked on.\n * @return A function that returns an Observable sequence that contains the\n * elements of a sequence produced by multicasting the source sequence within a\n * selector function.\n */\nexport function shareReplay<T>(\n configOrBufferSize?: ShareReplayConfig | number,\n windowTime?: number,\n scheduler?: SchedulerLike\n): MonoTypeOperatorFunction<T> {\n let bufferSize: number;\n let refCount = false;\n if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n ({ bufferSize = Infinity, windowTime = Infinity, refCount = false, scheduler } = configOrBufferSize);\n } else {\n bufferSize = (configOrBufferSize ?? Infinity) as number;\n }\n return share<T>({\n connector: () => new ReplaySubject(bufferSize, windowTime, scheduler),\n resetOnError: true,\n resetOnComplete: false,\n resetOnRefCountZero: refCount,\n });\n}\n", "import { concat } from '../observable/concat';\nimport { OperatorFunction, SchedulerLike, ValueFromArray } from '../types';\nimport { popScheduler } from '../util/args';\nimport { operate } from '../util/lift';\n\n// Devs are more likely to pass null or undefined than they are a scheduler\n// without accompanying values. To make things easier for (naughty) devs who\n// use the `strictNullChecks: false` TypeScript compiler option, these\n// overloads with explicit null and undefined values are included.\n\nexport function startWith<T>(value: null): OperatorFunction<T, T | null>;\nexport function startWith<T>(value: undefined): OperatorFunction<T, T | undefined>;\n\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `concatAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function startWith<T, A extends readonly unknown[] = T[]>(\n ...valuesAndScheduler: [...A, SchedulerLike]\n): OperatorFunction<T, T | ValueFromArray<A>>;\nexport function startWith<T, A extends readonly unknown[] = T[]>(...values: A): OperatorFunction<T, T | ValueFromArray<A>>;\n\n/**\n * Returns an observable that, at the moment of subscription, will synchronously emit all\n * values provided to this operator, then subscribe to the source and mirror all of its emissions\n * to subscribers.\n *\n * This is a useful way to know when subscription has occurred on an existing observable.\n *\n * <span class=\"informal\">First emits its arguments in order, and then any\n * emissions from the source.</span>\n *\n * ![](startWith.png)\n *\n * ## Examples\n *\n * Emit a value when a timer starts.\n *\n * ```ts\n * import { timer, map, startWith } from 'rxjs';\n *\n * timer(1000)\n * .pipe(\n * map(() => 'timer emit'),\n * startWith('timer start')\n * )\n * .subscribe(x => console.log(x));\n *\n * // results:\n * // 'timer start'\n * // 'timer emit'\n * ```\n *\n * @param values Items you want the modified Observable to emit first.\n * @return A function that returns an Observable that synchronously emits\n * provided values before subscribing to the source Observable.\n *\n * @see {@link endWith}\n * @see {@link finalize}\n * @see {@link concat}\n */\nexport function startWith<T, D>(...values: D[]): OperatorFunction<T, T | D> {\n const scheduler = popScheduler(values);\n return operate((source, subscriber) => {\n // Here we can't pass `undefined` as a scheduler, because if we did, the\n // code inside of `concat` would be confused by the `undefined`, and treat it\n // like an invalid observable. So we have to split it two different ways.\n (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);\n });\n}\n", "import { Subscriber } from '../Subscriber';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\n\n/* tslint:disable:max-line-length */\nexport function switchMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMap<T, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: undefined\n): OperatorFunction<T, ObservedValueOf<O>>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R\n): OperatorFunction<T, R>;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, emitting values only from the most recently projected Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link switchAll}.</span>\n *\n * ![](switchMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each time it observes one of these\n * inner Observables, the output Observable begins emitting the items emitted by\n * that inner Observable. When a new inner Observable is emitted, `switchMap`\n * stops emitting items from the earlier-emitted inner Observable and begins\n * emitting items from the new one. It continues to behave like this for\n * subsequent inner Observables.\n *\n * ## Example\n *\n * Generate new Observable according to source Observable values\n *\n * ```ts\n * import { of, switchMap } from 'rxjs';\n *\n * const switched = of(1, 2, 3).pipe(switchMap(x => of(x, x ** 2, x ** 3)));\n * switched.subscribe(x => console.log(x));\n * // outputs\n * // 1\n * // 1\n * // 1\n * // 2\n * // 4\n * // 8\n * // 3\n * // 9\n * // 27\n * ```\n *\n * Restart an interval Observable on every click event\n *\n * ```ts\n * import { fromEvent, switchMap, interval } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(switchMap(() => interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switchAll}\n * @see {@link switchMapTo}\n *\n * @param {function(value: T, index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and taking\n * only the values from the most recently projected inner Observable.\n */\nexport function switchMap<T, R, O extends ObservableInput<any>>(\n project: (value: T, index: number) => O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R\n): OperatorFunction<T, ObservedValueOf<O> | R> {\n return operate((source, subscriber) => {\n let innerSubscriber: Subscriber<ObservedValueOf<O>> | null = null;\n let index = 0;\n // Whether or not the source subscription has completed\n let isComplete = false;\n\n // We only complete the result if the source is complete AND we don't have an active inner subscription.\n // This is called both when the source completes and when the inners complete.\n const checkComplete = () => isComplete && !innerSubscriber && subscriber.complete();\n\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n // Cancel the previous inner subscription if there was one\n innerSubscriber?.unsubscribe();\n let innerIndex = 0;\n const outerIndex = index++;\n // Start the next inner subscription\n innerFrom(project(value, outerIndex)).subscribe(\n (innerSubscriber = createOperatorSubscriber(\n subscriber,\n // When we get a new inner value, next it through. Note that this is\n // handling the deprecate result selector here. This is because with this architecture\n // it ends up being smaller than using the map operator.\n (innerValue) => subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue),\n () => {\n // The inner has completed. Null out the inner subscriber to\n // free up memory and to signal that we have no inner subscription\n // currently.\n innerSubscriber = null!;\n checkComplete();\n }\n ))\n );\n },\n () => {\n isComplete = true;\n checkComplete();\n }\n )\n );\n });\n}\n", "import { MonoTypeOperatorFunction, Observer } from '../types';\nimport { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\n\n/**\n * An extension to the {@link Observer} interface used only by the {@link tap} operator.\n *\n * It provides a useful set of callbacks a user can register to do side-effects in\n * cases other than what the usual {@link Observer} callbacks are\n * ({@link guide/glossary-and-semantics#next next},\n * {@link guide/glossary-and-semantics#error error} and/or\n * {@link guide/glossary-and-semantics#complete complete}).\n *\n * ## Example\n *\n * ```ts\n * import { fromEvent, switchMap, tap, interval, take } from 'rxjs';\n *\n * const source$ = fromEvent(document, 'click');\n * const result$ = source$.pipe(\n * switchMap((_, i) => i % 2 === 0\n * ? fromEvent(document, 'mousemove').pipe(\n * tap({\n * subscribe: () => console.log('Subscribed to the mouse move events after click #' + i),\n * unsubscribe: () => console.log('Mouse move events #' + i + ' unsubscribed'),\n * finalize: () => console.log('Mouse move events #' + i + ' finalized')\n * })\n * )\n * : interval(1_000).pipe(\n * take(5),\n * tap({\n * subscribe: () => console.log('Subscribed to the 1-second interval events after click #' + i),\n * unsubscribe: () => console.log('1-second interval events #' + i + ' unsubscribed'),\n * finalize: () => console.log('1-second interval events #' + i + ' finalized')\n * })\n * )\n * )\n * );\n *\n * const subscription = result$.subscribe({\n * next: console.log\n * });\n *\n * setTimeout(() => {\n * console.log('Unsubscribe after 60 seconds');\n * subscription.unsubscribe();\n * }, 60_000);\n * ```\n */\nexport interface TapObserver<T> extends Observer<T> {\n /**\n * The callback that `tap` operator invokes at the moment when the source Observable\n * gets subscribed to.\n */\n subscribe: () => void;\n /**\n * The callback that `tap` operator invokes when an explicit\n * {@link guide/glossary-and-semantics#unsubscription unsubscribe} happens. It won't get invoked on\n * `error` or `complete` events.\n */\n unsubscribe: () => void;\n /**\n * The callback that `tap` operator invokes when any kind of\n * {@link guide/glossary-and-semantics#finalization finalization} happens - either when\n * the source Observable `error`s or `complete`s or when it gets explicitly unsubscribed\n * by the user. There is no difference in using this callback or the {@link finalize}\n * operator, but if you're already using `tap` operator, you can use this callback\n * instead. You'd get the same result in either case.\n */\n finalize: () => void;\n}\nexport function tap<T>(observerOrNext?: Partial<TapObserver<T>> | ((value: T) => void)): MonoTypeOperatorFunction<T>;\n/** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\nexport function tap<T>(\n next?: ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n): MonoTypeOperatorFunction<T>;\n\n/**\n * Used to perform side-effects for notifications from the source observable\n *\n * <span class=\"informal\">Used when you want to affect outside state with a notification without altering the notification</span>\n *\n * ![](tap.png)\n *\n * Tap is designed to allow the developer a designated place to perform side effects. While you _could_ perform side-effects\n * inside of a `map` or a `mergeMap`, that would make their mapping functions impure, which isn't always a big deal, but will\n * make it so you can't do things like memoize those functions. The `tap` operator is designed solely for such side-effects to\n * help you remove side-effects from other operations.\n *\n * For any notification, next, error, or complete, `tap` will call the appropriate callback you have provided to it, via a function\n * reference, or a partial observer, then pass that notification down the stream.\n *\n * The observable returned by `tap` is an exact mirror of the source, with one exception: Any error that occurs -- synchronously -- in a handler\n * provided to `tap` will be emitted as an error from the returned observable.\n *\n * > Be careful! You can mutate objects as they pass through the `tap` operator's handlers.\n *\n * The most common use of `tap` is actually for debugging. You can place a `tap(console.log)` anywhere\n * in your observable `pipe`, log out the notifications as they are emitted by the source returned by the previous\n * operation.\n *\n * ## Examples\n *\n * Check a random number before it is handled. Below is an observable that will use a random number between 0 and 1,\n * and emit `'big'` or `'small'` depending on the size of that number. But we wanted to log what the original number\n * was, so we have added a `tap(console.log)`.\n *\n * ```ts\n * import { of, tap, map } from 'rxjs';\n *\n * of(Math.random()).pipe(\n * tap(console.log),\n * map(n => n > 0.5 ? 'big' : 'small')\n * ).subscribe(console.log);\n * ```\n *\n * Using `tap` to analyze a value and force an error. Below is an observable where in our system we only\n * want to emit numbers 3 or less we get from another source. We can force our observable to error\n * using `tap`.\n *\n * ```ts\n * import { of, tap } from 'rxjs';\n *\n * const source = of(1, 2, 3, 4, 5);\n *\n * source.pipe(\n * tap(n => {\n * if (n > 3) {\n * throw new TypeError(`Value ${ n } is greater than 3`);\n * }\n * })\n * )\n * .subscribe({ next: console.log, error: err => console.log(err.message) });\n * ```\n *\n * We want to know when an observable completes before moving on to the next observable. The system\n * below will emit a random series of `'X'` characters from 3 different observables in sequence. The\n * only way we know when one observable completes and moves to the next one, in this case, is because\n * we have added a `tap` with the side effect of logging to console.\n *\n * ```ts\n * import { of, concatMap, interval, take, map, tap } from 'rxjs';\n *\n * of(1, 2, 3).pipe(\n * concatMap(n => interval(1000).pipe(\n * take(Math.round(Math.random() * 10)),\n * map(() => 'X'),\n * tap({ complete: () => console.log(`Done with ${ n }`) })\n * ))\n * )\n * .subscribe(console.log);\n * ```\n *\n * @see {@link finalize}\n * @see {@link TapObserver}\n *\n * @param observerOrNext A next handler or partial observer\n * @param error An error handler\n * @param complete A completion handler\n * @return A function that returns an Observable identical to the source, but\n * runs the specified Observer or callback(s) for each item.\n */\nexport function tap<T>(\n observerOrNext?: Partial<TapObserver<T>> | ((value: T) => void) | null,\n error?: ((e: any) => void) | null,\n complete?: (() => void) | null\n): MonoTypeOperatorFunction<T> {\n // We have to check to see not only if next is a function,\n // but if error or complete were passed. This is because someone\n // could technically call tap like `tap(null, fn)` or `tap(null, null, fn)`.\n const tapObserver =\n isFunction(observerOrNext) || error || complete\n ? // tslint:disable-next-line: no-object-literal-type-assertion\n ({ next: observerOrNext as Exclude<typeof observerOrNext, Partial<TapObserver<T>>>, error, complete } as Partial<TapObserver<T>>)\n : observerOrNext;\n\n return tapObserver\n ? operate((source, subscriber) => {\n tapObserver.subscribe?.();\n let isUnsub = true;\n source.subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n tapObserver.next?.(value);\n subscriber.next(value);\n },\n () => {\n isUnsub = false;\n tapObserver.complete?.();\n subscriber.complete();\n },\n (err) => {\n isUnsub = false;\n tapObserver.error?.(err);\n subscriber.error(err);\n },\n () => {\n if (isUnsub) {\n tapObserver.unsubscribe?.();\n }\n tapObserver.finalize?.();\n }\n )\n );\n })\n : // Tap was called with no valid tap observer or handler\n // (e.g. `tap(null, null, null)` or `tap(null)` or `tap()`)\n // so we're going to just mirror the source.\n identity;\n}\n", "import { OperatorFunction, ObservableInputTuple } from '../types';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { identity } from '../util/identity';\nimport { noop } from '../util/noop';\nimport { popResultSelector } from '../util/args';\n\nexport function withLatestFrom<T, O extends unknown[]>(...inputs: [...ObservableInputTuple<O>]): OperatorFunction<T, [T, ...O]>;\n\nexport function withLatestFrom<T, O extends unknown[], R>(\n ...inputs: [...ObservableInputTuple<O>, (...value: [T, ...O]) => R]\n): OperatorFunction<T, R>;\n\n/**\n * Combines the source Observable with other Observables to create an Observable\n * whose values are calculated from the latest values of each, only when the\n * source emits.\n *\n * <span class=\"informal\">Whenever the source Observable emits a value, it\n * computes a formula using that value plus the latest values from other input\n * Observables, then emits the output of that formula.</span>\n *\n * ![](withLatestFrom.png)\n *\n * `withLatestFrom` combines each value from the source Observable (the\n * instance) with the latest values from the other input Observables only when\n * the source emits a value, optionally using a `project` function to determine\n * the value to be emitted on the output Observable. All input Observables must\n * emit at least one value before the output Observable will emit a value.\n *\n * ## Example\n *\n * On every click event, emit an array with the latest timer event plus the click event\n *\n * ```ts\n * import { fromEvent, interval, withLatestFrom } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const timer = interval(1000);\n * const result = clicks.pipe(withLatestFrom(timer));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatest}\n *\n * @param {ObservableInput} other An input Observable to combine with the source\n * Observable. More than one input Observables may be given as argument.\n * @param {Function} [project] Projection function for combining values\n * together. Receives all values in order of the Observables passed, where the\n * first parameter is a value from the source Observable. (e.g.\n * `a.pipe(withLatestFrom(b, c), map(([a1, b1, c1]) => a1 + b1 + c1))`). If this is not\n * passed, arrays will be emitted on the output Observable.\n * @return A function that returns an Observable of projected values from the\n * most recent values from each input Observable, or an array of the most\n * recent values from each input Observable.\n */\nexport function withLatestFrom<T, R>(...inputs: any[]): OperatorFunction<T, R | any[]> {\n const project = popResultSelector(inputs) as ((...args: any[]) => R) | undefined;\n\n return operate((source, subscriber) => {\n const len = inputs.length;\n const otherValues = new Array(len);\n // An array of whether or not the other sources have emitted. Matched with them by index.\n // TODO: At somepoint, we should investigate the performance implications here, and look\n // into using a `Set()` and checking the `size` to see if we're ready.\n let hasValue = inputs.map(() => false);\n // Flipped true when we have at least one value from all other sources and\n // we are ready to start emitting values.\n let ready = false;\n\n // Other sources. Note that here we are not checking `subscriber.closed`,\n // this causes all inputs to be subscribed to, even if nothing can be emitted\n // from them. This is an important distinction because subscription constitutes\n // a side-effect.\n for (let i = 0; i < len; i++) {\n innerFrom(inputs[i]).subscribe(\n createOperatorSubscriber(\n subscriber,\n (value) => {\n otherValues[i] = value;\n if (!ready && !hasValue[i]) {\n // If we're not ready yet, flag to show this observable has emitted.\n hasValue[i] = true;\n // Intentionally terse code.\n // If all of our other observables have emitted, set `ready` to `true`,\n // so we know we can start emitting values, then clean up the `hasValue` array,\n // because we don't need it anymore.\n (ready = hasValue.every(identity)) && (hasValue = null!);\n }\n },\n // Completing one of the other sources has\n // no bearing on the completion of our result.\n noop\n )\n );\n }\n\n // Source subscription\n source.subscribe(\n createOperatorSubscriber(subscriber, (value) => {\n if (ready) {\n // We have at least one value from the other sources. Go ahead and emit.\n const values = [value, ...otherValues];\n subscriber.next(project ? project(...values) : values);\n }\n })\n );\n });\n}\n", "import { zip as zipStatic } from '../observable/zip';\nimport { ObservableInput, ObservableInputTuple, OperatorFunction, Cons } from '../types';\nimport { operate } from '../util/lift';\n\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip<T, A extends readonly unknown[]>(otherInputs: [...ObservableInputTuple<A>]): OperatorFunction<T, Cons<T, A>>;\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip<T, A extends readonly unknown[], R>(\n otherInputsAndProject: [...ObservableInputTuple<A>],\n project: (...values: Cons<T, A>) => R\n): OperatorFunction<T, R>;\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip<T, A extends readonly unknown[]>(...otherInputs: [...ObservableInputTuple<A>]): OperatorFunction<T, Cons<T, A>>;\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip<T, A extends readonly unknown[], R>(\n ...otherInputsAndProject: [...ObservableInputTuple<A>, (...values: Cons<T, A>) => R]\n): OperatorFunction<T, R>;\n\n/**\n * @deprecated Replaced with {@link zipWith}. Will be removed in v8.\n */\nexport function zip<T, R>(...sources: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): OperatorFunction<T, any> {\n return operate((source, subscriber) => {\n zipStatic(source as ObservableInput<any>, ...(sources as Array<ObservableInput<any>>)).subscribe(subscriber);\n });\n}\n", "import { ObservableInputTuple, OperatorFunction, Cons } from '../types';\nimport { zip } from './zip';\n\n/**\n * Subscribes to the source, and the observable inputs provided as arguments, and combines their values, by index, into arrays.\n *\n * What is meant by \"combine by index\": The first value from each will be made into a single array, then emitted,\n * then the second value from each will be combined into a single array and emitted, then the third value\n * from each will be combined into a single array and emitted, and so on.\n *\n * This will continue until it is no longer able to combine values of the same index into an array.\n *\n * After the last value from any one completed source is emitted in an array, the resulting observable will complete,\n * as there is no way to continue \"zipping\" values together by index.\n *\n * Use-cases for this operator are limited. There are memory concerns if one of the streams is emitting\n * values at a much faster rate than the others. Usage should likely be limited to streams that emit\n * at a similar pace, or finite streams of known length.\n *\n * In many cases, authors want `combineLatestWith` and not `zipWith`.\n *\n * @param otherInputs other observable inputs to collate values from.\n * @return A function that returns an Observable that emits items by index\n * combined from the source Observable and provided Observables, in form of an\n * array.\n */\nexport function zipWith<T, A extends readonly unknown[]>(...otherInputs: [...ObservableInputTuple<A>]): OperatorFunction<T, Cons<T, A>> {\n return zip(...otherInputs);\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getElements<T extends keyof HTMLElementTagNameMap>(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T][]\n\nexport function getElements<T extends HTMLElement>(\n selector: string, node?: ParentNode\n): T[]\n\nexport function getElements<T extends HTMLElement>(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll<T>(selector))\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * Note that this function assumes that the element is present. If unsure if an\n * element is existent, use the `getOptionalElement` function instead.\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getElement<T extends keyof HTMLElementTagNameMap>(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T]\n\nexport function getElement<T extends HTMLElement>(\n selector: string, node?: ParentNode\n): T\n\nexport function getElement<T extends HTMLElement>(\n selector: string, node: ParentNode = document\n): T {\n const el = getOptionalElement<T>(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n\n /* Return element */\n return el\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an optional element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element or nothing\n */\nexport function getOptionalElement<T extends keyof HTMLElementTagNameMap>(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T] | undefined\n\nexport function getOptionalElement<T extends HTMLElement>(\n selector: string, node?: ParentNode\n): T | undefined\n\nexport function getOptionalElement<T extends HTMLElement>(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector<T>(selector) || undefined\n}\n\n/**\n * Retrieve the currently active element\n *\n * @returns Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement || undefined\n : undefined\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n debounceTime,\n distinctUntilChanged,\n fromEvent,\n map,\n merge,\n shareReplay,\n startWith\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Focus observable\n *\n * Previously, this observer used `focus` and `blur` events to determine whether\n * an element is focused, but this doesn't work if there are focusable elements\n * within the elements itself. A better solutions are `focusin` and `focusout`\n * events, which bubble up the tree and allow for more fine-grained control.\n *\n * `debounceTime` is necessary, because when a focus change happens inside an\n * element, the observable would first emit `false` and then `true` again.\n */\nconst observer$ = merge(\n fromEvent(document.body, \"focusin\"),\n fromEvent(document.body, \"focusout\")\n)\n .pipe(\n debounceTime(1),\n startWith(undefined),\n map(() => getActiveElement() || document.body),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @returns Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable<boolean> {\n return observer$\n .pipe(\n map(active => el.contains(active)),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n animationFrameScheduler,\n auditTime,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\nimport { ElementOffset } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content offset (= scroll offset)\n *\n * @param el - Element\n *\n * @returns Element content offset\n */\nexport function getElementContentOffset(\n el: HTMLElement\n): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element content offset\n *\n * @param el - Element\n *\n * @returns Element content offset observable\n */\nexport function watchElementContentOffset(\n el: HTMLElement\n): Observable<ElementOffset> {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n auditTime(0, animationFrameScheduler),\n map(() => getElementContentOffset(el)),\n startWith(getElementContentOffset(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { JSX as JSXInternal } from \"preact\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record<string, any>\n\n/**\n * Child element\n */\ntype Child =\n | ChildNode\n | HTMLElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(el: HTMLElement, child: Child | Child[]): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @template T - Element type\n *\n * @param tag - HTML tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @returns Element\n */\nexport function h<T extends keyof HTMLElementTagNameMap>(\n tag: T, attributes?: Attributes | null, ...children: Child[]\n): HTMLElementTagNameMap[T]\n\nexport function h<T extends h.JSX.Element>(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T\n\nexport function h<T extends h.JSX.Element>(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T {\n const el = document.createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of Object.keys(attributes)) {\n if (typeof attributes[attr] === \"undefined\")\n continue\n\n /* Set default attribute or boolean */\n if (typeof attributes[attr] !== \"boolean\")\n el.setAttribute(attr, attributes[attr])\n else\n el.setAttribute(attr, \"\")\n }\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el as T\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Round a number for display with repository facts\n *\n * This is a reverse-engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @returns Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 0.000001) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n switchMap,\n take,\n throwError\n} from \"rxjs\"\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create and load a `script` element\n *\n * This function returns an observable that will emit when the script was\n * successfully loaded, or throw an error if it wasn't.\n *\n * @param src - Script URL\n *\n * @returns Script observable\n */\nexport function watchScript(src: string): Observable<void> {\n const script = h(\"script\", { src })\n return defer(() => {\n document.head.appendChild(script)\n return merge(\n fromEvent(script, \"load\"),\n fromEvent(script, \"error\")\n .pipe(\n switchMap(() => (\n throwError(() => new ReferenceError(`Invalid script: ${src}`))\n ))\n )\n )\n .pipe(\n map(() => undefined),\n finalize(() => document.head.removeChild(script)),\n take(1)\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n startWith,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { watchScript } from \"../../../script\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementSize {\n width: number /* Element width */\n height: number /* Element height */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Resize observer entry subject\n */\nconst entry$ = new Subject<ResizeObserverEntry>()\n\n/**\n * Resize observer observable\n *\n * This observable will create a `ResizeObserver` on the first subscription\n * and will automatically terminate it when there are no more subscribers.\n * It's quite important to centralize observation in a single `ResizeObserver`,\n * as the performance difference can be quite dramatic, as the link shows.\n *\n * If the browser doesn't have a `ResizeObserver` implementation available, a\n * polyfill is automatically downloaded from unpkg.com. This is also compatible\n * with the built-in privacy plugin, which will download the polyfill and put\n * it alongside the built site for self-hosting.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => (\n typeof ResizeObserver === \"undefined\"\n ? watchScript(\"https://unpkg.com/resize-observer-polyfill\")\n : of(undefined)\n))\n .pipe(\n map(() => new ResizeObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n })),\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element size\n *\n * @param el - Element\n *\n * @returns Element size\n */\nexport function getElementSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.offsetWidth,\n height: el.offsetHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element size\n *\n * This function returns an observable that subscribes to a single internal\n * instance of `ResizeObserver` upon subscription, and emit resize events until\n * termination. Note that this function should not be called with the same\n * element twice, as the first unsubscription will terminate observation.\n *\n * Sadly, we can't use the `DOMRect` objects returned by the observer, because\n * we need the emitted values to be consistent with `getElementSize`, which will\n * return the used values (rounded) and not actual values (unrounded). Thus, we\n * use the `offset*` properties. See the linked GitHub issue.\n *\n * @see https://bit.ly/3m0k3he - GitHub issue\n *\n * @param el - Element\n *\n * @returns Element size observable\n */\nexport function watchElementSize(\n el: HTMLElement\n): Observable<ElementSize> {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(() => getElementSize(el))\n )\n ),\n startWith(getElementSize(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ElementSize } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content size (= scroll width and height)\n *\n * @param el - Element\n *\n * @returns Element content size\n */\nexport function getElementContentSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.scrollWidth,\n height: el.scrollHeight\n }\n}\n\n/**\n * Retrieve the overflowing container of an element, if any\n *\n * @param el - Element\n *\n * @returns Overflowing container or nothing\n */\nexport function getElementContainer(\n el: HTMLElement\n): HTMLElement | undefined {\n let parent = el.parentElement\n while (parent)\n if (\n el.scrollWidth <= parent.scrollWidth &&\n el.scrollHeight <= parent.scrollHeight\n )\n parent = (el = parent).parentElement\n else\n break\n\n /* Return overflowing container */\n return parent ? el : undefined\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport {\n getElementContentSize,\n getElementSize,\n watchElementContentOffset\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Intersection observer entry subject\n */\nconst entry$ = new Subject<IntersectionObserverEntry>()\n\n/**\n * Intersection observer observable\n *\n * This observable will create an `IntersectionObserver` on first subscription\n * and will automatically terminate it when there are no more subscribers.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n new IntersectionObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n }, {\n threshold: 0\n })\n))\n .pipe(\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element visibility\n *\n * @param el - Element\n *\n * @returns Element visibility observable\n */\nexport function watchElementVisibility(\n el: HTMLElement\n): Observable<boolean> {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(({ isIntersecting }) => isIntersecting)\n )\n )\n )\n}\n\n/**\n * Watch element boundary\n *\n * This function returns an observable which emits whether the bottom content\n * boundary (= scroll offset) of an element is within a certain threshold.\n *\n * @param el - Element\n * @param threshold - Threshold\n *\n * @returns Element boundary observable\n */\nexport function watchElementBoundary(\n el: HTMLElement, threshold = 16\n): Observable<boolean> {\n return watchElementContentOffset(el)\n .pipe(\n map(({ y }) => {\n const visible = getElementSize(el)\n const content = getElementContentSize(el)\n return y >= (\n content.height - visible.height - threshold\n )\n }),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n startWith\n} from \"rxjs\"\n\nimport { getElement } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record<Toggle, HTMLInputElement> = {\n drawer: getElement(\"[data-md-toggle=drawer]\"),\n search: getElement(\"[data-md-toggle=search]\")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable<boolean> {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getLocation } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flag\n */\nexport type Flag =\n | \"announce.dismiss\" /* Dismissable announcement bar */\n | \"content.code.annotate\" /* Code annotations */\n | \"content.code.copy\" /* Code copy button */\n | \"content.lazy\" /* Lazy content elements */\n | \"content.tabs.link\" /* Link content tabs */\n | \"header.autohide\" /* Hide header */\n | \"navigation.expand\" /* Automatic expansion */\n | \"navigation.indexes\" /* Section pages */\n | \"navigation.instant\" /* Instant navigation */\n | \"navigation.instant.progress\" /* Instant navigation progress */\n | \"navigation.sections\" /* Section navigation */\n | \"navigation.tabs\" /* Tabs navigation */\n | \"navigation.tabs.sticky\" /* Tabs navigation (sticky) */\n | \"navigation.top\" /* Back-to-top button */\n | \"navigation.tracking\" /* Anchor tracking */\n | \"search.highlight\" /* Search highlighting */\n | \"search.share\" /* Search sharing */\n | \"search.suggest\" /* Search suggestions */\n | \"toc.follow\" /* Following table of contents */\n | \"toc.integrate\" /* Integrated table of contents */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Translation\n */\nexport type Translation =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n | \"search.result.more.one\" /* 1 more on this page */\n | \"search.result.more.other\" /* # more on this page */\n | \"search.result.term.missing\" /* Missing */\n | \"select.version\" /* Version selector */\n\n/**\n * Translations\n */\nexport type Translations =\n Record<Translation, string>\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Versioning\n */\nexport interface Versioning {\n provider: \"mike\" /* Version provider */\n default?: string | string[] /* Default version */\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n base: string /* Base URL */\n features: Flag[] /* Feature flags */\n translations: Translations /* Translations */\n search: string /* Search worker URL */\n tags?: Record<string, string> /* Tags mapping */\n version?: Versioning /* Versioning */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration and make base URL absolute\n */\nconst script = getElement(\"#__config\")\nconst config: Config = JSON.parse(script.textContent!)\nconfig.base = `${new URL(config.base, getLocation())}`\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration\n *\n * @returns Global configuration\n */\nexport function configuration(): Config {\n return config\n}\n\n/**\n * Check whether a feature flag is enabled\n *\n * @param flag - Feature flag\n *\n * @returns Test result\n */\nexport function feature(flag: Flag): boolean {\n return config.features.includes(flag)\n}\n\n/**\n * Retrieve the translation for the given key\n *\n * @param key - Key to be translated\n * @param value - Positional value, if any\n *\n * @returns Translation\n */\nexport function translation(\n key: Translation, value?: string | number\n): string {\n return typeof value !== \"undefined\"\n ? config.translations[key].replace(\"#\", value.toString())\n : config.translations[key]\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject } from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function returns a `URL` object (and not `Location`) to normalize the\n * typings across the application. Furthermore, locations need to be tracked\n * without setting them and `Location` is a singleton which represents the\n * current location.\n *\n * @returns URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * If instant navigation is enabled, this function creates a temporary anchor\n * element, sets the `href` attribute, appends it to the body, clicks it, and\n * then removes it again. The event will bubble up the DOM and trigger be\n * intercepted by the instant loading business logic.\n *\n * Note that we must append and remove the anchor element, or the event will\n * not bubble up the DOM, making it impossible to intercept it.\n *\n * @param url - URL to navigate to\n * @param navigate - Force navigation\n */\nexport function setLocation(\n url: URL | HTMLLinkElement, navigate = false\n): void {\n if (feature(\"navigation.instant\") && !navigate) {\n const el = h(\"a\", { href: url.href })\n document.body.appendChild(el)\n el.click()\n el.remove()\n\n // If we're not using instant navigation, and the page should not be reloaded\n // just instruct the browser to navigate to the given URL\n } else {\n location.href = url.href\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @returns Location subject\n */\nexport function watchLocation(): Subject<URL> {\n return new Subject<URL>()\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n map,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Options\n */\ninterface Options {\n progress$?: Subject<number> // Progress subject\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the given URL\n *\n * If the request fails (e.g. when dispatched from `file://` locations), the\n * observable will complete without emitting a value.\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Response observable\n */\nexport function request(\n url: URL | string, options?: Options\n): Observable<Blob> {\n return new Observable<Blob>(observer => {\n const req = new XMLHttpRequest()\n req.open(\"GET\", `${url}`)\n req.responseType = \"blob\"\n\n // Handle response\n req.addEventListener(\"load\", () => {\n if (req.status >= 200 && req.status < 300) {\n observer.next(req.response)\n observer.complete()\n } else {\n observer.error(new Error(req.statusText))\n }\n })\n\n // Handle network errors\n req.addEventListener(\"error\", () => {\n observer.error(new Error(\"Network Error\"))\n })\n\n // Handle aborted requests\n req.addEventListener(\"abort\", () => {\n observer.error(new Error(\"Request aborted\"))\n })\n\n // Handle download progress\n if (typeof options?.progress$ !== \"undefined\") {\n req.addEventListener(\"progress\", event => {\n options.progress$!.next((event.loaded / event.total) * 100)\n })\n\n // Immediately set progress to 5% to indicate that we're loading\n options.progress$.next(5)\n }\n\n // Send request\n req.send()\n })\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Fetch JSON from the given URL\n *\n * @template T - Data type\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestJSON<T>(\n url: URL | string, options?: Options\n): Observable<T> {\n return request(url, options)\n .pipe(\n switchMap(res => res.text()),\n map(body => JSON.parse(body) as T),\n shareReplay(1)\n )\n}\n\n/**\n * Fetch XML from the given URL\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestXML(\n url: URL | string, options?: Options\n): Observable<Document> {\n const dom = new DOMParser()\n return request(url, options)\n .pipe(\n switchMap(res => res.text()),\n map(res => dom.parseFromString(res, \"text/xml\")),\n shareReplay(1)\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type\n */\nexport type ComponentType =\n | \"iconsearch\" /* Icon search */\n | \"iconsearch-query\" /* Icon search input */\n | \"iconsearch-result\" /* Icon search results */\n | \"sponsorship\" /* Sponsorship */\n | \"sponsorship-count\" /* Sponsorship count */\n | \"sponsorship-total\" /* Sponsorship total */\n\n/**\n * Component\n *\n * @template T - Component type\n * @template U - Reference type\n */\nexport type Component<\n T extends {} = {},\n U extends HTMLElement = HTMLElement\n> =\n T & {\n ref: U /* Component reference */\n }\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type map\n */\ninterface ComponentTypeMap {\n \"iconsearch\": HTMLElement /* Icon search */\n \"iconsearch-query\": HTMLInputElement /* Icon search input */\n \"iconsearch-result\": HTMLElement /* Icon search results */\n \"sponsorship\": HTMLElement /* Sponsorship */\n \"sponsorship-count\": HTMLElement /* Sponsorship count */\n \"sponsorship-total\": HTMLElement /* Sponsorship total */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the element for a given component or throw a reference error\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getComponentElement<T extends ComponentType>(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T] {\n return getElement(`[data-mdx-component=${type}]`, node)\n}\n\n/**\n * Retrieve all elements for a given component\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getComponentElements<T extends ComponentType>(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T][] {\n return getElements(`[data-mdx-component=${type}]`, node)\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n delay,\n distinctUntilChanged,\n filter,\n fromEvent,\n map,\n merge,\n startWith,\n withLatestFrom\n} from \"rxjs\"\n\nimport { watchElementFocus } from \"~/browser\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Icon search query\n */\nexport interface IconSearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount icon search query\n *\n * @param el - Icon search query element\n *\n * @returns Icon search query component observable\n */\nexport function mountIconSearchQuery(\n el: HTMLInputElement\n): Observable<Component<IconSearchQuery, HTMLInputElement>> {\n\n /* Intercept focus and input events */\n const focus$ = watchElementFocus(el)\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => el.value),\n startWith(el.value),\n distinctUntilChanged(),\n )\n\n /* Log search on blur */\n focus$\n .pipe(\n filter(active => !active),\n withLatestFrom(value$)\n )\n .subscribe(([, value]) => {\n const path = document.location.pathname\n if (typeof ga === \"function\" && value.length)\n ga(\"send\", \"pageview\", `${path}?q=[icon]+${value}`)\n })\n\n /* Combine into single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ ref: el, value, focus })),\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { filter as search } from \"fuzzaldrin-plus\"\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n distinctUntilKeyChanged,\n filter,\n finalize,\n map,\n merge,\n of,\n switchMap,\n tap,\n withLatestFrom,\n zipWith\n} from \"rxjs\"\n\nimport {\n getElement,\n watchElementBoundary\n} from \"~/browser\"\nimport { round } from \"~/utilities\"\n\nimport { Icon, renderIconSearchResult } from \"_/templates\"\n\nimport { Component } from \"../../_\"\nimport { IconSearchIndex } from \"../_\"\nimport { IconSearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Icon search result\n */\nexport interface IconSearchResult {\n data: Icon[] /* Search result data */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n index$: Observable<IconSearchIndex> /* Search index observable */\n query$: Observable<IconSearchQuery> /* Search query observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n index$: Observable<IconSearchIndex> /* Search index observable */\n query$: Observable<IconSearchQuery> /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch icon search result\n *\n * @param el - Icon search result element\n * @param options - Options\n *\n * @returns Icon search result observable\n */\nexport function watchIconSearchResult(\n el: HTMLElement, { index$, query$ }: WatchOptions\n): Observable<IconSearchResult> {\n switch (el.getAttribute(\"data-mdx-mode\")) {\n\n case \"file\":\n return combineLatest([\n query$.pipe(distinctUntilKeyChanged(\"value\")),\n index$\n .pipe(\n map(({ icons }) => Object.values(icons.data)\n .map(icon => icon.replace(/\\.svg$/, \"\"))\n )\n )\n ])\n .pipe(\n map(([{ value }, data]) => search(data, value)),\n switchMap(files => index$.pipe(\n map(({ icons }) => ({\n data: files.map<Icon>(shortcode => {\n return {\n shortcode,\n url: [\n icons.base,\n shortcode,\n \".svg\"\n ].join(\"\")\n }\n })\n }))\n ))\n )\n\n default:\n return combineLatest([\n query$.pipe(distinctUntilKeyChanged(\"value\")),\n index$\n .pipe(\n map(({ icons, emojis }) => [\n ...Object.keys(icons.data),\n ...Object.keys(emojis.data)\n ])\n )\n ])\n .pipe(\n map(([{ value }, data]) => search(data, value)),\n switchMap(shortcodes => index$.pipe(\n map(({ icons, emojis }) => ({\n data: shortcodes.map<Icon>(shortcode => {\n const category =\n shortcode in icons.data\n ? icons\n : emojis\n return {\n shortcode,\n url: [\n category.base,\n category.data[shortcode]\n ].join(\"\")\n }\n })\n }))\n ))\n )\n }\n}\n\n/**\n * Mount icon search result\n *\n * @param el - Icon search result element\n * @param options - Options\n *\n * @returns Icon search result component observable\n */\nexport function mountIconSearchResult(\n el: HTMLElement, { index$, query$ }: MountOptions\n): Observable<Component<IconSearchResult, HTMLElement>> {\n const push$ = new Subject<IconSearchResult>()\n const boundary$ = watchElementBoundary(el)\n .pipe(\n filter(Boolean)\n )\n\n /* Update search result metadata */\n const meta = getElement(\":scope > :first-child\", el)\n push$\n .pipe(\n withLatestFrom(query$)\n )\n .subscribe(([{ data }, { value }]) => {\n if (value) {\n switch (data.length) {\n\n /* No results */\n case 0:\n meta.textContent = \"No matches\"\n break\n\n /* One result */\n case 1:\n meta.textContent = \"1 match\"\n break\n\n /* Multiple result */\n default:\n meta.textContent = `${round(data.length)} matches`\n }\n } else {\n meta.textContent = \"Type to start searching\"\n }\n })\n\n /* Update icon search result list */\n const file = el.getAttribute(\"data-mdx-mode\") === \"file\"\n const list = getElement(\":scope > :last-child\", el)\n push$\n .pipe(\n tap(() => list.innerHTML = \"\"),\n switchMap(({ data }) => merge(\n of(...data.slice(0, 10)),\n of(...data.slice(10))\n .pipe(\n bufferCount(10),\n zipWith(boundary$),\n switchMap(([chunk]) => chunk)\n )\n )),\n withLatestFrom(query$)\n )\n .subscribe(([result, { value }]) => list.appendChild(\n renderIconSearchResult(result, value, file)\n ))\n\n /* Create and return component */\n return watchIconSearchResult(el, { query$, index$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { wrap } from \"fuzzaldrin-plus\"\n\nimport { translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Icon\n */\nexport interface Icon {\n shortcode: string /* Icon shortcode */\n url: string /* Icon URL */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Highlight an icon search result\n *\n * @param icon - Icon\n * @param query - Search query\n *\n * @returns Highlighted result\n */\nfunction highlight(icon: Icon, query: string): string {\n return wrap(icon.shortcode, query, {\n wrap: {\n tagOpen: \"<b>\",\n tagClose: \"</b>\"\n }\n })\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render an icon search result\n *\n * @param icon - Icon\n * @param query - Search query\n * @param file - Render as file\n *\n * @returns Element\n */\nexport function renderIconSearchResult(\n icon: Icon, query: string, file?: boolean\n): HTMLElement {\n return (\n <li class=\"mdx-iconsearch-result__item\">\n <span class=\"twemoji\">\n <img src={icon.url} />\n </span>\n <button\n class=\"md-clipboard--inline\"\n title={translation(\"clipboard.copy\")}\n data-clipboard-text={file ? icon.shortcode : `:${icon.shortcode}:`}\n >\n <code>{\n file\n ? highlight(icon, query)\n : `:${highlight(icon, query)}:`\n }</code>\n </button>\n </li>\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\nimport { SponsorUser } from \"_/components\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render public sponsor\n *\n * @param user - Sponsor user\n *\n * @returns Element\n */\nexport function renderPublicSponsor(\n user: SponsorUser\n): HTMLElement {\n const title = `@${user.name}`\n return (\n <a href={user.url} title={title} class=\"mdx-sponsorship__item\">\n <img src={user.image} />\n </a>\n )\n}\n\n/**\n * Render private sponsor\n *\n * @param count - Number of private sponsors\n *\n * @returns Element\n */\nexport function renderPrivateSponsor(\n count: number\n): HTMLElement {\n return (\n <a\n href=\"https://github.com/sponsors/squidfunk?metadata_origin=docs\"\n class=\"mdx-sponsorship__item mdx-sponsorship__item--private\"\n >\n +{count}\n </a>\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, merge } from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport { requestJSON } from \"~/browser\"\n\nimport { Component, getComponentElement } from \"../../_\"\nimport {\n IconSearchQuery,\n mountIconSearchQuery\n} from \"../query\"\nimport {\n IconSearchResult,\n mountIconSearchResult\n} from \"../result\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Icon category\n */\nexport interface IconCategory {\n base: string /* Category base URL */\n data: Record<string, string> /* Category data */\n}\n\n/**\n * Icon search index\n */\nexport interface IconSearchIndex {\n icons: IconCategory /* Icons */\n emojis: IconCategory /* Emojis */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Icon search\n */\nexport type IconSearch =\n | IconSearchQuery\n | IconSearchResult\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount icon search\n *\n * @param el - Icon search element\n *\n * @returns Icon search component observable\n */\nexport function mountIconSearch(\n el: HTMLElement\n): Observable<Component<IconSearch>> {\n const config = configuration()\n const index$ = requestJSON<IconSearchIndex>(\n new URL(\"assets/javascripts/iconsearch_index.json\", config.base)\n )\n\n /* Retrieve query and result components */\n const query = getComponentElement(\"iconsearch-query\", el)\n const result = getComponentElement(\"iconsearch-result\", el)\n\n /* Create and return component */\n const query$ = mountIconSearchQuery(query)\n const result$ = mountIconSearchResult(result, { index$, query$ })\n return merge(query$, result$)\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, map } from \"rxjs\"\n\nimport { getElement, requestJSON } from \"~/browser\"\n\nimport { renderPrivateSponsor, renderPublicSponsor } from \"_/templates\"\n\nimport { Component, getComponentElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sponsor type\n */\nexport type SponsorType =\n | \"user\" /* Sponsor is a user */\n | \"organization\" /* Sponsor is an organization */\n\n/**\n * Sponsor visibility\n */\nexport type SponsorVisibility =\n | \"public\" /* Sponsor is a user */\n | \"private\" /* Sponsor is an organization */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Sponsor user\n */\nexport interface SponsorUser {\n type: SponsorType /* Sponsor type */\n name: string /* Sponsor login name */\n image: string /* Sponsor image URL */\n url: string /* Sponsor URL */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Public sponsor\n */\nexport interface PublicSponsor {\n type: \"public\" /* Sponsor visibility */\n user: SponsorUser /* Sponsor user */\n}\n\n/**\n * Private sponsor\n */\nexport interface PrivateSponsor {\n type: \"private\" /* Sponsor visibility */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Sponsor\n */\nexport type Sponsor =\n | PublicSponsor\n | PrivateSponsor\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Sponsorship\n */\nexport interface Sponsorship {\n sponsors: Sponsor[] /* Sponsors */\n total: number /* Total amount */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount sponsorship\n *\n * @param el - Sponsorship element\n *\n * @returns Sponsorship component observable\n */\nexport function mountSponsorship(\n el: HTMLElement\n): Observable<Component<Sponsorship>> {\n const sponsorship$ = requestJSON<Sponsorship>(\n \"https://3if8u9o552.execute-api.us-east-1.amazonaws.com/_/\"\n )\n\n /* Retrieve adjacent components */\n const count = getComponentElement(\"sponsorship-count\")\n const total = getComponentElement(\"sponsorship-total\")\n\n /* Render sponsorship */\n sponsorship$.subscribe(sponsorship => {\n el.removeAttribute(\"hidden\")\n\n /* Render public sponsors with avatar and links */\n const list = getElement(\":scope > :first-child\", el)\n for (const sponsor of sponsorship.sponsors)\n if (sponsor.type === \"public\")\n list.appendChild(renderPublicSponsor(sponsor.user))\n\n /* Render combined private sponsors */\n list.appendChild(renderPrivateSponsor(\n sponsorship.sponsors.filter(({ type }) => (\n type === \"private\"\n )).length\n ))\n\n /* Render sponsorship count and total */\n count.innerText = `${sponsorship.sponsors.length}`\n total.innerText = `$ ${sponsorship.total\n .toString()\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\n } a month`\n })\n\n // /* Create and return component */\n return sponsorship$\n .pipe(\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { fromEvent } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up extra analytics events\n */\nexport function setupAnalytics(): void {\n const { origin } = new URL(location.href)\n fromEvent(document.body, \"click\")\n .subscribe(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\")\n if (el && el.origin !== origin)\n ga(\"send\", \"event\", \"outbound\", \"click\", el.href)\n }\n })\n}\n", "/*\n * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { merge, switchMap } from \"rxjs\"\n\nimport {\n getComponentElements,\n mountIconSearch,\n mountSponsorship\n} from \"./components\"\nimport { setupAnalytics } from \"./integrations\"\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Set up extra analytics events */\nsetupAnalytics()\n\n/* Set up extra component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => merge(\n\n /* Icon search */\n ...getComponentElements(\"iconsearch\")\n .map(el => mountIconSearch(el)),\n\n /* Sponsorship */\n ...getComponentElements(\"sponsorship\")\n .map(el => mountSponsorship(el))\n ))\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n"],
+ "mappings": "u0BAAA,IAAAA,GAAAC,GAAAC,GAAA,EAAC,UAAW,CACV,IAAIC,EAAeC,EAAcC,EAAoBC,EAAmBC,EAASC,EAAaC,EAAWC,EAAaC,EAAYC,EAAWC,EAAeC,EAAgBC,EAAmBC,EAAYC,EAAiBC,EAAcC,EAAeC,EAAWC,EAAUC,EAE9QA,EAAK,IAELV,EAAY,GAEZS,EAAW,IAEXV,EAAa,IAEbT,EAAQ,MAAQ,SAASqB,EAAQC,EAAOC,EAAS,CAC/C,IAAIC,EAAaC,EAAeC,EAAOC,EAEvC,OADAF,EAAgBF,EAAQ,cAAeC,EAAcD,EAAQ,YACvDC,GAAenB,EAAQgB,EAAQI,EAAc,QAASA,EAAc,OAAO,GAGjFE,EAAYN,EAAO,YAAY,EAC/BK,EAAQxB,EAAamB,EAAQM,EAAWF,CAAa,EAC9C,KAAK,KAAKC,CAAK,GAJb,CAKX,EAEA1B,EAAQ,QAAUK,EAAU,SAASuB,EAASC,EAAUC,EAAU,CAChE,IAAIC,EAAGC,EAAGC,EAAGC,EAAGC,EAAOC,EAAOC,EAG9B,GAFAJ,EAAIL,EAAQ,OACZM,EAAIL,EAAS,OACT,CAACI,GAAKC,EAAID,EACZ,MAAO,GAIT,IAFAF,EAAI,GACJC,EAAI,GACG,EAAEA,EAAIE,GAAG,CAGd,IAFAC,EAAQN,EAAS,WAAWG,CAAC,EAC7BI,EAAQN,EAAS,WAAWE,CAAC,EACtB,EAAED,EAAIE,IACXI,EAAKT,EAAQ,WAAWG,CAAC,EACrB,EAAAM,IAAOF,GAASE,IAAOD,KAA3B,CAIF,GAAIL,IAAME,EACR,MAAO,EAEX,CACA,MAAO,EACT,EAEAjC,EAAQ,aAAeE,EAAe,SAAS0B,EAASU,EAAYb,EAAe,CACjF,IAAIc,EAAMC,EAAYC,EAAOC,EAAUC,EAASC,EAAWC,EAAoBd,EAAGC,EAAGC,EAAGa,EAAaC,GAAWb,EAAGc,GAAK1B,GAAOO,GAAUoB,GAAavB,GAAOwB,GAAYC,GAAWC,GAAUC,GAAOC,GAAOC,GAO5M,GANAjC,GAAQG,EAAc,MACtBI,GAAWJ,EAAc,SACzBQ,EAAIL,EAAQ,OACZM,EAAIZ,GAAM,OACViB,EAAO5B,EAAciB,EAASU,EAAYhB,GAAOO,EAAQ,EACzDW,EAAaD,EAAK,MACdA,EAAK,QAAUL,EACjB,OAAOpB,EAAWoB,EAAGD,EAAGO,EAAYD,EAAK,GAAG,EAG9C,GADAS,GAAMV,EAAW,QAAQT,EAAQ,EAC7BmB,GAAM,GACR,OAAOjC,EAAgBa,EAASU,EAAYhB,GAAOO,GAAUmB,GAAKd,EAAGD,CAAC,EASxE,IAPAkB,GAAY,IAAI,MAAMjB,CAAC,EACvBS,EAAU,IAAI,MAAMT,CAAC,EACrBqB,GAAKrC,EAAUgB,EAAGD,CAAC,EACnBa,EAAc,KAAK,KAAKrC,EAAayB,CAAC,EAAI,EAC1Ca,GAAYD,EACZD,EAAqB,GACrBb,EAAI,GACG,EAAEA,EAAIE,GACXiB,GAAUnB,CAAC,EAAI,EACfW,EAAQX,CAAC,EAAI,EAGf,IADAD,EAAI,GACG,EAAEA,EAAIE,GAAG,CAEd,GADAoB,GAAQf,EAAWP,CAAC,EAChB,CAACsB,GAAM,WAAW,CAAC,IAAK5B,EAAc,UAAW,CACnD,GAAIoB,EAAoB,CAEtB,IADAb,EAAI,GACG,EAAEA,EAAIE,GACXS,EAAQX,CAAC,EAAI,EAEfa,EAAqB,EACvB,CACA,QACF,CAOA,IANAnB,GAAQ,EACRwB,GAAa,EACbR,EAAW,EACXO,GAAc,GACdJ,EAAqB,GACrBb,EAAI,GACG,EAAEA,EAAIE,GAAG,CAMd,GALAkB,GAAWD,GAAUnB,CAAC,EAClBoB,GAAW1B,KACbA,GAAQ0B,IAEVR,EAAY,EACRf,GAASG,CAAC,IAAMqB,GAIlB,GAHAC,GAAQ9C,EAAYuB,EAAGH,EAASU,CAAU,EAC1CM,EAAYF,EAAW,EAAIA,EAAW7B,EAAkBe,EAASU,EAAYhB,GAAOO,GAAUE,EAAGC,EAAGsB,EAAK,EACzGb,EAAQS,GAAatC,EAAemB,EAAGC,EAAGsB,GAAOd,EAAYI,CAAS,EAClEH,EAAQf,GACVA,GAAQe,EACRM,GAAYD,MACP,CACL,GAAIG,IAAe,EAAEF,IAAa,EAChC,OAAO,KAAK,IAAIrB,GAAOyB,GAAUjB,EAAI,CAAC,CAAC,EAAIqB,GAE7CN,GAAc,EAChB,CAEFC,GAAaE,GACbV,EAAWC,EAAQX,CAAC,EACpBW,EAAQX,CAAC,EAAIY,EACbO,GAAUnB,CAAC,EAAIN,EACjB,CACF,CACA,OAAAA,GAAQyB,GAAUjB,EAAI,CAAC,EAChBR,GAAQ6B,EACjB,EAEAvD,EAAQ,YAAcQ,EAAc,SAASwC,EAAKpB,EAASU,EAAY,CACrE,IAAIkB,EAAQC,EACZ,OAAIT,IAAQ,EACH,IAETQ,EAAS5B,EAAQoB,CAAG,EACpBS,EAAS7B,EAAQoB,EAAM,CAAC,EACjB1C,EAAYmD,CAAM,GAAMD,IAAWlB,EAAWU,CAAG,GAAKS,IAAWnB,EAAWU,EAAM,CAAC,EAC5F,EAEAhD,EAAQ,UAAYO,EAAY,SAASyC,EAAKpB,EAASU,EAAYoB,EAAK,CACtE,IAAIF,EAAQG,EACZ,OAAIX,IAAQU,EAAM,EACT,IAETF,EAAS5B,EAAQoB,CAAG,EACpBW,EAAS/B,EAAQoB,EAAM,CAAC,EACjB1C,EAAYqD,CAAM,GAAMH,IAAWlB,EAAWU,CAAG,GAAKW,IAAWrB,EAAWU,EAAM,CAAC,EAC5F,EAEA1C,EAAc,SAASsD,EAAG,CACxB,OAAOA,IAAM,KAAOA,IAAM,KAAOA,IAAM,KAAOA,IAAM,KAAOA,IAAM,KAAOA,IAAM,IAChF,EAEA3C,EAAgB,SAAS+B,EAAK,CAC5B,IAAIa,EACJ,OAAIb,EAAMtC,GACRmD,EAAKnD,EAAYsC,EACV,IAAMa,EAAKA,GAEX,KAAK,IAAI,IAAMnD,EAAYsC,EAAK,CAAC,CAE5C,EAEAhD,EAAQ,UAAYkB,EAAY,SAASgB,EAAGD,EAAG,CAC7C,OAAOd,GAAYA,EAAW,KAAK,IAAIc,EAAIC,CAAC,EAC9C,EAEApB,EAAa,SAASoB,EAAGD,EAAG6B,EAASd,EAAK,CACxC,MAAO,GAAId,GAAKd,EAAK0C,EAAU7C,EAAc+B,CAAG,GAAK9B,EAAUgB,EAAGD,CAAC,CACrE,EAEAjC,EAAQ,aAAegB,EAAe,SAAS+C,EAAOL,EAAKM,EAAUV,EAAOW,EAAK,CAC/E,IAAIC,EAAOX,EACX,OAAAA,EAAKQ,EACLG,EAAQ,EACJF,IAAaD,IACfG,GAAS,GAEPZ,IACFY,GAAS,GAEPD,IACFC,GAAS,GAEPH,IAAUL,IACRJ,IACEU,IAAaN,EACfH,GAAM,EAENA,GAAM,GAGNU,IACFC,GAAS,IAGNF,EAAWT,GAAMA,EAAKW,EAC/B,EAEAlE,EAAQ,eAAiBY,EAAiB,SAASmB,EAAGC,EAAGsB,EAAOd,EAAYI,EAAW,CACrF,IAAIuB,EAEJ,OADAA,EAAWlD,EAAcc,CAAC,EACtBuB,EACKa,EAAW/C,IAAOoB,EAAaI,EAAYJ,EAAaI,GAAa,IAEvEuB,EAAW/C,EAAKwB,CACzB,EAEA5C,EAAQ,kBAAoBa,EAAoB,SAASe,EAASU,EAAYhB,EAAOO,EAAUE,EAAGC,EAAGoC,EAAa,CAChH,IAAIC,EAAGpC,EAAGqC,EAAIpC,EAAGqC,EAAIP,EAAUT,EAW/B,IAVAtB,EAAIL,EAAQ,OACZM,EAAIZ,EAAM,OACVgD,EAAKrC,EAAIF,EACTwC,EAAKrC,EAAIF,EACTqC,EAAIC,EAAKC,EAAKD,EAAKC,EACnBP,EAAW,EACXT,EAAK,EACDjC,EAAMU,CAAC,IAAMJ,EAAQG,CAAC,GACxBiC,IAEK,EAAET,EAAKc,GAAKxC,EAAS,EAAEG,CAAC,IAAMM,EAAW,EAAEP,CAAC,GAC7CT,EAAMU,CAAC,IAAMJ,EAAQG,CAAC,GACxBiC,IAMJ,OAHIT,EAAKc,GACPtC,IAEEwB,IAAO,EACF,EAAI,EAAIS,EAEVhD,EAAauC,EAAIrB,EAAG8B,EAAUI,EAAa7D,EAAUwB,EAAGH,EAASU,EAAYL,CAAC,CAAC,CACxF,EAEAjC,EAAQ,gBAAkBe,EAAkB,SAASa,EAASU,EAAYhB,EAAOO,EAAUmB,EAAKd,EAAGD,EAAG,CACpG,IAAIgC,EAAKlC,EAAGyC,EAAMR,EAAUV,EAa5B,IAZAA,EAAQ9C,EAAYwC,EAAKpB,EAASU,CAAU,EACvCgB,IACHkB,EAAOlC,EAAW,QAAQT,EAAUmB,EAAM,CAAC,EACvCwB,EAAO,KACTlB,EAAQ9C,EAAYgE,EAAM5C,EAASU,CAAU,EACzCgB,IACFN,EAAMwB,KAIZzC,EAAI,GACJiC,EAAW,EACJ,EAAEjC,EAAIG,GACPZ,EAAM0B,EAAMjB,CAAC,IAAMH,EAAQG,CAAC,GAC9BiC,IAGJ,OAAAC,EAAM1D,EAAUyC,EAAMd,EAAI,EAAGN,EAASU,EAAYL,CAAC,EAC5CnB,EAAWoB,EAAGD,EAAGjB,EAAakB,EAAGA,EAAG8B,EAAUV,EAAOW,CAAG,EAAGjB,CAAG,CACvE,EAEA/C,EAAiB,UAAW,CAC1B,SAASA,EAAcyB,EAAOsB,EAAKe,EAAO,CACxC,KAAK,MAAQrC,EACb,KAAK,IAAMsB,EACX,KAAK,MAAQe,CACf,CAEA,OAAO9D,CAET,EAAG,EAEHE,EAAqB,IAAIF,EAAc,EAAG,GAAK,CAAC,EAEhDD,EAAQ,cAAgBW,EAAgB,SAASiB,EAASU,EAAYhB,EAAOO,EAAU,CACrF,IAAIkC,EAAOU,EAAU1C,EAAGC,EAAGC,EAAGC,EAAGC,EAAO6B,EAAUtC,EAAOgD,EAAUC,GAGnE,GAFA1C,EAAIL,EAAQ,OACZM,EAAIZ,EAAM,OACN,EAAEW,EAAI,GAAKC,EAAI,GACjB,OAAO/B,EAQT,IANA4D,EAAQ,EACRW,EAAW,EACXC,GAAS,EACTX,EAAW,EACXjC,EAAI,GACJC,EAAI,GACG,EAAEA,EAAIE,GAAG,CAEd,GADAC,EAAQN,EAASG,CAAC,EACd1B,EAAY6B,CAAK,EAEnB,GADAJ,EAAIO,EAAW,QAAQH,EAAOJ,EAAI,CAAC,EAC/BA,EAAI,GAAI,CACV2C,IACA,QACF,KACE,OAGJ,KAAO,EAAE3C,EAAIE,GACX,GAAIE,IAAUG,EAAWP,CAAC,GAAKvB,EAAYuB,EAAGH,EAASU,CAAU,EAAG,CAC9DhB,EAAMU,CAAC,IAAMJ,EAAQG,CAAC,GACxBiC,IAEFW,IAAU5C,EACVgC,IACA,KACF,CAEF,GAAIhC,IAAME,EACR,KAEJ,CACA,OAAI8B,EAAQ,EACH5D,GAETsE,EAAWV,IAAU7B,EAAI9B,EAAkBwB,EAASU,EAAYhB,EAAOyC,CAAK,EAAI,GAChFrC,EAAQV,EAAa+C,EAAO7B,EAAG8B,EAAU,GAAMS,CAAQ,EAChD,IAAIxE,EAAcyB,EAAOiD,GAASZ,EAAOA,EAAQW,CAAQ,EAClE,EAEAtE,EAAoB,SAASwB,EAASU,EAAYhB,EAAOsD,EAAkB,CACzE,IAAIb,EAAOhC,EAAGE,EAAGC,EAIjB,GAHAD,EAAIL,EAAQ,OACZM,EAAIZ,EAAM,OACVyC,EAAQ,EACJ9B,EAAI,GAAKC,EACX,MAAO,GAGT,IADAH,EAAI,GACG,EAAEA,EAAIE,GACX,GAAIzB,EAAYuB,EAAGH,EAASU,CAAU,GAAK,EAAEyB,EAAQa,EACnD,MAAO,GAGX,MAAO,EACT,CAEF,GAAG,KAAK5E,CAAI,ICtUZ,IAAA6E,GAAAC,GAAAC,IAAA,EAAC,UAAW,CACV,IAAIC,EAAcC,EAAUC,EAAYC,EAAcC,EAAmBC,EAASC,EAAWC,EAAWC,EAAWC,EAEnHA,EAAO,KAAqBJ,EAAUI,EAAK,QAAST,EAAeS,EAAK,aAAcF,EAAYE,EAAK,UAEvGD,EAAY,GAEZN,EAAa,IAEbH,GAAQ,MAAQ,SAASW,EAAQC,EAAOC,EAAS,CAC/C,IAAIC,EAAaC,EAAeC,EAAOC,EAEvC,OADAF,EAAgBF,EAAQ,cAAeC,EAAcD,EAAQ,YACvDC,GAAeR,EAAQK,EAAQI,EAAc,QAASA,EAAc,OAAO,GAGjFE,EAAYN,EAAO,YAAY,EAC/BK,EAAQf,EAAaU,EAAQM,EAAWF,CAAa,EACrDC,EAAQT,EAAUI,EAAQM,EAAWD,EAAOH,CAAO,EAC5C,KAAK,KAAKG,CAAK,GALb,CAMX,EAEAT,EAAY,SAASW,EAASC,EAAYC,EAAeP,EAAS,CAChE,IAAIQ,EAAOC,EAAeC,EAASC,EAAOC,EAAKC,EAAWC,EAAYC,EAAeb,EAAec,EACpG,GAAIT,IAAkB,EACpB,MAAO,GAIT,IAFAL,EAAgBF,EAAQ,cAAegB,EAAoBhB,EAAQ,kBAAmBe,EAAgBf,EAAQ,cAC9GY,EAAMP,EAAQ,OAAS,EAChBA,EAAQO,CAAG,IAAMG,GACtBH,IASF,GAPAF,EAAUL,EAAQ,YAAYU,EAAeH,CAAG,EAChDE,EAAaF,EAAMF,EACnBG,EAAY,EACRG,IACFH,GAAarB,EAAkBc,EAAYJ,EAAc,IAAKQ,EAASE,EAAK,CAAC,EAC7EL,GAAiBM,GAEfH,IAAY,GACd,OAAOH,EAGT,IADAI,EAAQT,EAAc,MACfQ,EAAU,IAAMC,KAAU,GAC/BD,EAAUL,EAAQ,YAAYU,EAAeL,EAAU,CAAC,EAE1D,OAAAD,EAAgBC,IAAY,GAAKH,EAAgBM,EAAYzB,EAAaiB,EAAQ,MAAMK,EAAU,EAAGE,EAAM,CAAC,EAAGN,EAAW,MAAMI,EAAU,EAAGE,EAAM,CAAC,EAAGV,CAAa,EACpKM,EAAQ,GAAMZ,GAAaA,EAAYP,EAASgB,EAASO,EAAM,EAAGG,CAAa,GACxEP,EAAQC,GAAiB,EAAID,GAASD,EAAgBZ,EAAU,EAAGL,EAAawB,CAAU,CACnG,EAEA3B,GAAQ,SAAWE,EAAW,SAAS4B,EAAML,EAAKG,EAAe,CAC/D,IAAIG,EAAOC,EACX,GAAIP,EAAM,EACR,MAAO,GAIT,IAFAM,EAAQ,EACRC,EAAI,GACG,EAAEA,EAAIP,GAAOK,EAAKE,CAAC,IAAMJ,GAAe,CAG/C,KAAO,EAAEI,EAAIP,GACX,GAAIK,EAAKE,CAAC,IAAMJ,EAEd,IADAG,IACO,EAAEC,EAAIP,GAAOK,EAAKE,CAAC,IAAMJ,GAAe,CAKnD,OAAOG,CACT,EAEA/B,GAAQ,aAAeI,EAAe,SAAS6B,EAAK,CAClD,IAAIC,EAEJ,OADAA,EAAMD,EAAI,YAAY,GAAG,EACrBC,EAAM,EACD,GAEAD,EAAI,OAAOC,EAAM,CAAC,CAE7B,EAEA7B,EAAoB,SAAS8B,EAAWC,EAAKC,EAAUC,EAAQC,EAAU,CACvE,IAAI,EAAGC,EAASC,EAAGP,EAKnB,GAJI,CAACE,EAAI,SAGTF,EAAMC,EAAU,YAAY,IAAKG,CAAM,EACnC,EAAEJ,EAAMG,IACV,MAAO,GAUT,IARAI,EAAIL,EAAI,OACR,EAAIE,EAASJ,EACT,EAAIO,IACNA,EAAI,EACJ,EAAIL,EAAI,QAEVF,IACAM,EAAU,GACH,EAAEA,EAAUC,GACbN,EAAUD,EAAMM,CAAO,IAAMJ,EAAII,CAAO,GAA5C,CAIF,OAAIA,IAAY,GAAKD,EAAW,EACvB,GAAMlC,EAAkB8B,EAAWC,EAAKC,EAAUH,EAAM,EAAGK,EAAW,CAAC,EAEzEC,EAAU,CACnB,CAEF,GAAG,KAAKxC,EAAI,IC7GZ,IAAA0C,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAAC,UAAW,CACV,IAAIC,EAAOC,EAAWC,EAAUC,EAAcC,EAAcC,EAAaC,EAAoBC,EAE7FA,EAAO,KAAyBL,EAAWK,EAAK,SAAUH,EAAeG,EAAK,aAE9ER,GAAO,QAAUC,EAAS,UAAW,CACnC,SAASA,EAAMQ,EAAOC,EAAM,CAC1B,IAAIC,EAAcC,EAAeC,EAEjC,GADAA,EAAQH,GAAQ,KAAOA,EAAO,CAAC,EAAGC,EAAeE,EAAM,aAAcD,EAAgBC,EAAM,cACvF,EAAEJ,GAASA,EAAM,QACnB,OAAO,KAET,KAAK,MAAQA,EACb,KAAK,SAAWA,EAAM,YAAY,EAClC,KAAK,KAAOP,EAAUO,EAAOE,CAAY,EACzC,KAAK,QAAU,KAAK,KAAK,YAAY,EACrC,KAAK,QAAUJ,EAAmB,KAAK,IAAI,EAC3C,KAAK,MAAQJ,EAASM,EAAOA,EAAM,OAAQG,CAAa,EACxD,KAAK,IAAMP,EAAa,KAAK,QAAQ,EACrC,KAAK,UAAYD,EAAa,KAAK,QAAQ,CAC7C,CAEA,OAAOH,CAET,EAAG,EAEHK,EAAc,eAEdJ,EAAY,SAASO,EAAOE,EAAc,CACxC,OAAIA,GAAgB,OAClBA,EAAeL,GAEVG,EAAM,QAAQE,EAAc,EAAE,CACvC,EAEAJ,EAAqB,SAASO,EAAK,CACjC,IAAIC,EAAMC,EAAOC,EAAIC,EAErB,IADAF,EAAQ,GACHC,EAAK,EAAGC,EAAOJ,EAAI,OAAQG,EAAKC,EAAMD,IACzCF,EAAOD,EAAIG,CAAE,EACbD,GAASD,EAAK,YAAY,EAAE,CAAC,EAE/B,OAAOC,CACT,EAEAZ,EAAe,SAASU,EAAK,CAC3B,IAAIK,EAAWC,EAAGC,EAIlB,IAHAA,EAAMP,EAAI,OACVM,EAAI,GACJD,EAAY,CAAC,EACN,EAAEC,EAAIC,GACXF,EAAUL,EAAI,WAAWM,CAAC,CAAC,EAAI,GAEjC,OAAOD,CACT,CAEF,GAAG,KAAKpB,EAAI,ICxDZ,IAAAuB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAAC,UAAW,CACV,IAAIC,EAAOC,EAAYC,EAAiBC,EAAQC,EAEhDD,EAAS,KAETF,EAAa,KAEbD,EAAQ,KAERE,EAAkB,SAASG,EAAG,CAC5B,OAAOA,EAAE,SACX,EAEAD,EAAiB,SAASC,EAAGC,EAAG,CAC9B,OAAOA,EAAE,MAAQD,EAAE,KACrB,EAEAN,GAAO,QAAU,SAASQ,EAAYC,EAAOC,EAAS,CACpD,IAAIC,EAAMC,EAAWC,EAAKC,EAAWC,EAAYC,EAAOC,EAAeC,EAAkBC,EAAUC,EAAQC,EAAgBC,EAAIC,EAM/H,IALAL,EAAmB,CAAC,EACpBL,EAAMH,EAAQ,IAAKK,EAAaL,EAAQ,WAAYI,EAAYJ,EAAQ,UAAWW,EAAiBX,EAAQ,eAC5GS,EAAYL,GAAa,MAASA,EAAY,EAAIA,EAAYN,EAAW,OAAS,EAClFG,EAAOE,GAAO,KACdI,EAAgBI,EAAiBnB,EAAaE,EACzCkB,EAAK,EAAGC,EAAOf,EAAW,OAAQc,EAAKC,IAC1CX,EAAYJ,EAAWc,CAAE,EACzBF,EAAST,EAAOC,EAAUC,CAAG,EAAID,EAC7B,IAACQ,IAGLJ,EAAQC,EAAc,MAAMG,EAAQX,EAAOC,CAAO,EAC9CM,EAAQ,IACVE,EAAiB,KAAK,CACpB,UAAWN,EACX,MAAOI,CACT,CAAC,EACG,CAAC,EAAEG,MAZuCG,IAGhD,CAcF,OAAAJ,EAAiB,KAAKb,CAAc,EACpCG,EAAaU,EAAiB,IAAIf,CAAe,EAC7CY,GAAc,OAChBP,EAAaA,EAAW,MAAM,EAAGO,CAAU,GAEtCP,CACT,CAEF,GAAG,KAAKT,EAAI,ICjDZ,IAAAyB,GAAAC,GAAAC,IAAA,EAAC,UAAW,CACV,IAAIC,EAAeC,EAAcC,EAASC,EAAaC,EAAOC,EAAcC,EAAeC,EAAgBC,EAAmBC,EAE9HA,EAAO,KAAqBP,EAAUO,EAAK,QAASN,EAAcM,EAAK,YAAaD,EAAoBC,EAAK,kBAAmBF,EAAiBE,EAAK,eAAgBH,EAAgBG,EAAK,cAE3LV,GAAQ,MAAQK,EAAQ,SAASM,EAAQC,EAAOC,EAAS,CACvD,IAAIC,EAAaC,EAAaC,EAASC,EAAeC,EAAeC,EAErE,OADAL,EAAcD,EAAQ,YAAaK,EAAgBL,EAAQ,cAAeI,EAAgBJ,EAAQ,cAC5FC,GAAeX,EAAQQ,EAAQO,EAAc,QAASA,EAAc,OAAO,GAGjFC,EAAYR,EAAO,YAAY,EAC/BK,EAAUd,EAAaS,EAAQQ,EAAWD,CAAa,EACnDF,EAAQ,SAAW,GAGnBL,EAAO,QAAQM,CAAa,EAAI,KAClCF,EAAcd,EAAcU,EAAQQ,EAAWD,EAAeD,CAAa,EAC3ED,EAAUV,EAAaU,EAASD,CAAW,GAEtCC,GAXE,CAAC,CAYZ,EAEAhB,GAAQ,KAAO,SAASW,EAAQC,EAAOC,EAAS,CAC9C,IAAIO,EAAYC,EAAUC,EAAgBC,EAAQC,EAAQC,EAAUC,EAAUC,EAASC,EAavF,GAZKf,EAAQ,MAAQ,OACnBe,EAAQf,EAAQ,KAAMY,EAAWG,EAAM,SAAUD,EAAUC,EAAM,QAASF,EAAWE,EAAM,UAEzFH,GAAY,OACdA,EAAW,aAETE,GAAW,OACbA,EAAU,kBAAoBF,EAAW,MAEvCC,GAAY,OACdA,EAAW,aAETf,IAAWC,EACb,OAAOe,EAAUhB,EAASe,EAG5B,GADAJ,EAAiBjB,EAAMM,EAAQC,EAAOC,CAAO,EACzCS,EAAe,SAAW,EAC5B,OAAOX,EAKT,IAHAY,EAAS,GACTH,EAAa,GACbI,EAAS,EACF,EAAEJ,EAAaE,EAAe,QAAQ,CAM3C,IALAD,EAAWC,EAAeF,CAAU,EAChCC,EAAWG,IACbD,GAAUZ,EAAO,UAAUa,EAAQH,CAAQ,EAC3CG,EAASH,GAEJ,EAAED,EAAaE,EAAe,QACnC,GAAIA,EAAeF,CAAU,IAAMC,EAAW,EAC5CA,QACK,CACLD,IACA,KACF,CAEFC,IACIA,EAAWG,IACbD,GAAUI,EACVJ,GAAUZ,EAAO,UAAUa,EAAQH,CAAQ,EAC3CE,GAAUG,EACVF,EAASH,EAEb,CACA,OAAIG,GAAUb,EAAO,OAAS,IAC5BY,GAAUZ,EAAO,UAAUa,CAAM,GAE5BD,CACT,EAEAtB,EAAgB,SAAS4B,EAASC,EAAYZ,EAAeD,EAAe,CAC1E,IAAIc,EAASC,EAAOC,EAEpB,IADAA,EAAMJ,EAAQ,OAAS,EAChBA,EAAQI,CAAG,IAAMhB,GACtBgB,IAGF,GADAF,EAAUF,EAAQ,YAAYZ,EAAegB,CAAG,EAC5CF,IAAY,GACd,MAAO,CAAC,EAGV,IADAC,EAAQd,EAAc,MACfc,KAAU,GAEf,GADAD,EAAUF,EAAQ,YAAYZ,EAAec,EAAU,CAAC,EACpDA,IAAY,GACd,MAAO,CAAC,EAGZ,OAAAA,IACAE,IACO/B,EAAa2B,EAAQ,MAAME,EAASE,CAAG,EAAGH,EAAW,MAAMC,EAASE,CAAG,EAAGf,EAAea,CAAO,CACzG,EAEAzB,EAAe,SAAS4B,EAAGC,EAAG,CAC5B,IAAIC,EAAIC,EAAIC,EAAGC,EAAGC,EAAGC,EAAGC,EAGxB,GAFAF,EAAIN,EAAE,OACNO,EAAIN,EAAE,OACFM,IAAM,EACR,OAAOP,EAAE,MAAM,EAEjB,GAAIM,IAAM,EACR,OAAOL,EAAE,MAAM,EAMjB,IAJAG,EAAI,GACJC,EAAI,EACJF,EAAKF,EAAEI,CAAC,EACRG,EAAM,CAAC,EACA,EAAEJ,EAAIE,GAAG,CAEd,IADAJ,EAAKF,EAAEI,CAAC,EACDD,GAAMD,GAAM,EAAEG,EAAIE,GACnBJ,EAAKD,GACPM,EAAI,KAAKL,CAAE,EAEbA,EAAKF,EAAEI,CAAC,EAEVG,EAAI,KAAKN,CAAE,CACb,CACA,KAAOG,EAAIE,GACTC,EAAI,KAAKP,EAAEI,GAAG,CAAC,EAEjB,OAAOG,CACT,EAEAxC,EAAe,SAAS2B,EAASC,EAAYZ,EAAeyB,EAAQ,CAClE,IAAIC,EAAUC,EAAMC,EAAMC,EAAIC,EAAYC,EAAOC,EAAWC,EAAUC,EAASC,EAAWf,EAAGC,EAAGC,EAAGxB,EAASsC,EAAMb,EAAGc,EAAK3C,EAAO4C,EAAUC,EAAOC,GAAYC,EAAWC,GAAUC,GAAOC,GAAOC,GAkBjM,IAjBIpB,GAAU,OACZA,EAAS,GAEX/B,EAAQM,EAAc,MACtBsC,EAAWtC,EAAc,SACzBsB,EAAIX,EAAQ,OACZY,EAAI7B,EAAM,OACVoC,EAAazC,EAAcsB,EAASC,EAAYlB,EAAO4C,CAAQ,EAAE,MACjEG,EAAY,IAAI,MAAMlB,CAAC,EACvBW,EAAU,IAAI,MAAMX,CAAC,EACrBK,EAAO,EACPC,EAAK,EACLF,EAAO,EACPD,EAAW,EACXmB,GAAQ,IAAI,MAAMvB,EAAIC,CAAC,EACvBc,EAAM,GACNhB,EAAI,GACG,EAAEA,EAAIE,GACXkB,EAAUpB,CAAC,EAAI,EACfa,EAAQb,CAAC,EAAI,EAGf,IADAD,EAAI,GACG,EAAEA,EAAIE,GAMX,IALAiB,EAAQ,EACRG,GAAW,EACXT,EAAW,EACXU,GAAQ/B,EAAWQ,CAAC,EACpBC,EAAI,GACG,EAAEA,EAAIE,GACXY,EAAY,EACZJ,EAAQ,EACRS,GAAaE,GACTJ,EAASjB,CAAC,IAAMsB,KAClBC,GAAQ1D,EAAYkC,EAAGT,EAASC,CAAU,EAC1CuB,EAAYF,EAAW,EAAIA,EAAW1C,EAAkBoB,EAASC,EAAYlB,EAAO4C,EAAUlB,EAAGC,EAAGuB,EAAK,EACzGb,EAAQS,GAAalD,EAAe8B,EAAGC,EAAGuB,GAAOd,EAAYK,CAAS,GAExEO,GAAWD,EAAUpB,CAAC,EACtBY,EAAWC,EAAQb,CAAC,EAChBkB,EAAQG,GACVN,EAAOT,GAEPY,EAAQG,GACRN,EAAOP,GAELE,EAAQQ,GACVA,EAAQR,EACRK,EAAOV,GAEPS,EAAY,EAEdM,EAAUpB,CAAC,EAAIkB,EACfL,EAAQb,CAAC,EAAIc,EACbU,GAAM,EAAER,CAAG,EAAIE,EAAQ,EAAIH,EAAOR,EAQtC,IALAR,EAAIE,EAAI,EACRD,EAAIE,EAAI,EACRc,EAAMjB,EAAIG,EAAIF,EACdW,EAAY,GACZlC,EAAU,CAAC,EACJkC,GAAaZ,GAAK,GAAKC,GAAK,GACjC,OAAQwB,GAAMR,CAAG,EAAG,CAClB,KAAKR,EACHT,IACAiB,GAAOd,EACP,MACF,KAAKI,EACHN,IACAgB,IACA,MACF,KAAKX,EACH5B,EAAQ,KAAKsB,EAAIK,CAAM,EACvBJ,IACAD,IACAiB,GAAOd,EAAI,EACX,MACF,QACES,EAAY,EAChB,CAEF,OAAAlC,EAAQ,QAAQ,EACTA,CACT,CAEF,GAAG,KAAKhB,EAAI,ICtNZ,IAAAgE,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAAC,UAAW,CACV,IAAIC,EAAOC,EAAsBC,EAAQC,EAASC,EAAcC,EAAYC,EAAoBC,EAEhGL,EAAS,KAETC,EAAU,KAEVI,EAAS,KAETF,EAAa,KAEbL,EAAQ,KAERM,EAAqB,KAErBL,GAAwB,OAAO,SAAY,aAAe,UAAY,KAAO,QAAQ,SAAW,UAAY,QAAU,KAAO,IAE7HF,GAAO,QAAU,CACf,OAAQ,SAASS,EAAYC,EAAOC,EAAS,CAI3C,OAHIA,GAAW,OACbA,EAAU,CAAC,GAEND,GAAS,MAAOA,EAAM,SAAqBD,GAAc,MAAOA,EAAW,SAGlFE,EAAUN,EAAaM,EAASD,CAAK,EAC9BP,EAAOM,EAAYC,EAAOC,CAAO,GAH/B,CAAC,CAIZ,EACA,MAAO,SAASC,EAAQF,EAAOC,EAAS,CAItC,OAHIA,GAAW,OACbA,EAAU,CAAC,GAENC,GAAU,MAAOA,EAAO,SAAqBF,GAAS,MAAOA,EAAM,SAG1EC,EAAUN,EAAaM,EAASD,CAAK,EACjCC,EAAQ,eACHL,EAAW,MAAMM,EAAQF,EAAOC,CAAO,EAEvCH,EAAO,MAAMI,EAAQF,EAAOC,CAAO,GANnC,CAQX,EACA,MAAO,SAASC,EAAQF,EAAOC,EAAS,CACtC,IAAIE,EAAIC,EAAMC,EAId,OAHIJ,GAAW,OACbA,EAAU,CAAC,GAERC,EAGAF,EAGDE,IAAWF,EACL,UAAW,CACjBK,EAAW,CAAC,EACZ,QAASF,EAAK,EAAGC,EAAOF,EAAO,OAAQ,GAAKE,EAAOD,EAAKC,EAAOD,EAAKC,EAAM,GAAKA,EAAOD,IAAOA,IAAOE,EAAS,KAAKF,CAAE,EACpH,OAAOE,CACT,EAAG,MAAM,IAAI,GAEfJ,EAAUN,EAAaM,EAASD,CAAK,EAC9BN,EAAQ,MAAMQ,EAAQF,EAAOC,CAAO,GAVlC,CAAC,EAHD,CAAC,CAcZ,EACA,KAAM,SAASC,EAAQF,EAAOC,EAAS,CAIrC,OAHIA,GAAW,OACbA,EAAU,CAAC,GAERC,EAGAF,GAGLC,EAAUN,EAAaM,EAASD,CAAK,EAC9BN,EAAQ,KAAKQ,EAAQF,EAAOC,CAAO,GAHjC,CAAC,EAHD,CAAC,CAOZ,EACA,aAAc,SAASD,EAAOC,EAAS,CACrC,OAAIA,GAAW,OACbA,EAAU,CAAC,GAEbA,EAAUN,EAAaM,EAASD,CAAK,EAC9BC,EAAQ,aACjB,CACF,EAEAN,EAAe,SAASM,EAASD,EAAO,CACtC,OAAIC,EAAQ,aAAe,OACzBA,EAAQ,YAAc,IAEpBA,EAAQ,gBAAkB,OAC5BA,EAAQ,eAAiB,IAEvBA,EAAQ,mBAAqB,OAC/BA,EAAQ,kBAAoB,IAE1BA,EAAQ,eAAiB,OAC3BA,EAAQ,cAAgBT,GAEtBS,EAAQ,cAAgB,OAC1BA,EAAQ,aAAe,MAErBA,EAAQ,MAAQ,OAClBA,EAAQ,KAAO,MAEbA,EAAQ,eAAiB,OAC3BA,EAAQ,cAAgBJ,GAAsBA,EAAmB,QAAUG,EAAQH,EAAsBA,EAAqB,IAAIN,EAAMS,EAAOC,CAAO,GAEjJA,CACT,CAEF,GAAG,KAAKZ,EAAI,IC9GZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gFAgBA,IAAIiB,GAAgB,SAASC,EAAGC,EAAG,CAC/B,OAAAF,GAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUC,EAAGC,EAAG,CAAED,EAAE,UAAYC,CAAG,GAC1E,SAAUD,EAAGC,EAAG,CAAE,QAASC,KAAKD,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGC,CAAC,IAAGF,EAAEE,CAAC,EAAID,EAAEC,CAAC,EAAG,EAC7FH,GAAcC,EAAGC,CAAC,CAC7B,EAEO,SAASE,EAAUH,EAAGC,EAAG,CAC5B,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5FF,GAAcC,EAAGC,CAAC,EAClB,SAASG,GAAK,CAAE,KAAK,YAAcJ,CAAG,CACtCA,EAAE,UAAYC,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKG,EAAG,UAAYH,EAAE,UAAW,IAAIG,EACnF,CAwCO,SAASC,GAAUC,EAASC,EAAYC,EAAGC,EAAW,CACzD,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,CAEO,SAASY,GAAYb,EAASc,EAAM,CACvC,IAAIC,EAAI,CAAE,MAAO,EAAG,KAAM,UAAW,CAAE,GAAIC,EAAE,CAAC,EAAI,EAAG,MAAMA,EAAE,CAAC,EAAG,OAAOA,EAAE,CAAC,CAAG,EAAG,KAAM,CAAC,EAAG,IAAK,CAAC,CAAE,EAAGC,EAAGC,EAAGF,EAAGG,EAC/G,OAAOA,EAAI,CAAE,KAAMC,EAAK,CAAC,EAAG,MAASA,EAAK,CAAC,EAAG,OAAUA,EAAK,CAAC,CAAE,EAAG,OAAO,QAAW,aAAeD,EAAE,OAAO,QAAQ,EAAI,UAAW,CAAE,OAAO,IAAM,GAAIA,EACvJ,SAASC,EAAKC,EAAG,CAAE,OAAO,SAAUC,EAAG,CAAE,OAAOb,EAAK,CAACY,EAAGC,CAAC,CAAC,CAAG,CAAG,CACjE,SAASb,EAAKc,EAAI,CACd,GAAIN,EAAG,MAAM,IAAI,UAAU,iCAAiC,EAC5D,KAAOF,GAAG,GAAI,CACV,GAAIE,EAAI,EAAGC,IAAMF,EAAIO,EAAG,CAAC,EAAI,EAAIL,EAAE,OAAYK,EAAG,CAAC,EAAIL,EAAE,SAAcF,EAAIE,EAAE,SAAcF,EAAE,KAAKE,CAAC,EAAG,GAAKA,EAAE,OAAS,EAAEF,EAAIA,EAAE,KAAKE,EAAGK,EAAG,CAAC,CAAC,GAAG,KAAM,OAAOP,EAE3J,OADIE,EAAI,EAAGF,IAAGO,EAAK,CAACA,EAAG,CAAC,EAAI,EAAGP,EAAE,KAAK,GAC9BO,EAAG,CAAC,EAAG,CACX,IAAK,GAAG,IAAK,GAAGP,EAAIO,EAAI,MACxB,IAAK,GAAG,OAAAR,EAAE,QAAgB,CAAE,MAAOQ,EAAG,CAAC,EAAG,KAAM,EAAM,EACtD,IAAK,GAAGR,EAAE,QAASG,EAAIK,EAAG,CAAC,EAAGA,EAAK,CAAC,CAAC,EAAG,SACxC,IAAK,GAAGA,EAAKR,EAAE,IAAI,IAAI,EAAGA,EAAE,KAAK,IAAI,EAAG,SACxC,QACI,GAAMC,EAAID,EAAE,KAAM,EAAAC,EAAIA,EAAE,OAAS,GAAKA,EAAEA,EAAE,OAAS,CAAC,KAAOO,EAAG,CAAC,IAAM,GAAKA,EAAG,CAAC,IAAM,GAAI,CAAER,EAAI,EAAG,QAAU,CAC3G,GAAIQ,EAAG,CAAC,IAAM,IAAM,CAACP,GAAMO,EAAG,CAAC,EAAIP,EAAE,CAAC,GAAKO,EAAG,CAAC,EAAIP,EAAE,CAAC,GAAK,CAAED,EAAE,MAAQQ,EAAG,CAAC,EAAG,KAAO,CACrF,GAAIA,EAAG,CAAC,IAAM,GAAKR,EAAE,MAAQC,EAAE,CAAC,EAAG,CAAED,EAAE,MAAQC,EAAE,CAAC,EAAGA,EAAIO,EAAI,KAAO,CACpE,GAAIP,GAAKD,EAAE,MAAQC,EAAE,CAAC,EAAG,CAAED,EAAE,MAAQC,EAAE,CAAC,EAAGD,EAAE,IAAI,KAAKQ,CAAE,EAAG,KAAO,CAC9DP,EAAE,CAAC,GAAGD,EAAE,IAAI,IAAI,EACpBA,EAAE,KAAK,IAAI,EAAG,QACtB,CACAQ,EAAKT,EAAK,KAAKd,EAASe,CAAC,CAC7B,OAASL,EAAG,CAAEa,EAAK,CAAC,EAAGb,CAAC,EAAGQ,EAAI,CAAG,QAAE,CAAUD,EAAID,EAAI,CAAG,CACzD,GAAIO,EAAG,CAAC,EAAI,EAAG,MAAMA,EAAG,CAAC,EAAG,MAAO,CAAE,MAAOA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAI,OAAQ,KAAM,EAAK,CACnF,CACJ,CAcO,SAASC,EAASC,EAAG,CACxB,IAAIC,EAAI,OAAO,QAAW,YAAc,OAAO,SAAUC,EAAID,GAAKD,EAAEC,CAAC,EAAGE,EAAI,EAC5E,GAAID,EAAG,OAAOA,EAAE,KAAKF,CAAC,EACtB,GAAIA,GAAK,OAAOA,EAAE,QAAW,SAAU,MAAO,CAC1C,KAAM,UAAY,CACd,OAAIA,GAAKG,GAAKH,EAAE,SAAQA,EAAI,QACrB,CAAE,MAAOA,GAAKA,EAAEG,GAAG,EAAG,KAAM,CAACH,CAAE,CAC1C,CACJ,EACA,MAAM,IAAI,UAAUC,EAAI,0BAA4B,iCAAiC,CACzF,CAEO,SAASG,EAAOJ,EAAGK,EAAG,CACzB,IAAIH,EAAI,OAAO,QAAW,YAAcF,EAAE,OAAO,QAAQ,EACzD,GAAI,CAACE,EAAG,OAAOF,EACf,IAAIG,EAAID,EAAE,KAAKF,CAAC,EAAGM,EAAGC,EAAK,CAAC,EAAGC,EAC/B,GAAI,CACA,MAAQH,IAAM,QAAUA,KAAM,IAAM,EAAEC,EAAIH,EAAE,KAAK,GAAG,MAAMI,EAAG,KAAKD,EAAE,KAAK,CAC7E,OACOG,EAAO,CAAED,EAAI,CAAE,MAAOC,CAAM,CAAG,QACtC,CACI,GAAI,CACIH,GAAK,CAACA,EAAE,OAASJ,EAAIC,EAAE,SAAYD,EAAE,KAAKC,CAAC,CACnD,QACA,CAAU,GAAIK,EAAG,MAAMA,EAAE,KAAO,CACpC,CACA,OAAOD,CACX,CAkBO,SAASG,EAAcC,EAAIC,EAAMC,EAAM,CAC1C,GAAIA,GAAQ,UAAU,SAAW,EAAG,QAASC,EAAI,EAAGC,EAAIH,EAAK,OAAQI,EAAIF,EAAIC,EAAGD,KACxEE,GAAM,EAAEF,KAAKF,MACRI,IAAIA,EAAK,MAAM,UAAU,MAAM,KAAKJ,EAAM,EAAGE,CAAC,GACnDE,EAAGF,CAAC,EAAIF,EAAKE,CAAC,GAGtB,OAAOH,EAAG,OAAOK,GAAM,MAAM,UAAU,MAAM,KAAKJ,CAAI,CAAC,CAC3D,CAEO,SAASK,GAAQC,EAAG,CACvB,OAAO,gBAAgBD,IAAW,KAAK,EAAIC,EAAG,MAAQ,IAAID,GAAQC,CAAC,CACvE,CAEO,SAASC,GAAiBC,EAASC,EAAYC,EAAW,CAC7D,GAAI,CAAC,OAAO,cAAe,MAAM,IAAI,UAAU,sCAAsC,EACrF,IAAIC,EAAID,EAAU,MAAMF,EAASC,GAAc,CAAC,CAAC,EAAGP,EAAGU,EAAI,CAAC,EAC5D,OAAOV,EAAI,CAAC,EAAGW,EAAK,MAAM,EAAGA,EAAK,OAAO,EAAGA,EAAK,QAAQ,EAAGX,EAAE,OAAO,aAAa,EAAI,UAAY,CAAE,OAAO,IAAM,EAAGA,EACpH,SAASW,EAAKC,EAAG,CAAMH,EAAEG,CAAC,IAAGZ,EAAEY,CAAC,EAAI,SAAU,EAAG,CAAE,OAAO,IAAI,QAAQ,SAAUC,EAAGC,EAAG,CAAEJ,EAAE,KAAK,CAACE,EAAG,EAAGC,EAAGC,CAAC,CAAC,EAAI,GAAKC,EAAOH,EAAG,CAAC,CAAG,CAAC,CAAG,EAAG,CACzI,SAASG,EAAOH,EAAG,EAAG,CAAE,GAAI,CAAEI,EAAKP,EAAEG,CAAC,EAAE,CAAC,CAAC,CAAG,OAASK,EAAG,CAAEC,EAAOR,EAAE,CAAC,EAAE,CAAC,EAAGO,CAAC,CAAG,CAAE,CACjF,SAASD,EAAKG,EAAG,CAAEA,EAAE,iBAAiBhB,GAAU,QAAQ,QAAQgB,EAAE,MAAM,CAAC,EAAE,KAAKC,EAASC,CAAM,EAAIH,EAAOR,EAAE,CAAC,EAAE,CAAC,EAAGS,CAAC,CAAG,CACvH,SAASC,EAAQE,EAAO,CAAEP,EAAO,OAAQO,CAAK,CAAG,CACjD,SAASD,EAAOC,EAAO,CAAEP,EAAO,QAASO,CAAK,CAAG,CACjD,SAASJ,EAAOK,EAAG,EAAG,CAAMA,EAAE,CAAC,EAAGb,EAAE,MAAM,EAAGA,EAAE,QAAQK,EAAOL,EAAE,CAAC,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAE,CAAC,CAAC,CAAG,CACrF,CAQO,SAASc,GAAcC,EAAG,CAC7B,GAAI,CAAC,OAAO,cAAe,MAAM,IAAI,UAAU,sCAAsC,EACrF,IAAIC,EAAID,EAAE,OAAO,aAAa,EAAGE,EACjC,OAAOD,EAAIA,EAAE,KAAKD,CAAC,GAAKA,EAAI,OAAOG,GAAa,WAAaA,EAASH,CAAC,EAAIA,EAAE,OAAO,QAAQ,EAAE,EAAGE,EAAI,CAAC,EAAGE,EAAK,MAAM,EAAGA,EAAK,OAAO,EAAGA,EAAK,QAAQ,EAAGF,EAAE,OAAO,aAAa,EAAI,UAAY,CAAE,OAAO,IAAM,EAAGA,GAC9M,SAASE,EAAKC,EAAG,CAAEH,EAAEG,CAAC,EAAIL,EAAEK,CAAC,GAAK,SAAUC,EAAG,CAAE,OAAO,IAAI,QAAQ,SAAUC,EAASC,EAAQ,CAAEF,EAAIN,EAAEK,CAAC,EAAEC,CAAC,EAAGG,EAAOF,EAASC,EAAQF,EAAE,KAAMA,EAAE,KAAK,CAAG,CAAC,CAAG,CAAG,CAC/J,SAASG,EAAOF,EAASC,EAAQE,EAAGJ,EAAG,CAAE,QAAQ,QAAQA,CAAC,EAAE,KAAK,SAASA,EAAG,CAAEC,EAAQ,CAAE,MAAOD,EAAG,KAAMI,CAAE,CAAC,CAAG,EAAGF,CAAM,CAAG,CAC/H,CCtMM,SAAUG,EAAWC,EAAU,CACnC,OAAO,OAAOA,GAAU,UAC1B,CCGM,SAAUC,GAAoBC,EAAgC,CAClE,IAAMC,EAAS,SAACC,EAAa,CAC3B,MAAM,KAAKA,CAAQ,EACnBA,EAAS,MAAQ,IAAI,MAAK,EAAG,KAC/B,EAEMC,EAAWH,EAAWC,CAAM,EAClC,OAAAE,EAAS,UAAY,OAAO,OAAO,MAAM,SAAS,EAClDA,EAAS,UAAU,YAAcA,EAC1BA,CACT,CCDO,IAAMC,GAA+CC,GAC1D,SAACC,EAAM,CACL,OAAA,SAA4CC,EAA0B,CACpED,EAAO,IAAI,EACX,KAAK,QAAUC,EACRA,EAAO,OAAM;EACxBA,EAAO,IAAI,SAACC,EAAKC,EAAC,CAAK,OAAGA,EAAI,EAAC,KAAKD,EAAI,SAAQ,CAAzB,CAA6B,EAAE,KAAK;GAAM,EACzD,GACJ,KAAK,KAAO,sBACZ,KAAK,OAASD,CAChB,CARA,CAQC,ECvBC,SAAUG,GAAaC,EAA6BC,EAAO,CAC/D,GAAID,EAAK,CACP,IAAME,EAAQF,EAAI,QAAQC,CAAI,EAC9B,GAAKC,GAASF,EAAI,OAAOE,EAAO,CAAC,EAErC,CCOA,IAAAC,GAAA,UAAA,CAyBE,SAAAA,EAAoBC,EAA4B,CAA5B,KAAA,gBAAAA,EAdb,KAAA,OAAS,GAER,KAAA,WAAmD,KAMnD,KAAA,YAAqD,IAMV,CAQnD,OAAAD,EAAA,UAAA,YAAA,UAAA,aACME,EAEJ,GAAI,CAAC,KAAK,OAAQ,CAChB,KAAK,OAAS,GAGN,IAAAC,EAAe,KAAI,WAC3B,GAAIA,EAEF,GADA,KAAK,WAAa,KACd,MAAM,QAAQA,CAAU,MAC1B,QAAqBC,EAAAC,EAAAF,CAAU,EAAAG,EAAAF,EAAA,KAAA,EAAA,CAAAE,EAAA,KAAAA,EAAAF,EAAA,KAAA,EAAE,CAA5B,IAAMG,EAAMD,EAAA,MACfC,EAAO,OAAO,IAAI,yGAGpBJ,EAAW,OAAO,IAAI,EAIlB,IAAiBK,EAAqB,KAAI,gBAClD,GAAIC,EAAWD,CAAgB,EAC7B,GAAI,CACFA,EAAgB,QACTE,EAAG,CACVR,EAASQ,aAAaC,GAAsBD,EAAE,OAAS,CAACA,CAAC,EAIrD,IAAAE,EAAgB,KAAI,YAC5B,GAAIA,EAAa,CACf,KAAK,YAAc,SACnB,QAAwBC,EAAAR,EAAAO,CAAW,EAAAE,EAAAD,EAAA,KAAA,EAAA,CAAAC,EAAA,KAAAA,EAAAD,EAAA,KAAA,EAAE,CAAhC,IAAME,EAASD,EAAA,MAClB,GAAI,CACFE,GAAcD,CAAS,QAChBE,EAAK,CACZf,EAASA,GAAM,KAANA,EAAU,CAAA,EACfe,aAAeN,GACjBT,EAAMgB,EAAAA,EAAA,CAAA,EAAAC,EAAOjB,CAAM,CAAA,EAAAiB,EAAKF,EAAI,MAAM,CAAA,EAElCf,EAAO,KAAKe,CAAG,sGAMvB,GAAIf,EACF,MAAM,IAAIS,GAAoBT,CAAM,EAG1C,EAoBAF,EAAA,UAAA,IAAA,SAAIoB,EAAuB,OAGzB,GAAIA,GAAYA,IAAa,KAC3B,GAAI,KAAK,OAGPJ,GAAcI,CAAQ,MACjB,CACL,GAAIA,aAAoBpB,EAAc,CAGpC,GAAIoB,EAAS,QAAUA,EAAS,WAAW,IAAI,EAC7C,OAEFA,EAAS,WAAW,IAAI,GAEzB,KAAK,aAAcC,EAAA,KAAK,eAAW,MAAAA,IAAA,OAAAA,EAAI,CAAA,GAAI,KAAKD,CAAQ,EAG/D,EAOQpB,EAAA,UAAA,WAAR,SAAmBsB,EAAoB,CAC7B,IAAAnB,EAAe,KAAI,WAC3B,OAAOA,IAAemB,GAAW,MAAM,QAAQnB,CAAU,GAAKA,EAAW,SAASmB,CAAM,CAC1F,EASQtB,EAAA,UAAA,WAAR,SAAmBsB,EAAoB,CAC7B,IAAAnB,EAAe,KAAI,WAC3B,KAAK,WAAa,MAAM,QAAQA,CAAU,GAAKA,EAAW,KAAKmB,CAAM,EAAGnB,GAAcA,EAAa,CAACA,EAAYmB,CAAM,EAAIA,CAC5H,EAMQtB,EAAA,UAAA,cAAR,SAAsBsB,EAAoB,CAChC,IAAAnB,EAAe,KAAI,WACvBA,IAAemB,EACjB,KAAK,WAAa,KACT,MAAM,QAAQnB,CAAU,GACjCoB,GAAUpB,EAAYmB,CAAM,CAEhC,EAgBAtB,EAAA,UAAA,OAAA,SAAOoB,EAAsC,CACnC,IAAAR,EAAgB,KAAI,YAC5BA,GAAeW,GAAUX,EAAaQ,CAAQ,EAE1CA,aAAoBpB,GACtBoB,EAAS,cAAc,IAAI,CAE/B,EAlLcpB,EAAA,MAAS,UAAA,CACrB,IAAMwB,EAAQ,IAAIxB,EAClB,OAAAwB,EAAM,OAAS,GACRA,CACT,EAAE,EA+KJxB,GArLA,EAuLO,IAAMyB,GAAqBC,GAAa,MAEzC,SAAUC,GAAeC,EAAU,CACvC,OACEA,aAAiBF,IAChBE,GAAS,WAAYA,GAASC,EAAWD,EAAM,MAAM,GAAKC,EAAWD,EAAM,GAAG,GAAKC,EAAWD,EAAM,WAAW,CAEpH,CAEA,SAASE,GAAcC,EAAwC,CACzDF,EAAWE,CAAS,EACtBA,EAAS,EAETA,EAAU,YAAW,CAEzB,CChNO,IAAMC,GAAuB,CAClC,iBAAkB,KAClB,sBAAuB,KACvB,QAAS,OACT,sCAAuC,GACvC,yBAA0B,ICGrB,IAAMC,GAAmC,CAG9C,WAAA,SAAWC,EAAqBC,EAAgB,SAAEC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,EAAA,CAAA,EAAA,UAAAA,CAAA,EACxC,IAAAC,EAAaL,GAAe,SACpC,OAAIK,GAAQ,MAARA,EAAU,WACLA,EAAS,WAAU,MAAnBA,EAAQC,EAAA,CAAYL,EAASC,CAAO,EAAAK,EAAKJ,CAAI,CAAA,CAAA,EAE/C,WAAU,MAAA,OAAAG,EAAA,CAACL,EAASC,CAAO,EAAAK,EAAKJ,CAAI,CAAA,CAAA,CAC7C,EACA,aAAA,SAAaK,EAAM,CACT,IAAAH,EAAaL,GAAe,SACpC,QAAQK,GAAQ,KAAA,OAARA,EAAU,eAAgB,cAAcG,CAAa,CAC/D,EACA,SAAU,QCjBN,SAAUC,GAAqBC,EAAQ,CAC3CC,GAAgB,WAAW,UAAA,CACjB,IAAAC,EAAqBC,GAAM,iBACnC,GAAID,EAEFA,EAAiBF,CAAG,MAGpB,OAAMA,CAEV,CAAC,CACH,CCtBM,SAAUI,IAAI,CAAK,CCMlB,IAAMC,GAAyB,UAAA,CAAM,OAAAC,GAAmB,IAAK,OAAW,MAAS,CAA5C,EAAsE,EAO5G,SAAUC,GAAkBC,EAAU,CAC1C,OAAOF,GAAmB,IAAK,OAAWE,CAAK,CACjD,CAOM,SAAUC,GAAoBC,EAAQ,CAC1C,OAAOJ,GAAmB,IAAKI,EAAO,MAAS,CACjD,CAQM,SAAUJ,GAAmBK,EAAuBD,EAAYF,EAAU,CAC9E,MAAO,CACL,KAAIG,EACJ,MAAKD,EACL,MAAKF,EAET,CCrCA,IAAII,GAAuD,KASrD,SAAUC,GAAaC,EAAc,CACzC,GAAIC,GAAO,sCAAuC,CAChD,IAAMC,EAAS,CAACJ,GAKhB,GAJII,IACFJ,GAAU,CAAE,YAAa,GAAO,MAAO,IAAI,GAE7CE,EAAE,EACEE,EAAQ,CACJ,IAAAC,EAAyBL,GAAvBM,EAAWD,EAAA,YAAEE,EAAKF,EAAA,MAE1B,GADAL,GAAU,KACNM,EACF,MAAMC,QAMVL,EAAE,CAEN,CAMM,SAAUM,GAAaC,EAAQ,CAC/BN,GAAO,uCAAyCH,KAClDA,GAAQ,YAAc,GACtBA,GAAQ,MAAQS,EAEpB,CCrBA,IAAAC,GAAA,SAAAC,EAAA,CAAmCC,EAAAF,EAAAC,CAAA,EA6BjC,SAAAD,EAAYG,EAA6C,CAAzD,IAAAC,EACEH,EAAA,KAAA,IAAA,GAAO,KATC,OAAAG,EAAA,UAAqB,GAUzBD,GACFC,EAAK,YAAcD,EAGfE,GAAeF,CAAW,GAC5BA,EAAY,IAAIC,CAAI,GAGtBA,EAAK,YAAcE,IAEvB,CAzBO,OAAAN,EAAA,OAAP,SAAiBO,EAAwBC,EAA2BC,EAAqB,CACvF,OAAO,IAAIC,GAAeH,EAAMC,EAAOC,CAAQ,CACjD,EAgCAT,EAAA,UAAA,KAAA,SAAKW,EAAS,CACR,KAAK,UACPC,GAA0BC,GAAiBF,CAAK,EAAG,IAAI,EAEvD,KAAK,MAAMA,CAAM,CAErB,EASAX,EAAA,UAAA,MAAA,SAAMc,EAAS,CACT,KAAK,UACPF,GAA0BG,GAAkBD,CAAG,EAAG,IAAI,GAEtD,KAAK,UAAY,GACjB,KAAK,OAAOA,CAAG,EAEnB,EAQAd,EAAA,UAAA,SAAA,UAAA,CACM,KAAK,UACPY,GAA0BI,GAAuB,IAAI,GAErD,KAAK,UAAY,GACjB,KAAK,UAAS,EAElB,EAEAhB,EAAA,UAAA,YAAA,UAAA,CACO,KAAK,SACR,KAAK,UAAY,GACjBC,EAAA,UAAM,YAAW,KAAA,IAAA,EACjB,KAAK,YAAc,KAEvB,EAEUD,EAAA,UAAA,MAAV,SAAgBW,EAAQ,CACtB,KAAK,YAAY,KAAKA,CAAK,CAC7B,EAEUX,EAAA,UAAA,OAAV,SAAiBc,EAAQ,CACvB,GAAI,CACF,KAAK,YAAY,MAAMA,CAAG,UAE1B,KAAK,YAAW,EAEpB,EAEUd,EAAA,UAAA,UAAV,UAAA,CACE,GAAI,CACF,KAAK,YAAY,SAAQ,UAEzB,KAAK,YAAW,EAEpB,EACFA,CAAA,EApHmCiB,EAAY,EA2H/C,IAAMC,GAAQ,SAAS,UAAU,KAEjC,SAASC,GAAyCC,EAAQC,EAAY,CACpE,OAAOH,GAAM,KAAKE,EAAIC,CAAO,CAC/B,CAMA,IAAAC,GAAA,UAAA,CACE,SAAAA,EAAoBC,EAAqC,CAArC,KAAA,gBAAAA,CAAwC,CAE5D,OAAAD,EAAA,UAAA,KAAA,SAAKE,EAAQ,CACH,IAAAD,EAAoB,KAAI,gBAChC,GAAIA,EAAgB,KAClB,GAAI,CACFA,EAAgB,KAAKC,CAAK,QACnBC,EAAO,CACdC,GAAqBD,CAAK,EAGhC,EAEAH,EAAA,UAAA,MAAA,SAAMK,EAAQ,CACJ,IAAAJ,EAAoB,KAAI,gBAChC,GAAIA,EAAgB,MAClB,GAAI,CACFA,EAAgB,MAAMI,CAAG,QAClBF,EAAO,CACdC,GAAqBD,CAAK,OAG5BC,GAAqBC,CAAG,CAE5B,EAEAL,EAAA,UAAA,SAAA,UAAA,CACU,IAAAC,EAAoB,KAAI,gBAChC,GAAIA,EAAgB,SAClB,GAAI,CACFA,EAAgB,SAAQ,QACjBE,EAAO,CACdC,GAAqBD,CAAK,EAGhC,EACFH,CAAA,EArCA,EAuCAM,GAAA,SAAAC,EAAA,CAAuCC,EAAAF,EAAAC,CAAA,EACrC,SAAAD,EACEG,EACAN,EACAO,EAA8B,CAHhC,IAAAC,EAKEJ,EAAA,KAAA,IAAA,GAAO,KAEHN,EACJ,GAAIW,EAAWH,CAAc,GAAK,CAACA,EAGjCR,EAAkB,CAChB,KAAOQ,GAAc,KAAdA,EAAkB,OACzB,MAAON,GAAK,KAALA,EAAS,OAChB,SAAUO,GAAQ,KAARA,EAAY,YAEnB,CAEL,IAAIG,EACAF,GAAQG,GAAO,0BAIjBD,EAAU,OAAO,OAAOJ,CAAc,EACtCI,EAAQ,YAAc,UAAA,CAAM,OAAAF,EAAK,YAAW,CAAhB,EAC5BV,EAAkB,CAChB,KAAMQ,EAAe,MAAQZ,GAAKY,EAAe,KAAMI,CAAO,EAC9D,MAAOJ,EAAe,OAASZ,GAAKY,EAAe,MAAOI,CAAO,EACjE,SAAUJ,EAAe,UAAYZ,GAAKY,EAAe,SAAUI,CAAO,IAI5EZ,EAAkBQ,EAMtB,OAAAE,EAAK,YAAc,IAAIX,GAAiBC,CAAe,GACzD,CACF,OAAAK,CAAA,EAzCuCS,EAAU,EA2CjD,SAASC,GAAqBC,EAAU,CAClCC,GAAO,sCACTC,GAAaF,CAAK,EAIlBG,GAAqBH,CAAK,CAE9B,CAQA,SAASI,GAAoBC,EAAQ,CACnC,MAAMA,CACR,CAOA,SAASC,GAA0BC,EAA2CC,EAA2B,CAC/F,IAAAC,EAA0BR,GAAM,sBACxCQ,GAAyBC,GAAgB,WAAW,UAAA,CAAM,OAAAD,EAAsBF,EAAcC,CAAU,CAA9C,CAA+C,CAC3G,CAOO,IAAMG,GAA6D,CACxE,OAAQ,GACR,KAAMC,GACN,MAAOR,GACP,SAAUQ,IC5QL,IAAMC,GAA+B,UAAA,CAAM,OAAC,OAAO,QAAW,YAAc,OAAO,YAAe,cAAvD,EAAsE,ECoClH,SAAUC,EAAYC,EAAI,CAC9B,OAAOA,CACT,CCsCM,SAAUC,GAAoBC,EAA+B,CACjE,OAAIA,EAAI,SAAW,EACVC,EAGLD,EAAI,SAAW,EACVA,EAAI,CAAC,EAGP,SAAeE,EAAQ,CAC5B,OAAOF,EAAI,OAAO,SAACG,EAAWC,EAAuB,CAAK,OAAAA,EAAGD,CAAI,CAAP,EAAUD,CAAY,CAClF,CACF,CC9EA,IAAAG,EAAA,UAAA,CAkBE,SAAAA,EAAYC,EAA6E,CACnFA,IACF,KAAK,WAAaA,EAEtB,CA4BA,OAAAD,EAAA,UAAA,KAAA,SAAQE,EAAyB,CAC/B,IAAMC,EAAa,IAAIH,EACvB,OAAAG,EAAW,OAAS,KACpBA,EAAW,SAAWD,EACfC,CACT,EA6IAH,EAAA,UAAA,UAAA,SACEI,EACAC,EACAC,EAA8B,CAHhC,IAAAC,EAAA,KAKQC,EAAaC,GAAaL,CAAc,EAAIA,EAAiB,IAAIM,GAAeN,EAAgBC,EAAOC,CAAQ,EAErH,OAAAK,GAAa,UAAA,CACL,IAAAC,EAAuBL,EAArBL,EAAQU,EAAA,SAAEC,EAAMD,EAAA,OACxBJ,EAAW,IACTN,EAGIA,EAAS,KAAKM,EAAYK,CAAM,EAChCA,EAIAN,EAAK,WAAWC,CAAU,EAG1BD,EAAK,cAAcC,CAAU,CAAC,CAEtC,CAAC,EAEMA,CACT,EAGUR,EAAA,UAAA,cAAV,SAAwBc,EAAmB,CACzC,GAAI,CACF,OAAO,KAAK,WAAWA,CAAI,QACpBC,EAAK,CAIZD,EAAK,MAAMC,CAAG,EAElB,EA6DAf,EAAA,UAAA,QAAA,SAAQgB,EAA0BC,EAAoC,CAAtE,IAAAV,EAAA,KACE,OAAAU,EAAcC,GAAeD,CAAW,EAEjC,IAAIA,EAAkB,SAACE,EAASC,EAAM,CAC3C,IAAMZ,EAAa,IAAIE,GAAkB,CACvC,KAAM,SAACW,EAAK,CACV,GAAI,CACFL,EAAKK,CAAK,QACHN,EAAK,CACZK,EAAOL,CAAG,EACVP,EAAW,YAAW,EAE1B,EACA,MAAOY,EACP,SAAUD,EACX,EACDZ,EAAK,UAAUC,CAAU,CAC3B,CAAC,CACH,EAGUR,EAAA,UAAA,WAAV,SAAqBQ,EAA2B,OAC9C,OAAOI,EAAA,KAAK,UAAM,MAAAA,IAAA,OAAA,OAAAA,EAAE,UAAUJ,CAAU,CAC1C,EAOAR,EAAA,UAACG,EAAiB,EAAlB,UAAA,CACE,OAAO,IACT,EA4FAH,EAAA,UAAA,KAAA,UAAA,SAAKsB,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACH,OAAOC,GAAcF,CAAU,EAAE,IAAI,CACvC,EA6BAtB,EAAA,UAAA,UAAA,SAAUiB,EAAoC,CAA9C,IAAAV,EAAA,KACE,OAAAU,EAAcC,GAAeD,CAAW,EAEjC,IAAIA,EAAY,SAACE,EAASC,EAAM,CACrC,IAAIC,EACJd,EAAK,UACH,SAACkB,EAAI,CAAK,OAACJ,EAAQI,CAAT,EACV,SAACV,EAAQ,CAAK,OAAAK,EAAOL,CAAG,CAAV,EACd,UAAA,CAAM,OAAAI,EAAQE,CAAK,CAAb,CAAc,CAExB,CAAC,CACH,EA1aOrB,EAAA,OAAkC,SAAIC,EAAwD,CACnG,OAAO,IAAID,EAAcC,CAAS,CACpC,EAyaFD,GA9cA,EAudA,SAAS0B,GAAeC,EAA+C,OACrE,OAAOC,EAAAD,GAAW,KAAXA,EAAeE,GAAO,WAAO,MAAAD,IAAA,OAAAA,EAAI,OAC1C,CAEA,SAASE,GAAcC,EAAU,CAC/B,OAAOA,GAASC,EAAWD,EAAM,IAAI,GAAKC,EAAWD,EAAM,KAAK,GAAKC,EAAWD,EAAM,QAAQ,CAChG,CAEA,SAASE,GAAgBF,EAAU,CACjC,OAAQA,GAASA,aAAiBG,IAAgBJ,GAAWC,CAAK,GAAKI,GAAeJ,CAAK,CAC7F,CCzeM,SAAUK,GAAQC,EAAW,CACjC,OAAOC,EAAWD,GAAM,KAAA,OAANA,EAAQ,IAAI,CAChC,CAMM,SAAUE,EACdC,EAAqF,CAErF,OAAO,SAACH,EAAqB,CAC3B,GAAID,GAAQC,CAAM,EAChB,OAAOA,EAAO,KAAK,SAA+BI,EAA2B,CAC3E,GAAI,CACF,OAAOD,EAAKC,EAAc,IAAI,QACvBC,EAAK,CACZ,KAAK,MAAMA,CAAG,EAElB,CAAC,EAEH,MAAM,IAAI,UAAU,wCAAwC,CAC9D,CACF,CCjBM,SAAUC,EACdC,EACAC,EACAC,EACAC,EACAC,EAAuB,CAEvB,OAAO,IAAIC,GAAmBL,EAAaC,EAAQC,EAAYC,EAASC,CAAU,CACpF,CAMA,IAAAC,GAAA,SAAAC,EAAA,CAA2CC,EAAAF,EAAAC,CAAA,EAiBzC,SAAAD,EACEL,EACAC,EACAC,EACAC,EACQC,EACAI,EAAiC,CAN3C,IAAAC,EAoBEH,EAAA,KAAA,KAAMN,CAAW,GAAC,KAfV,OAAAS,EAAA,WAAAL,EACAK,EAAA,kBAAAD,EAeRC,EAAK,MAAQR,EACT,SAAuCS,EAAQ,CAC7C,GAAI,CACFT,EAAOS,CAAK,QACLC,EAAK,CACZX,EAAY,MAAMW,CAAG,EAEzB,EACAL,EAAA,UAAM,MACVG,EAAK,OAASN,EACV,SAAuCQ,EAAQ,CAC7C,GAAI,CACFR,EAAQQ,CAAG,QACJA,EAAK,CAEZX,EAAY,MAAMW,CAAG,UAGrB,KAAK,YAAW,EAEpB,EACAL,EAAA,UAAM,OACVG,EAAK,UAAYP,EACb,UAAA,CACE,GAAI,CACFA,EAAU,QACHS,EAAK,CAEZX,EAAY,MAAMW,CAAG,UAGrB,KAAK,YAAW,EAEpB,EACAL,EAAA,UAAM,WACZ,CAEA,OAAAD,EAAA,UAAA,YAAA,UAAA,OACE,GAAI,CAAC,KAAK,mBAAqB,KAAK,kBAAiB,EAAI,CAC/C,IAAAO,EAAW,KAAI,OACvBN,EAAA,UAAM,YAAW,KAAA,IAAA,EAEjB,CAACM,KAAUC,EAAA,KAAK,cAAU,MAAAA,IAAA,QAAAA,EAAA,KAAf,IAAI,GAEnB,EACFR,CAAA,EAnF2CS,EAAU,ECd9C,IAAMC,GAAiD,CAG5D,SAAA,SAASC,EAAQ,CACf,IAAIC,EAAU,sBACVC,EAAkD,qBAC9CC,EAAaJ,GAAsB,SACvCI,IACFF,EAAUE,EAAS,sBACnBD,EAASC,EAAS,sBAEpB,IAAMC,EAASH,EAAQ,SAACI,EAAS,CAI/BH,EAAS,OACTF,EAASK,CAAS,CACpB,CAAC,EACD,OAAO,IAAIC,GAAa,UAAA,CAAM,OAAAJ,GAAM,KAAA,OAANA,EAASE,CAAM,CAAf,CAAgB,CAChD,EACA,sBAAqB,UAAA,SAACG,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACZ,IAAAL,EAAaJ,GAAsB,SAC3C,QAAQI,GAAQ,KAAA,OAARA,EAAU,wBAAyB,uBAAsB,MAAA,OAAAM,EAAA,CAAA,EAAAC,EAAIH,CAAI,CAAA,CAAA,CAC3E,EACA,qBAAoB,UAAA,SAACA,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACX,IAAAL,EAAaJ,GAAsB,SAC3C,QAAQI,GAAQ,KAAA,OAARA,EAAU,uBAAwB,sBAAqB,MAAA,OAAAM,EAAA,CAAA,EAAAC,EAAIH,CAAI,CAAA,CAAA,CACzE,EACA,SAAU,QCrBL,IAAMI,GAAuDC,GAClE,SAACC,EAAM,CACL,OAAA,UAAoC,CAClCA,EAAO,IAAI,EACX,KAAK,KAAO,0BACZ,KAAK,QAAU,qBACjB,CAJA,CAIC,ECXL,IAAAC,EAAA,SAAAC,EAAA,CAAgCC,EAAAF,EAAAC,CAAA,EAwB9B,SAAAD,GAAA,CAAA,IAAAG,EAEEF,EAAA,KAAA,IAAA,GAAO,KAzBT,OAAAE,EAAA,OAAS,GAEDA,EAAA,iBAAyC,KAGjDA,EAAA,UAA2B,CAAA,EAE3BA,EAAA,UAAY,GAEZA,EAAA,SAAW,GAEXA,EAAA,YAAmB,MAenB,CAGA,OAAAH,EAAA,UAAA,KAAA,SAAQI,EAAwB,CAC9B,IAAMC,EAAU,IAAIC,GAAiB,KAAM,IAAI,EAC/C,OAAAD,EAAQ,SAAWD,EACZC,CACT,EAGUL,EAAA,UAAA,eAAV,UAAA,CACE,GAAI,KAAK,OACP,MAAM,IAAIO,EAEd,EAEAP,EAAA,UAAA,KAAA,SAAKQ,EAAQ,CAAb,IAAAL,EAAA,KACEM,GAAa,UAAA,SAEX,GADAN,EAAK,eAAc,EACf,CAACA,EAAK,UAAW,CACdA,EAAK,mBACRA,EAAK,iBAAmB,MAAM,KAAKA,EAAK,SAAS,OAEnD,QAAuBO,EAAAC,EAAAR,EAAK,gBAAgB,EAAAS,EAAAF,EAAA,KAAA,EAAA,CAAAE,EAAA,KAAAA,EAAAF,EAAA,KAAA,EAAE,CAAzC,IAAMG,EAAQD,EAAA,MACjBC,EAAS,KAAKL,CAAK,qGAGzB,CAAC,CACH,EAEAR,EAAA,UAAA,MAAA,SAAMc,EAAQ,CAAd,IAAAX,EAAA,KACEM,GAAa,UAAA,CAEX,GADAN,EAAK,eAAc,EACf,CAACA,EAAK,UAAW,CACnBA,EAAK,SAAWA,EAAK,UAAY,GACjCA,EAAK,YAAcW,EAEnB,QADQC,EAAcZ,EAAI,UACnBY,EAAU,QACfA,EAAU,MAAK,EAAI,MAAMD,CAAG,EAGlC,CAAC,CACH,EAEAd,EAAA,UAAA,SAAA,UAAA,CAAA,IAAAG,EAAA,KACEM,GAAa,UAAA,CAEX,GADAN,EAAK,eAAc,EACf,CAACA,EAAK,UAAW,CACnBA,EAAK,UAAY,GAEjB,QADQY,EAAcZ,EAAI,UACnBY,EAAU,QACfA,EAAU,MAAK,EAAI,SAAQ,EAGjC,CAAC,CACH,EAEAf,EAAA,UAAA,YAAA,UAAA,CACE,KAAK,UAAY,KAAK,OAAS,GAC/B,KAAK,UAAY,KAAK,iBAAmB,IAC3C,EAEA,OAAA,eAAIA,EAAA,UAAA,WAAQ,KAAZ,UAAA,OACE,QAAOgB,EAAA,KAAK,aAAS,MAAAA,IAAA,OAAA,OAAAA,EAAE,QAAS,CAClC,kCAGUhB,EAAA,UAAA,cAAV,SAAwBiB,EAAyB,CAC/C,YAAK,eAAc,EACZhB,EAAA,UAAM,cAAa,KAAA,KAACgB,CAAU,CACvC,EAGUjB,EAAA,UAAA,WAAV,SAAqBiB,EAAyB,CAC5C,YAAK,eAAc,EACnB,KAAK,wBAAwBA,CAAU,EAChC,KAAK,gBAAgBA,CAAU,CACxC,EAGUjB,EAAA,UAAA,gBAAV,SAA0BiB,EAA2B,CAArD,IAAAd,EAAA,KACQa,EAAqC,KAAnCE,EAAQF,EAAA,SAAEG,EAASH,EAAA,UAAED,EAASC,EAAA,UACtC,OAAIE,GAAYC,EACPC,IAET,KAAK,iBAAmB,KACxBL,EAAU,KAAKE,CAAU,EAClB,IAAII,GAAa,UAAA,CACtBlB,EAAK,iBAAmB,KACxBmB,GAAUP,EAAWE,CAAU,CACjC,CAAC,EACH,EAGUjB,EAAA,UAAA,wBAAV,SAAkCiB,EAA2B,CACrD,IAAAD,EAAuC,KAArCE,EAAQF,EAAA,SAAEO,EAAWP,EAAA,YAAEG,EAASH,EAAA,UACpCE,EACFD,EAAW,MAAMM,CAAW,EACnBJ,GACTF,EAAW,SAAQ,CAEvB,EAQAjB,EAAA,UAAA,aAAA,UAAA,CACE,IAAMwB,EAAkB,IAAIC,EAC5B,OAAAD,EAAW,OAAS,KACbA,CACT,EAxHOxB,EAAA,OAAkC,SAAI0B,EAA0BC,EAAqB,CAC1F,OAAO,IAAIrB,GAAoBoB,EAAaC,CAAM,CACpD,EAuHF3B,GA7IgCyB,CAAU,EAkJ1C,IAAAG,GAAA,SAAAC,EAAA,CAAyCC,EAAAF,EAAAC,CAAA,EACvC,SAAAD,EAESG,EACPC,EAAsB,CAHxB,IAAAC,EAKEJ,EAAA,KAAA,IAAA,GAAO,KAHA,OAAAI,EAAA,YAAAF,EAIPE,EAAK,OAASD,GAChB,CAEA,OAAAJ,EAAA,UAAA,KAAA,SAAKM,EAAQ,UACXC,GAAAC,EAAA,KAAK,eAAW,MAAAA,IAAA,OAAA,OAAAA,EAAE,QAAI,MAAAD,IAAA,QAAAA,EAAA,KAAAC,EAAGF,CAAK,CAChC,EAEAN,EAAA,UAAA,MAAA,SAAMS,EAAQ,UACZF,GAAAC,EAAA,KAAK,eAAW,MAAAA,IAAA,OAAA,OAAAA,EAAE,SAAK,MAAAD,IAAA,QAAAA,EAAA,KAAAC,EAAGC,CAAG,CAC/B,EAEAT,EAAA,UAAA,SAAA,UAAA,UACEO,GAAAC,EAAA,KAAK,eAAW,MAAAA,IAAA,OAAA,OAAAA,EAAE,YAAQ,MAAAD,IAAA,QAAAA,EAAA,KAAAC,CAAA,CAC5B,EAGUR,EAAA,UAAA,WAAV,SAAqBU,EAAyB,SAC5C,OAAOH,GAAAC,EAAA,KAAK,UAAM,MAAAA,IAAA,OAAA,OAAAA,EAAE,UAAUE,CAAU,KAAC,MAAAH,IAAA,OAAAA,EAAII,EAC/C,EACFX,CAAA,EA1ByCY,CAAO,EC5JzC,IAAMC,GAA+C,CAC1D,IAAG,UAAA,CAGD,OAAQA,GAAsB,UAAY,MAAM,IAAG,CACrD,EACA,SAAU,QCwBZ,IAAAC,GAAA,SAAAC,EAAA,CAAsCC,EAAAF,EAAAC,CAAA,EAUpC,SAAAD,EACUG,EACAC,EACAC,EAA6D,CAF7DF,IAAA,SAAAA,EAAA,KACAC,IAAA,SAAAA,EAAA,KACAC,IAAA,SAAAA,EAAAC,IAHV,IAAAC,EAKEN,EAAA,KAAA,IAAA,GAAO,KAJC,OAAAM,EAAA,YAAAJ,EACAI,EAAA,YAAAH,EACAG,EAAA,mBAAAF,EAZFE,EAAA,QAA0B,CAAA,EAC1BA,EAAA,oBAAsB,GAc5BA,EAAK,oBAAsBH,IAAgB,IAC3CG,EAAK,YAAc,KAAK,IAAI,EAAGJ,CAAW,EAC1CI,EAAK,YAAc,KAAK,IAAI,EAAGH,CAAW,GAC5C,CAEA,OAAAJ,EAAA,UAAA,KAAA,SAAKQ,EAAQ,CACL,IAAAC,EAA+E,KAA7EC,EAASD,EAAA,UAAEE,EAAOF,EAAA,QAAEG,EAAmBH,EAAA,oBAAEJ,EAAkBI,EAAA,mBAAEL,EAAWK,EAAA,YAC3EC,IACHC,EAAQ,KAAKH,CAAK,EAClB,CAACI,GAAuBD,EAAQ,KAAKN,EAAmB,IAAG,EAAKD,CAAW,GAE7E,KAAK,YAAW,EAChBH,EAAA,UAAM,KAAI,KAAA,KAACO,CAAK,CAClB,EAGUR,EAAA,UAAA,WAAV,SAAqBa,EAAyB,CAC5C,KAAK,eAAc,EACnB,KAAK,YAAW,EAQhB,QANMC,EAAe,KAAK,gBAAgBD,CAAU,EAE9CJ,EAAmC,KAAjCG,EAAmBH,EAAA,oBAAEE,EAAOF,EAAA,QAG9BM,EAAOJ,EAAQ,MAAK,EACjBK,EAAI,EAAGA,EAAID,EAAK,QAAU,CAACF,EAAW,OAAQG,GAAKJ,EAAsB,EAAI,EACpFC,EAAW,KAAKE,EAAKC,CAAC,CAAM,EAG9B,YAAK,wBAAwBH,CAAU,EAEhCC,CACT,EAEQd,EAAA,UAAA,YAAR,UAAA,CACQ,IAAAS,EAAoE,KAAlEN,EAAWM,EAAA,YAAEJ,EAAkBI,EAAA,mBAAEE,EAAOF,EAAA,QAAEG,EAAmBH,EAAA,oBAK/DQ,GAAsBL,EAAsB,EAAI,GAAKT,EAK3D,GAJAA,EAAc,KAAYc,EAAqBN,EAAQ,QAAUA,EAAQ,OAAO,EAAGA,EAAQ,OAASM,CAAkB,EAIlH,CAACL,EAAqB,CAKxB,QAJMM,EAAMb,EAAmB,IAAG,EAC9Bc,EAAO,EAGFH,EAAI,EAAGA,EAAIL,EAAQ,QAAWA,EAAQK,CAAC,GAAgBE,EAAKF,GAAK,EACxEG,EAAOH,EAETG,GAAQR,EAAQ,OAAO,EAAGQ,EAAO,CAAC,EAEtC,EACFnB,CAAA,EAzEsCoB,CAAO,EClB7C,IAAAC,GAAA,SAAAC,EAAA,CAA+BC,EAAAF,EAAAC,CAAA,EAC7B,SAAAD,EAAYG,EAAsBC,EAAmD,QACnFH,EAAA,KAAA,IAAA,GAAO,IACT,CAWO,OAAAD,EAAA,UAAA,SAAP,SAAgBK,EAAWC,EAAiB,CAAjB,OAAAA,IAAA,SAAAA,EAAA,GAClB,IACT,EACFN,CAAA,EAjB+BO,EAAY,ECHpC,IAAMC,GAAqC,CAGhD,YAAA,SAAYC,EAAqBC,EAAgB,SAAEC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,EAAA,CAAA,EAAA,UAAAA,CAAA,EACzC,IAAAC,EAAaL,GAAgB,SACrC,OAAIK,GAAQ,MAARA,EAAU,YACLA,EAAS,YAAW,MAApBA,EAAQC,EAAA,CAAaL,EAASC,CAAO,EAAAK,EAAKJ,CAAI,CAAA,CAAA,EAEhD,YAAW,MAAA,OAAAG,EAAA,CAACL,EAASC,CAAO,EAAAK,EAAKJ,CAAI,CAAA,CAAA,CAC9C,EACA,cAAA,SAAcK,EAAM,CACV,IAAAH,EAAaL,GAAgB,SACrC,QAAQK,GAAQ,KAAA,OAARA,EAAU,gBAAiB,eAAeG,CAAa,CACjE,EACA,SAAU,QCrBZ,IAAAC,GAAA,SAAAC,EAAA,CAAoCC,EAAAF,EAAAC,CAAA,EAOlC,SAAAD,EAAsBG,EAAqCC,EAAmD,CAA9G,IAAAC,EACEJ,EAAA,KAAA,KAAME,EAAWC,CAAI,GAAC,KADF,OAAAC,EAAA,UAAAF,EAAqCE,EAAA,KAAAD,EAFjDC,EAAA,QAAmB,IAI7B,CAEO,OAAAL,EAAA,UAAA,SAAP,SAAgBM,EAAWC,EAAiB,OAC1C,GADyBA,IAAA,SAAAA,EAAA,GACrB,KAAK,OACP,OAAO,KAIT,KAAK,MAAQD,EAEb,IAAME,EAAK,KAAK,GACVL,EAAY,KAAK,UAuBvB,OAAIK,GAAM,OACR,KAAK,GAAK,KAAK,eAAeL,EAAWK,EAAID,CAAK,GAKpD,KAAK,QAAU,GAEf,KAAK,MAAQA,EAEb,KAAK,IAAKE,EAAA,KAAK,MAAE,MAAAA,IAAA,OAAAA,EAAI,KAAK,eAAeN,EAAW,KAAK,GAAII,CAAK,EAE3D,IACT,EAEUP,EAAA,UAAA,eAAV,SAAyBG,EAA2BO,EAAmBH,EAAiB,CAAjB,OAAAA,IAAA,SAAAA,EAAA,GAC9DI,GAAiB,YAAYR,EAAU,MAAM,KAAKA,EAAW,IAAI,EAAGI,CAAK,CAClF,EAEUP,EAAA,UAAA,eAAV,SAAyBY,EAA4BJ,EAAkBD,EAAwB,CAE7F,GAFqEA,IAAA,SAAAA,EAAA,GAEjEA,GAAS,MAAQ,KAAK,QAAUA,GAAS,KAAK,UAAY,GAC5D,OAAOC,EAILA,GAAM,MACRG,GAAiB,cAAcH,CAAE,CAIrC,EAMOR,EAAA,UAAA,QAAP,SAAeM,EAAUC,EAAa,CACpC,GAAI,KAAK,OACP,OAAO,IAAI,MAAM,8BAA8B,EAGjD,KAAK,QAAU,GACf,IAAMM,EAAQ,KAAK,SAASP,EAAOC,CAAK,EACxC,GAAIM,EACF,OAAOA,EACE,KAAK,UAAY,IAAS,KAAK,IAAM,OAc9C,KAAK,GAAK,KAAK,eAAe,KAAK,UAAW,KAAK,GAAI,IAAI,EAE/D,EAEUb,EAAA,UAAA,SAAV,SAAmBM,EAAUQ,EAAc,CACzC,IAAIC,EAAmB,GACnBC,EACJ,GAAI,CACF,KAAK,KAAKV,CAAK,QACRW,EAAG,CACVF,EAAU,GAIVC,EAAaC,GAAQ,IAAI,MAAM,oCAAoC,EAErE,GAAIF,EACF,YAAK,YAAW,EACTC,CAEX,EAEAhB,EAAA,UAAA,YAAA,UAAA,CACE,GAAI,CAAC,KAAK,OAAQ,CACV,IAAAS,EAAoB,KAAlBD,EAAEC,EAAA,GAAEN,EAASM,EAAA,UACbS,EAAYf,EAAS,QAE7B,KAAK,KAAO,KAAK,MAAQ,KAAK,UAAY,KAC1C,KAAK,QAAU,GAEfgB,GAAUD,EAAS,IAAI,EACnBV,GAAM,OACR,KAAK,GAAK,KAAK,eAAeL,EAAWK,EAAI,IAAI,GAGnD,KAAK,MAAQ,KACbP,EAAA,UAAM,YAAW,KAAA,IAAA,EAErB,EACFD,CAAA,EA9IoCoB,EAAM,ECgB1C,IAAAC,GAAA,UAAA,CAGE,SAAAA,EAAoBC,EAAoCC,EAAiC,CAAjCA,IAAA,SAAAA,EAAoBF,EAAU,KAAlE,KAAA,oBAAAC,EAClB,KAAK,IAAMC,CACb,CA6BO,OAAAF,EAAA,UAAA,SAAP,SAAmBG,EAAqDC,EAAmBC,EAAS,CAA5B,OAAAD,IAAA,SAAAA,EAAA,GAC/D,IAAI,KAAK,oBAAuB,KAAMD,CAAI,EAAE,SAASE,EAAOD,CAAK,CAC1E,EAnCcJ,EAAA,IAAoBM,GAAsB,IAoC1DN,GArCA,ECnBA,IAAAO,GAAA,SAAAC,EAAA,CAAoCC,EAAAF,EAAAC,CAAA,EAkBlC,SAAAD,EAAYG,EAAgCC,EAAiC,CAAjCA,IAAA,SAAAA,EAAoBC,GAAU,KAA1E,IAAAC,EACEL,EAAA,KAAA,KAAME,EAAiBC,CAAG,GAAC,KAlBtB,OAAAE,EAAA,QAAmC,CAAA,EAOnCA,EAAA,QAAmB,IAY1B,CAEO,OAAAN,EAAA,UAAA,MAAP,SAAaO,EAAwB,CAC3B,IAAAC,EAAY,KAAI,QAExB,GAAI,KAAK,QAAS,CAChBA,EAAQ,KAAKD,CAAM,EACnB,OAGF,IAAIE,EACJ,KAAK,QAAU,GAEf,EACE,IAAKA,EAAQF,EAAO,QAAQA,EAAO,MAAOA,EAAO,KAAK,EACpD,YAEMA,EAASC,EAAQ,MAAK,GAIhC,GAFA,KAAK,QAAU,GAEXC,EAAO,CACT,KAAQF,EAASC,EAAQ,MAAK,GAC5BD,EAAO,YAAW,EAEpB,MAAME,EAEV,EACFT,CAAA,EAhDoCK,EAAS,EC6CtC,IAAMK,GAAiB,IAAIC,GAAeC,EAAW,EAK/CC,GAAQH,GCjDrB,IAAAI,GAAA,SAAAC,EAAA,CAA6CC,EAAAF,EAAAC,CAAA,EAC3C,SAAAD,EAAsBG,EAA8CC,EAAmD,CAAvH,IAAAC,EACEJ,EAAA,KAAA,KAAME,EAAWC,CAAI,GAAC,KADF,OAAAC,EAAA,UAAAF,EAA8CE,EAAA,KAAAD,GAEpE,CAEU,OAAAJ,EAAA,UAAA,eAAV,SAAyBG,EAAoCG,EAAkBC,EAAiB,CAE9F,OAF6EA,IAAA,SAAAA,EAAA,GAEzEA,IAAU,MAAQA,EAAQ,EACrBN,EAAA,UAAM,eAAc,KAAA,KAACE,EAAWG,EAAIC,CAAK,GAGlDJ,EAAU,QAAQ,KAAK,IAAI,EAIpBA,EAAU,aAAeA,EAAU,WAAaK,GAAuB,sBAAsB,UAAA,CAAM,OAAAL,EAAU,MAAM,MAAS,CAAzB,CAA0B,GACtI,EAEUH,EAAA,UAAA,eAAV,SAAyBG,EAAoCG,EAAkBC,EAAiB,OAI9F,GAJ6EA,IAAA,SAAAA,EAAA,GAIzEA,GAAS,KAAOA,EAAQ,EAAI,KAAK,MAAQ,EAC3C,OAAON,EAAA,UAAM,eAAc,KAAA,KAACE,EAAWG,EAAIC,CAAK,EAK1C,IAAAE,EAAYN,EAAS,QACzBG,GAAM,QAAQI,EAAAD,EAAQA,EAAQ,OAAS,CAAC,KAAC,MAAAC,IAAA,OAAA,OAAAA,EAAE,MAAOJ,IACpDE,GAAuB,qBAAqBF,CAAY,EACxDH,EAAU,WAAa,OAI3B,EACFH,CAAA,EApC6CW,EAAW,ECHxD,IAAAC,GAAA,SAAAC,EAAA,CAA6CC,EAAAF,EAAAC,CAAA,EAA7C,SAAAD,GAAA,+CAkCA,CAjCS,OAAAA,EAAA,UAAA,MAAP,SAAaG,EAAyB,CACpC,KAAK,QAAU,GAUf,IAAMC,EAAU,KAAK,WACrB,KAAK,WAAa,OAEV,IAAAC,EAAY,KAAI,QACpBC,EACJH,EAASA,GAAUE,EAAQ,MAAK,EAEhC,EACE,IAAKC,EAAQH,EAAO,QAAQA,EAAO,MAAOA,EAAO,KAAK,EACpD,aAEMA,EAASE,EAAQ,CAAC,IAAMF,EAAO,KAAOC,GAAWC,EAAQ,MAAK,GAIxE,GAFA,KAAK,QAAU,GAEXC,EAAO,CACT,MAAQH,EAASE,EAAQ,CAAC,IAAMF,EAAO,KAAOC,GAAWC,EAAQ,MAAK,GACpEF,EAAO,YAAW,EAEpB,MAAMG,EAEV,EACFN,CAAA,EAlC6CO,EAAc,ECgCpD,IAAMC,GAA0B,IAAIC,GAAwBC,EAAoB,EC8BhF,IAAMC,GAAQ,IAAIC,EAAkB,SAACC,EAAU,CAAK,OAAAA,EAAW,SAAQ,CAAnB,CAAqB,EC9D1E,SAAUC,GAAYC,EAAU,CACpC,OAAOA,GAASC,EAAWD,EAAM,QAAQ,CAC3C,CCDA,SAASE,GAAQC,EAAQ,CACvB,OAAOA,EAAIA,EAAI,OAAS,CAAC,CAC3B,CAEM,SAAUC,GAAkBC,EAAW,CAC3C,OAAOC,EAAWJ,GAAKG,CAAI,CAAC,EAAIA,EAAK,IAAG,EAAK,MAC/C,CAEM,SAAUE,GAAaF,EAAW,CACtC,OAAOG,GAAYN,GAAKG,CAAI,CAAC,EAAIA,EAAK,IAAG,EAAK,MAChD,CAEM,SAAUI,GAAUJ,EAAaK,EAAoB,CACzD,OAAO,OAAOR,GAAKG,CAAI,GAAM,SAAWA,EAAK,IAAG,EAAMK,CACxD,CClBO,IAAMC,GAAe,SAAIC,EAAM,CAAwB,OAAAA,GAAK,OAAOA,EAAE,QAAW,UAAY,OAAOA,GAAM,UAAlD,ECMxD,SAAUC,GAAUC,EAAU,CAClC,OAAOC,EAAWD,GAAK,KAAA,OAALA,EAAO,IAAI,CAC/B,CCHM,SAAUE,GAAoBC,EAAU,CAC5C,OAAOC,EAAWD,EAAME,EAAiB,CAAC,CAC5C,CCLM,SAAUC,GAAmBC,EAAQ,CACzC,OAAO,OAAO,eAAiBC,EAAWD,GAAG,KAAA,OAAHA,EAAM,OAAO,aAAa,CAAC,CACvE,CCAM,SAAUE,GAAiCC,EAAU,CAEzD,OAAO,IAAI,UACT,iBACEA,IAAU,MAAQ,OAAOA,GAAU,SAAW,oBAAsB,IAAIA,EAAK,KAAG,0HACwC,CAE9H,CCXM,SAAUC,IAAiB,CAC/B,OAAI,OAAO,QAAW,YAAc,CAAC,OAAO,SACnC,aAGF,OAAO,QAChB,CAEO,IAAMC,GAAWD,GAAiB,ECJnC,SAAUE,GAAWC,EAAU,CACnC,OAAOC,EAAWD,GAAK,KAAA,OAALA,EAAQE,EAAe,CAAC,CAC5C,CCHM,SAAiBC,GAAsCC,EAAqC,mGAC1FC,EAASD,EAAe,UAAS,2DAGX,MAAA,CAAA,EAAAE,GAAMD,EAAO,KAAI,CAAE,CAAA,gBAArCE,EAAkBC,EAAA,KAAA,EAAhBC,EAAKF,EAAA,MAAEG,EAAIH,EAAA,KACfG,iBAAA,CAAA,EAAA,CAAA,SACF,MAAA,CAAA,EAAAF,EAAA,KAAA,CAAA,qBAEIC,CAAM,CAAA,SAAZ,MAAA,CAAA,EAAAD,EAAA,KAAA,CAAA,SAAA,OAAAA,EAAA,KAAA,mCAGF,OAAAH,EAAO,YAAW,6BAIhB,SAAUM,GAAwBC,EAAQ,CAG9C,OAAOC,EAAWD,GAAG,KAAA,OAAHA,EAAK,SAAS,CAClC,CCPM,SAAUE,EAAaC,EAAyB,CACpD,GAAIA,aAAiBC,EACnB,OAAOD,EAET,GAAIA,GAAS,KAAM,CACjB,GAAIE,GAAoBF,CAAK,EAC3B,OAAOG,GAAsBH,CAAK,EAEpC,GAAII,GAAYJ,CAAK,EACnB,OAAOK,GAAcL,CAAK,EAE5B,GAAIM,GAAUN,CAAK,EACjB,OAAOO,GAAYP,CAAK,EAE1B,GAAIQ,GAAgBR,CAAK,EACvB,OAAOS,GAAkBT,CAAK,EAEhC,GAAIU,GAAWV,CAAK,EAClB,OAAOW,GAAaX,CAAK,EAE3B,GAAIY,GAAqBZ,CAAK,EAC5B,OAAOa,GAAuBb,CAAK,EAIvC,MAAMc,GAAiCd,CAAK,CAC9C,CAMM,SAAUG,GAAyBY,EAAQ,CAC/C,OAAO,IAAId,EAAW,SAACe,EAAyB,CAC9C,IAAMC,EAAMF,EAAIG,EAAiB,EAAC,EAClC,GAAIC,EAAWF,EAAI,SAAS,EAC1B,OAAOA,EAAI,UAAUD,CAAU,EAGjC,MAAM,IAAI,UAAU,gEAAgE,CACtF,CAAC,CACH,CASM,SAAUX,GAAiBe,EAAmB,CAClD,OAAO,IAAInB,EAAW,SAACe,EAAyB,CAU9C,QAASK,EAAI,EAAGA,EAAID,EAAM,QAAU,CAACJ,EAAW,OAAQK,IACtDL,EAAW,KAAKI,EAAMC,CAAC,CAAC,EAE1BL,EAAW,SAAQ,CACrB,CAAC,CACH,CAEM,SAAUT,GAAee,EAAuB,CACpD,OAAO,IAAIrB,EAAW,SAACe,EAAyB,CAC9CM,EACG,KACC,SAACC,EAAK,CACCP,EAAW,SACdA,EAAW,KAAKO,CAAK,EACrBP,EAAW,SAAQ,EAEvB,EACA,SAACQ,EAAQ,CAAK,OAAAR,EAAW,MAAMQ,CAAG,CAApB,CAAqB,EAEpC,KAAK,KAAMC,EAAoB,CACpC,CAAC,CACH,CAEM,SAAUd,GAAgBe,EAAqB,CACnD,OAAO,IAAIzB,EAAW,SAACe,EAAyB,aAC9C,QAAoBW,EAAAC,EAAAF,CAAQ,EAAAG,EAAAF,EAAA,KAAA,EAAA,CAAAE,EAAA,KAAAA,EAAAF,EAAA,KAAA,EAAE,CAAzB,IAAMJ,EAAKM,EAAA,MAEd,GADAb,EAAW,KAAKO,CAAK,EACjBP,EAAW,OACb,yGAGJA,EAAW,SAAQ,CACrB,CAAC,CACH,CAEM,SAAUP,GAAqBqB,EAA+B,CAClE,OAAO,IAAI7B,EAAW,SAACe,EAAyB,CAC9Ce,GAAQD,EAAed,CAAU,EAAE,MAAM,SAACQ,EAAG,CAAK,OAAAR,EAAW,MAAMQ,CAAG,CAApB,CAAqB,CACzE,CAAC,CACH,CAEM,SAAUX,GAA0BmB,EAAqC,CAC7E,OAAOvB,GAAkBwB,GAAmCD,CAAc,CAAC,CAC7E,CAEA,SAAeD,GAAWD,EAAiCd,EAAyB,uIACxDkB,EAAAC,GAAAL,CAAa,gFAIrC,GAJeP,EAAKa,EAAA,MACpBpB,EAAW,KAAKO,CAAK,EAGjBP,EAAW,OACb,MAAA,CAAA,CAAA,6RAGJ,OAAAA,EAAW,SAAQ,WChHf,SAAUqB,EACdC,EACAC,EACAC,EACAC,EACAC,EAAc,CADdD,IAAA,SAAAA,EAAA,GACAC,IAAA,SAAAA,EAAA,IAEA,IAAMC,EAAuBJ,EAAU,SAAS,UAAA,CAC9CC,EAAI,EACAE,EACFJ,EAAmB,IAAI,KAAK,SAAS,KAAMG,CAAK,CAAC,EAEjD,KAAK,YAAW,CAEpB,EAAGA,CAAK,EAIR,GAFAH,EAAmB,IAAIK,CAAoB,EAEvC,CAACD,EAKH,OAAOC,CAEX,CCeM,SAAUC,GAAaC,EAA0BC,EAAS,CAAT,OAAAA,IAAA,SAAAA,EAAA,GAC9CC,EAAQ,SAACC,EAAQC,EAAU,CAChCD,EAAO,UACLE,EACED,EACA,SAACE,EAAK,CAAK,OAAAC,EAAgBH,EAAYJ,EAAW,UAAA,CAAM,OAAAI,EAAW,KAAKE,CAAK,CAArB,EAAwBL,CAAK,CAA1E,EACX,UAAA,CAAM,OAAAM,EAAgBH,EAAYJ,EAAW,UAAA,CAAM,OAAAI,EAAW,SAAQ,CAAnB,EAAuBH,CAAK,CAAzE,EACN,SAACO,EAAG,CAAK,OAAAD,EAAgBH,EAAYJ,EAAW,UAAA,CAAM,OAAAI,EAAW,MAAMI,CAAG,CAApB,EAAuBP,CAAK,CAAzE,CAA0E,CACpF,CAEL,CAAC,CACH,CCPM,SAAUQ,GAAeC,EAA0BC,EAAiB,CAAjB,OAAAA,IAAA,SAAAA,EAAA,GAChDC,EAAQ,SAACC,EAAQC,EAAU,CAChCA,EAAW,IAAIJ,EAAU,SAAS,UAAA,CAAM,OAAAG,EAAO,UAAUC,CAAU,CAA3B,EAA8BH,CAAK,CAAC,CAC9E,CAAC,CACH,CC7DM,SAAUI,GAAsBC,EAA6BC,EAAwB,CACzF,OAAOC,EAAUF,CAAK,EAAE,KAAKG,GAAYF,CAAS,EAAGG,GAAUH,CAAS,CAAC,CAC3E,CCFM,SAAUI,GAAmBC,EAAuBC,EAAwB,CAChF,OAAOC,EAAUF,CAAK,EAAE,KAAKG,GAAYF,CAAS,EAAGG,GAAUH,CAAS,CAAC,CAC3E,CCJM,SAAUI,GAAiBC,EAAqBC,EAAwB,CAC5E,OAAO,IAAIC,EAAc,SAACC,EAAU,CAElC,IAAIC,EAAI,EAER,OAAOH,EAAU,SAAS,UAAA,CACpBG,IAAMJ,EAAM,OAGdG,EAAW,SAAQ,GAInBA,EAAW,KAAKH,EAAMI,GAAG,CAAC,EAIrBD,EAAW,QACd,KAAK,SAAQ,EAGnB,CAAC,CACH,CAAC,CACH,CCfM,SAAUE,GAAoBC,EAAoBC,EAAwB,CAC9E,OAAO,IAAIC,EAAc,SAACC,EAAU,CAClC,IAAIC,EAKJ,OAAAC,EAAgBF,EAAYF,EAAW,UAAA,CAErCG,EAAYJ,EAAcI,EAAe,EAAC,EAE1CC,EACEF,EACAF,EACA,UAAA,OACMK,EACAC,EACJ,GAAI,CAEDC,EAAkBJ,EAAS,KAAI,EAA7BE,EAAKE,EAAA,MAAED,EAAIC,EAAA,WACPC,EAAK,CAEZN,EAAW,MAAMM,CAAG,EACpB,OAGEF,EAKFJ,EAAW,SAAQ,EAGnBA,EAAW,KAAKG,CAAK,CAEzB,EACA,EACA,EAAI,CAER,CAAC,EAMM,UAAA,CAAM,OAAAI,EAAWN,GAAQ,KAAA,OAARA,EAAU,MAAM,GAAKA,EAAS,OAAM,CAA/C,CACf,CAAC,CACH,CCvDM,SAAUO,GAAyBC,EAAyBC,EAAwB,CACxF,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,yBAAyB,EAE3C,OAAO,IAAIE,EAAc,SAACC,EAAU,CAClCC,EAAgBD,EAAYF,EAAW,UAAA,CACrC,IAAMI,EAAWL,EAAM,OAAO,aAAa,EAAC,EAC5CI,EACED,EACAF,EACA,UAAA,CACEI,EAAS,KAAI,EAAG,KAAK,SAACC,EAAM,CACtBA,EAAO,KAGTH,EAAW,SAAQ,EAEnBA,EAAW,KAAKG,EAAO,KAAK,CAEhC,CAAC,CACH,EACA,EACA,EAAI,CAER,CAAC,CACH,CAAC,CACH,CCzBM,SAAUC,GAA8BC,EAA8BC,EAAwB,CAClG,OAAOC,GAAsBC,GAAmCH,CAAK,EAAGC,CAAS,CACnF,CCoBM,SAAUG,GAAaC,EAA2BC,EAAwB,CAC9E,GAAID,GAAS,KAAM,CACjB,GAAIE,GAAoBF,CAAK,EAC3B,OAAOG,GAAmBH,EAAOC,CAAS,EAE5C,GAAIG,GAAYJ,CAAK,EACnB,OAAOK,GAAcL,EAAOC,CAAS,EAEvC,GAAIK,GAAUN,CAAK,EACjB,OAAOO,GAAgBP,EAAOC,CAAS,EAEzC,GAAIO,GAAgBR,CAAK,EACvB,OAAOS,GAAsBT,EAAOC,CAAS,EAE/C,GAAIS,GAAWV,CAAK,EAClB,OAAOW,GAAiBX,EAAOC,CAAS,EAE1C,GAAIW,GAAqBZ,CAAK,EAC5B,OAAOa,GAA2Bb,EAAOC,CAAS,EAGtD,MAAMa,GAAiCd,CAAK,CAC9C,CCoDM,SAAUe,GAAQC,EAA2BC,EAAyB,CAC1E,OAAOA,EAAYC,GAAUF,EAAOC,CAAS,EAAIE,EAAUH,CAAK,CAClE,CCxBM,SAAUI,IAAE,SAAIC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACpB,IAAMC,EAAYC,GAAaH,CAAI,EACnC,OAAOI,GAAKJ,EAAaE,CAAS,CACpC,CCsCM,SAAUG,GAAWC,EAA0BC,EAAyB,CAC5E,IAAMC,EAAeC,EAAWH,CAAmB,EAAIA,EAAsB,UAAA,CAAM,OAAAA,CAAA,EAC7EI,EAAO,SAACC,EAA6B,CAAK,OAAAA,EAAW,MAAMH,EAAY,CAAE,CAA/B,EAChD,OAAO,IAAII,EAAWL,EAAY,SAACI,EAAU,CAAK,OAAAJ,EAAU,SAASG,EAAa,EAAGC,CAAU,CAA7C,EAAiDD,CAAI,CACzG,CCrHM,SAAUG,GAAYC,EAAU,CACpC,OAAOA,aAAiB,MAAQ,CAAC,MAAMA,CAAY,CACrD,CCsCM,SAAUC,EAAUC,EAAyCC,EAAa,CAC9E,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAEhC,IAAIC,EAAQ,EAGZF,EAAO,UACLG,EAAyBF,EAAY,SAACG,EAAQ,CAG5CH,EAAW,KAAKJ,EAAQ,KAAKC,EAASM,EAAOF,GAAO,CAAC,CACvD,CAAC,CAAC,CAEN,CAAC,CACH,CC1DQ,IAAAG,GAAY,MAAK,QAEzB,SAASC,GAAkBC,EAA6BC,EAAW,CAC/D,OAAOH,GAAQG,CAAI,EAAID,EAAE,MAAA,OAAAE,EAAA,CAAA,EAAAC,EAAIF,CAAI,CAAA,CAAA,EAAID,EAAGC,CAAI,CAChD,CAMM,SAAUG,GAAuBJ,EAA2B,CAC9D,OAAOK,EAAI,SAAAJ,EAAI,CAAI,OAAAF,GAAYC,EAAIC,CAAI,CAApB,CAAqB,CAC5C,CCfQ,IAAAK,GAAY,MAAK,QACjBC,GAA0D,OAAM,eAArCC,GAA+B,OAAM,UAAlBC,GAAY,OAAM,KAQlE,SAAUC,GAAqDC,EAAuB,CAC1F,GAAIA,EAAK,SAAW,EAAG,CACrB,IAAMC,EAAQD,EAAK,CAAC,EACpB,GAAIL,GAAQM,CAAK,EACf,MAAO,CAAE,KAAMA,EAAO,KAAM,IAAI,EAElC,GAAIC,GAAOD,CAAK,EAAG,CACjB,IAAME,EAAOL,GAAQG,CAAK,EAC1B,MAAO,CACL,KAAME,EAAK,IAAI,SAACC,EAAG,CAAK,OAAAH,EAAMG,CAAG,CAAT,CAAU,EAClC,KAAID,IAKV,MAAO,CAAE,KAAMH,EAAa,KAAM,IAAI,CACxC,CAEA,SAASE,GAAOG,EAAQ,CACtB,OAAOA,GAAO,OAAOA,GAAQ,UAAYT,GAAeS,CAAG,IAAMR,EACnE,CC7BM,SAAUS,GAAaC,EAAgBC,EAAa,CACxD,OAAOD,EAAK,OAAO,SAACE,EAAQC,EAAKC,EAAC,CAAK,OAAEF,EAAOC,CAAG,EAAIF,EAAOG,CAAC,EAAIF,CAA5B,EAAqC,CAAA,CAAS,CACvF,CCsMM,SAAUG,IAAa,SAAoCC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EAC/D,IAAMC,EAAYC,GAAaH,CAAI,EAC7BI,EAAiBC,GAAkBL,CAAI,EAEvCM,EAA8BC,GAAqBP,CAAI,EAA/CQ,EAAWF,EAAA,KAAEG,EAAIH,EAAA,KAE/B,GAAIE,EAAY,SAAW,EAIzB,OAAOE,GAAK,CAAA,EAAIR,CAAgB,EAGlC,IAAMS,EAAS,IAAIC,EACjBC,GACEL,EACAN,EACAO,EAEI,SAACK,EAAM,CAAK,OAAAC,GAAaN,EAAMK,CAAM,CAAzB,EAEZE,CAAQ,CACb,EAGH,OAAOZ,EAAkBO,EAAO,KAAKM,GAAiBb,CAAc,CAAC,EAAsBO,CAC7F,CAEM,SAAUE,GACdL,EACAN,EACAgB,EAAiD,CAAjD,OAAAA,IAAA,SAAAA,EAAAF,GAEO,SAACG,EAA2B,CAGjCC,GACElB,EACA,UAAA,CAaE,QAZQmB,EAAWb,EAAW,OAExBM,EAAS,IAAI,MAAMO,CAAM,EAG3BC,EAASD,EAITE,EAAuBF,aAGlBG,EAAC,CACRJ,GACElB,EACA,UAAA,CACE,IAAMuB,EAASf,GAAKF,EAAYgB,CAAC,EAAGtB,CAAgB,EAChDwB,EAAgB,GACpBD,EAAO,UACLE,EACER,EACA,SAACS,EAAK,CAEJd,EAAOU,CAAC,EAAII,EACPF,IAEHA,EAAgB,GAChBH,KAEGA,GAGHJ,EAAW,KAAKD,EAAeJ,EAAO,MAAK,CAAE,CAAC,CAElD,EACA,UAAA,CACO,EAAEQ,GAGLH,EAAW,SAAQ,CAEvB,CAAC,CACF,CAEL,EACAA,CAAU,GAjCLK,EAAI,EAAGA,EAAIH,EAAQG,MAAnBA,CAAC,CAoCZ,EACAL,CAAU,CAEd,CACF,CAMA,SAASC,GAAclB,EAAsC2B,EAAqBC,EAA0B,CACtG5B,EACF6B,EAAgBD,EAAc5B,EAAW2B,CAAO,EAEhDA,EAAO,CAEX,CC3RM,SAAUG,GACdC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAAgC,CAGhC,IAAMC,EAAc,CAAA,EAEhBC,EAAS,EAETC,EAAQ,EAERC,EAAa,GAKXC,EAAgB,UAAA,CAIhBD,GAAc,CAACH,EAAO,QAAU,CAACC,GACnCR,EAAW,SAAQ,CAEvB,EAGMY,EAAY,SAACC,EAAQ,CAAK,OAACL,EAASN,EAAaY,EAAWD,CAAK,EAAIN,EAAO,KAAKM,CAAK,CAA5D,EAE1BC,EAAa,SAACD,EAAQ,CAI1BT,GAAUJ,EAAW,KAAKa,CAAY,EAItCL,IAKA,IAAIO,EAAgB,GAGpBC,EAAUf,EAAQY,EAAOJ,GAAO,CAAC,EAAE,UACjCQ,EACEjB,EACA,SAACkB,EAAU,CAGTf,GAAY,MAAZA,EAAee,CAAU,EAErBd,EAGFQ,EAAUM,CAAiB,EAG3BlB,EAAW,KAAKkB,CAAU,CAE9B,EACA,UAAA,CAGEH,EAAgB,EAClB,EAEA,OACA,UAAA,CAIE,GAAIA,EAKF,GAAI,CAIFP,IAKA,qBACE,IAAMW,EAAgBZ,EAAO,MAAK,EAI9BF,EACFe,EAAgBpB,EAAYK,EAAmB,UAAA,CAAM,OAAAS,EAAWK,CAAa,CAAxB,CAAyB,EAE9EL,EAAWK,CAAa,GARrBZ,EAAO,QAAUC,EAASN,OAYjCS,EAAa,QACNU,EAAK,CACZrB,EAAW,MAAMqB,CAAG,EAG1B,CAAC,CACF,CAEL,EAGA,OAAAtB,EAAO,UACLkB,EAAyBjB,EAAYY,EAAW,UAAA,CAE9CF,EAAa,GACbC,EAAa,CACf,CAAC,CAAC,EAKG,UAAA,CACLL,GAAmB,MAAnBA,EAAmB,CACrB,CACF,CClEM,SAAUgB,GACdC,EACAC,EACAC,EAA6B,CAE7B,OAFAA,IAAA,SAAAA,EAAA,KAEIC,EAAWF,CAAc,EAEpBF,GAAS,SAACK,EAAGC,EAAC,CAAK,OAAAC,EAAI,SAACC,EAAQC,EAAU,CAAK,OAAAP,EAAeG,EAAGG,EAAGF,EAAGG,CAAE,CAA1B,CAA2B,EAAEC,EAAUT,EAAQI,EAAGC,CAAC,CAAC,CAAC,CAAjF,EAAoFH,CAAU,GAC/G,OAAOD,GAAmB,WACnCC,EAAaD,GAGRS,EAAQ,SAACC,EAAQC,EAAU,CAAK,OAAAC,GAAeF,EAAQC,EAAYZ,EAASE,CAAU,CAAtD,CAAuD,EAChG,CChCM,SAAUY,GAAyCC,EAA6B,CAA7B,OAAAA,IAAA,SAAAA,EAAA,KAChDC,GAASC,EAAUF,CAAU,CACtC,CCNM,SAAUG,IAAS,CACvB,OAAOC,GAAS,CAAC,CACnB,CCmDM,SAAUC,IAAM,SAACC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACrB,OAAOC,GAAS,EAAGC,GAAKH,EAAMI,GAAaJ,CAAI,CAAC,CAAC,CACnD,CC9DM,SAAUK,GAAsCC,EAA0B,CAC9E,OAAO,IAAIC,EAA+B,SAACC,EAAU,CACnDC,EAAUH,EAAiB,CAAE,EAAE,UAAUE,CAAU,CACrD,CAAC,CACH,CChDA,IAAME,GAA0B,CAAC,cAAe,gBAAgB,EAC1DC,GAAqB,CAAC,mBAAoB,qBAAqB,EAC/DC,GAAgB,CAAC,KAAM,KAAK,EAkO5B,SAAUC,EACdC,EACAC,EACAC,EACAC,EAAsC,CAMtC,GAJIC,EAAWF,CAAO,IACpBC,EAAiBD,EACjBA,EAAU,QAERC,EACF,OAAOJ,EAAaC,EAAQC,EAAWC,CAA+B,EAAE,KAAKG,GAAiBF,CAAc,CAAC,EAUzG,IAAAG,EAAAC,EAEJC,GAAcR,CAAM,EAChBH,GAAmB,IAAI,SAACY,EAAU,CAAK,OAAA,SAACC,EAAY,CAAK,OAAAV,EAAOS,CAAU,EAAER,EAAWS,EAASR,CAA+B,CAAtE,CAAlB,CAAyF,EAElIS,GAAwBX,CAAM,EAC5BJ,GAAwB,IAAIgB,GAAwBZ,EAAQC,CAAS,CAAC,EACtEY,GAA0Bb,CAAM,EAChCF,GAAc,IAAIc,GAAwBZ,EAAQC,CAAS,CAAC,EAC5D,CAAA,EAAE,CAAA,EATDa,EAAGR,EAAA,CAAA,EAAES,EAAMT,EAAA,CAAA,EAgBlB,GAAI,CAACQ,GACCE,GAAYhB,CAAM,EACpB,OAAOiB,GAAS,SAACC,EAAc,CAAK,OAAAnB,EAAUmB,EAAWjB,EAAWC,CAA+B,CAA/D,CAAgE,EAClGiB,EAAUnB,CAAM,CAAC,EAOvB,GAAI,CAACc,EACH,MAAM,IAAI,UAAU,sBAAsB,EAG5C,OAAO,IAAIM,EAAc,SAACC,EAAU,CAIlC,IAAMX,EAAU,UAAA,SAACY,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EAAmB,OAAAF,EAAW,KAAK,EAAIC,EAAK,OAASA,EAAOA,EAAK,CAAC,CAAC,CAAhD,EAEpC,OAAAR,EAAIJ,CAAO,EAEJ,UAAA,CAAM,OAAAK,EAAQL,CAAO,CAAf,CACf,CAAC,CACH,CASA,SAASE,GAAwBZ,EAAaC,EAAiB,CAC7D,OAAO,SAACQ,EAAkB,CAAK,OAAA,SAACC,EAAY,CAAK,OAAAV,EAAOS,CAAU,EAAER,EAAWS,CAAO,CAArC,CAAlB,CACjC,CAOA,SAASC,GAAwBX,EAAW,CAC1C,OAAOI,EAAWJ,EAAO,WAAW,GAAKI,EAAWJ,EAAO,cAAc,CAC3E,CAOA,SAASa,GAA0Bb,EAAW,CAC5C,OAAOI,EAAWJ,EAAO,EAAE,GAAKI,EAAWJ,EAAO,GAAG,CACvD,CAOA,SAASQ,GAAcR,EAAW,CAChC,OAAOI,EAAWJ,EAAO,gBAAgB,GAAKI,EAAWJ,EAAO,mBAAmB,CACrF,CC3MM,SAAUwB,GACdC,EACAC,EACAC,EAAyC,CAFzCF,IAAA,SAAAA,EAAA,GAEAE,IAAA,SAAAA,EAAAC,IAIA,IAAIC,EAAmB,GAEvB,OAAIH,GAAuB,OAIrBI,GAAYJ,CAAmB,EACjCC,EAAYD,EAIZG,EAAmBH,GAIhB,IAAIK,EAAW,SAACC,EAAU,CAI/B,IAAIC,EAAMC,GAAYT,CAAO,EAAI,CAACA,EAAUE,EAAW,IAAG,EAAKF,EAE3DQ,EAAM,IAERA,EAAM,GAIR,IAAIE,EAAI,EAGR,OAAOR,EAAU,SAAS,UAAA,CACnBK,EAAW,SAEdA,EAAW,KAAKG,GAAG,EAEf,GAAKN,EAGP,KAAK,SAAS,OAAWA,CAAgB,EAGzCG,EAAW,SAAQ,EAGzB,EAAGC,CAAG,CACR,CAAC,CACH,CChGM,SAAUG,GAAK,SAACC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACpB,IAAMC,EAAYC,GAAaH,CAAI,EAC7BI,EAAaC,GAAUL,EAAM,GAAQ,EACrCM,EAAUN,EAChB,OAAQM,EAAQ,OAGZA,EAAQ,SAAW,EAEnBC,EAAUD,EAAQ,CAAC,CAAC,EAEpBE,GAASJ,CAAU,EAAEK,GAAKH,EAASJ,CAAS,CAAC,EAL7CQ,EAMN,CCjEO,IAAMC,GAAQ,IAAIC,EAAkBC,EAAI,ECpCvC,IAAAC,GAAY,MAAK,QAMnB,SAAUC,GAAkBC,EAAiB,CACjD,OAAOA,EAAK,SAAW,GAAKF,GAAQE,EAAK,CAAC,CAAC,EAAIA,EAAK,CAAC,EAAKA,CAC5D,CCoDM,SAAUC,GAAUC,EAAiDC,EAAa,CACtF,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAEhC,IAAIC,EAAQ,EAIZF,EAAO,UAILG,EAAyBF,EAAY,SAACG,EAAK,CAAK,OAAAP,EAAU,KAAKC,EAASM,EAAOF,GAAO,GAAKD,EAAW,KAAKG,CAAK,CAAhE,CAAiE,CAAC,CAEtH,CAAC,CACH,CCxBM,SAAUC,IAAG,SAACC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EAClB,IAAMC,EAAiBC,GAAkBH,CAAI,EAEvCI,EAAUC,GAAeL,CAAI,EAEnC,OAAOI,EAAQ,OACX,IAAIE,EAAsB,SAACC,EAAU,CAGnC,IAAIC,EAAuBJ,EAAQ,IAAI,UAAA,CAAM,MAAA,CAAA,CAAA,CAAE,EAK3CK,EAAYL,EAAQ,IAAI,UAAA,CAAM,MAAA,EAAA,CAAK,EAGvCG,EAAW,IAAI,UAAA,CACbC,EAAUC,EAAY,IACxB,CAAC,EAKD,mBAASC,EAAW,CAClBC,EAAUP,EAAQM,CAAW,CAAC,EAAE,UAC9BE,EACEL,EACA,SAACM,EAAK,CAKJ,GAJAL,EAAQE,CAAW,EAAE,KAAKG,CAAK,EAI3BL,EAAQ,MAAM,SAACM,EAAM,CAAK,OAAAA,EAAO,MAAP,CAAa,EAAG,CAC5C,IAAMC,EAAcP,EAAQ,IAAI,SAACM,EAAM,CAAK,OAAAA,EAAO,MAAK,CAAZ,CAAe,EAE3DP,EAAW,KAAKL,EAAiBA,EAAc,MAAA,OAAAc,EAAA,CAAA,EAAAC,EAAIF,CAAM,CAAA,CAAA,EAAIA,CAAM,EAI/DP,EAAQ,KAAK,SAACM,EAAQI,EAAC,CAAK,MAAA,CAACJ,EAAO,QAAUL,EAAUS,CAAC,CAA7B,CAA8B,GAC5DX,EAAW,SAAQ,EAGzB,EACA,UAAA,CAGEE,EAAUC,CAAW,EAAI,GAIzB,CAACF,EAAQE,CAAW,EAAE,QAAUH,EAAW,SAAQ,CACrD,CAAC,CACF,GA9BIG,EAAc,EAAG,CAACH,EAAW,QAAUG,EAAcN,EAAQ,OAAQM,MAArEA,CAAW,EAmCpB,OAAO,UAAA,CACLF,EAAUC,EAAY,IACxB,CACF,CAAC,EACDU,EACN,CC9DM,SAAUC,GAASC,EAAoD,CAC3E,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAW,GACXC,EAAsB,KACtBC,EAA6C,KAC7CC,EAAa,GAEXC,EAAc,UAAA,CAGlB,GAFAF,GAAkB,MAAlBA,EAAoB,YAAW,EAC/BA,EAAqB,KACjBF,EAAU,CACZA,EAAW,GACX,IAAMK,EAAQJ,EACdA,EAAY,KACZF,EAAW,KAAKM,CAAK,EAEvBF,GAAcJ,EAAW,SAAQ,CACnC,EAEMO,EAAkB,UAAA,CACtBJ,EAAqB,KACrBC,GAAcJ,EAAW,SAAQ,CACnC,EAEAD,EAAO,UACLS,EACER,EACA,SAACM,EAAK,CACJL,EAAW,GACXC,EAAYI,EACPH,GACHM,EAAUZ,EAAiBS,CAAK,CAAC,EAAE,UAChCH,EAAqBK,EAAyBR,EAAYK,EAAaE,CAAe,CAAE,CAG/F,EACA,UAAA,CACEH,EAAa,IACZ,CAACH,GAAY,CAACE,GAAsBA,EAAmB,SAAWH,EAAW,SAAQ,CACxF,CAAC,CACF,CAEL,CAAC,CACH,CC3CM,SAAUU,GAAaC,EAAkBC,EAAyC,CAAzC,OAAAA,IAAA,SAAAA,EAAAC,IACtCC,GAAM,UAAA,CAAM,OAAAC,GAAMJ,EAAUC,CAAS,CAAzB,CAA0B,CAC/C,CCEM,SAAUI,GAAeC,EAAoBC,EAAsC,CAAtC,OAAAA,IAAA,SAAAA,EAAA,MAGjDA,EAAmBA,GAAgB,KAAhBA,EAAoBD,EAEhCE,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAiB,CAAA,EACjBC,EAAQ,EAEZH,EAAO,UACLI,EACEH,EACA,SAACI,EAAK,aACAC,EAAuB,KAKvBH,IAAUL,IAAsB,GAClCI,EAAQ,KAAK,CAAA,CAAE,MAIjB,QAAqBK,EAAAC,EAAAN,CAAO,EAAAO,EAAAF,EAAA,KAAA,EAAA,CAAAE,EAAA,KAAAA,EAAAF,EAAA,KAAA,EAAE,CAAzB,IAAMG,EAAMD,EAAA,MACfC,EAAO,KAAKL,CAAK,EAMbR,GAAca,EAAO,SACvBJ,EAASA,GAAM,KAANA,EAAU,CAAA,EACnBA,EAAO,KAAKI,CAAM,qGAItB,GAAIJ,MAIF,QAAqBK,EAAAH,EAAAF,CAAM,EAAAM,EAAAD,EAAA,KAAA,EAAA,CAAAC,EAAA,KAAAA,EAAAD,EAAA,KAAA,EAAE,CAAxB,IAAMD,EAAME,EAAA,MACfC,GAAUX,EAASQ,CAAM,EACzBT,EAAW,KAAKS,CAAM,oGAG5B,EACA,UAAA,aAGE,QAAqBI,EAAAN,EAAAN,CAAO,EAAAa,EAAAD,EAAA,KAAA,EAAA,CAAAC,EAAA,KAAAA,EAAAD,EAAA,KAAA,EAAE,CAAzB,IAAMJ,EAAMK,EAAA,MACfd,EAAW,KAAKS,CAAM,oGAExBT,EAAW,SAAQ,CACrB,EAEA,OACA,UAAA,CAEEC,EAAU,IACZ,CAAC,CACF,CAEL,CAAC,CACH,CCxDM,SAAUc,GAAgBC,EAAiBC,EAAyC,CAAzC,OAAAA,IAAA,SAAAA,EAAAC,IACxCC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAkC,KAClCC,EAAsB,KACtBC,EAA0B,KAExBC,EAAO,UAAA,CACX,GAAIH,EAAY,CAEdA,EAAW,YAAW,EACtBA,EAAa,KACb,IAAMI,EAAQH,EACdA,EAAY,KACZF,EAAW,KAAKK,CAAK,EAEzB,EACA,SAASC,GAAY,CAInB,IAAMC,EAAaJ,EAAYR,EACzBa,EAAMZ,EAAU,IAAG,EACzB,GAAIY,EAAMD,EAAY,CAEpBN,EAAa,KAAK,SAAS,OAAWM,EAAaC,CAAG,EACtDR,EAAW,IAAIC,CAAU,EACzB,OAGFG,EAAI,CACN,CAEAL,EAAO,UACLU,EACET,EACA,SAACK,EAAQ,CACPH,EAAYG,EACZF,EAAWP,EAAU,IAAG,EAGnBK,IACHA,EAAaL,EAAU,SAASU,EAAcX,CAAO,EACrDK,EAAW,IAAIC,CAAU,EAE7B,EACA,UAAA,CAGEG,EAAI,EACJJ,EAAW,SAAQ,CACrB,EAEA,OACA,UAAA,CAEEE,EAAYD,EAAa,IAC3B,CAAC,CACF,CAEL,CAAC,CACH,CC5EM,SAAUS,GAAQC,EAAa,CACnC,OAAOA,GAAS,EAEZ,UAAA,CAAM,OAAAC,EAAA,EACNC,EAAQ,SAACC,EAAQC,EAAU,CACzB,IAAIC,EAAO,EACXF,EAAO,UACLG,EAAyBF,EAAY,SAACG,EAAK,CAIrC,EAAEF,GAAQL,IACZI,EAAW,KAAKG,CAAK,EAIjBP,GAASK,GACXD,EAAW,SAAQ,EAGzB,CAAC,CAAC,CAEN,CAAC,CACP,CC9BM,SAAUI,IAAc,CAC5B,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChCD,EAAO,UAAUE,EAAyBD,EAAYE,EAAI,CAAC,CAC7D,CAAC,CACH,CCCM,SAAUC,GAASC,EAAQ,CAC/B,OAAOC,EAAI,UAAA,CAAM,OAAAD,CAAA,CAAK,CACxB,CC4CM,SAAUE,GACdC,EACAC,EAAmC,CAEnC,OAAIA,EAEK,SAACC,EAAqB,CAC3B,OAAAC,GAAOF,EAAkB,KAAKG,GAAK,CAAC,EAAGC,GAAc,CAAE,EAAGH,EAAO,KAAKH,GAAUC,CAAqB,CAAC,CAAC,CAAvG,EAGGM,GAAS,SAACC,EAAOC,EAAK,CAAK,OAAAC,EAAUT,EAAsBO,EAAOC,CAAK,CAAC,EAAE,KAAKJ,GAAK,CAAC,EAAGM,GAAMH,CAAK,CAAC,CAAzE,CAA0E,CAC9G,CCzCM,SAAUI,GAASC,EAAoBC,EAAyC,CAAzCA,IAAA,SAAAA,EAAAC,IAC3C,IAAMC,EAAWC,GAAMJ,EAAKC,CAAS,EACrC,OAAOI,GAAU,UAAA,CAAM,OAAAF,CAAA,CAAQ,CACjC,CC0EM,SAAUG,GACdC,EACAC,EAA0D,CAA1D,OAAAA,IAAA,SAAAA,EAA+BC,GAK/BF,EAAaA,GAAU,KAAVA,EAAcG,GAEpBC,EAAQ,SAACC,EAAQC,EAAU,CAGhC,IAAIC,EAEAC,EAAQ,GAEZH,EAAO,UACLI,EAAyBH,EAAY,SAACI,EAAK,CAEzC,IAAMC,EAAaV,EAAYS,CAAK,GAKhCF,GAAS,CAACR,EAAYO,EAAaI,CAAU,KAM/CH,EAAQ,GACRD,EAAcI,EAGdL,EAAW,KAAKI,CAAK,EAEzB,CAAC,CAAC,CAEN,CAAC,CACH,CAEA,SAASP,GAAeS,EAAQC,EAAM,CACpC,OAAOD,IAAMC,CACf,CCjHM,SAAUC,GAA8CC,EAAQC,EAAuC,CAC3G,OAAOC,GAAqB,SAACC,EAAMC,EAAI,CAAK,OAAAH,EAAUA,EAAQE,EAAEH,CAAG,EAAGI,EAAEJ,CAAG,CAAC,EAAIG,EAAEH,CAAG,IAAMI,EAAEJ,CAAG,CAApD,CAAqD,CACnG,CCNM,SAAUK,GAAYC,EAAoB,CAC9C,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAGhC,GAAI,CACFD,EAAO,UAAUC,CAAU,UAE3BA,EAAW,IAAIH,CAAQ,EAE3B,CAAC,CACH,CCmEM,SAAUI,GAASC,EAA4B,CAA5BA,IAAA,SAAAA,EAAA,CAAA,GACf,IAAAC,EAAgHD,EAAO,UAAvHE,EAASD,IAAA,OAAG,UAAA,CAAM,OAAA,IAAIE,CAAJ,EAAgBF,EAAEG,EAA4EJ,EAAO,aAAnFK,EAAYD,IAAA,OAAG,GAAIA,EAAEE,EAAuDN,EAAO,gBAA9DO,EAAeD,IAAA,OAAG,GAAIA,EAAEE,EAA+BR,EAAO,oBAAtCS,EAAmBD,IAAA,OAAG,GAAIA,EAUnH,OAAO,SAACE,EAAa,CACnB,IAAIC,EACAC,EACAC,EACAC,EAAW,EACXC,EAAe,GACfC,EAAa,GAEXC,EAAc,UAAA,CAClBL,GAAe,MAAfA,EAAiB,YAAW,EAC5BA,EAAkB,MACpB,EAGMM,EAAQ,UAAA,CACZD,EAAW,EACXN,EAAaE,EAAU,OACvBE,EAAeC,EAAa,EAC9B,EACMG,EAAsB,UAAA,CAG1B,IAAMC,EAAOT,EACbO,EAAK,EACLE,GAAI,MAAJA,EAAM,YAAW,CACnB,EAEA,OAAOC,EAAc,SAACC,EAAQC,EAAU,CACtCT,IACI,CAACE,GAAc,CAACD,GAClBE,EAAW,EAOb,IAAMO,EAAQX,EAAUA,GAAO,KAAPA,EAAWX,EAAS,EAO5CqB,EAAW,IAAI,UAAA,CACbT,IAKIA,IAAa,GAAK,CAACE,GAAc,CAACD,IACpCH,EAAkBa,GAAYN,EAAqBV,CAAmB,EAE1E,CAAC,EAIDe,EAAK,UAAUD,CAAU,EAGvB,CAACZ,GAIDG,EAAW,IAOXH,EAAa,IAAIe,GAAe,CAC9B,KAAM,SAACC,EAAK,CAAK,OAAAH,EAAK,KAAKG,CAAK,CAAf,EACjB,MAAO,SAACC,EAAG,CACTZ,EAAa,GACbC,EAAW,EACXL,EAAkBa,GAAYP,EAAOb,EAAcuB,CAAG,EACtDJ,EAAK,MAAMI,CAAG,CAChB,EACA,SAAU,UAAA,CACRb,EAAe,GACfE,EAAW,EACXL,EAAkBa,GAAYP,EAAOX,CAAe,EACpDiB,EAAK,SAAQ,CACf,EACD,EACDK,EAAUP,CAAM,EAAE,UAAUX,CAAU,EAE1C,CAAC,EAAED,CAAa,CAClB,CACF,CAEA,SAASe,GACPP,EACAY,EAAoD,SACpDC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,EAAA,CAAA,EAAA,UAAAA,CAAA,EAEA,GAAIF,IAAO,GAAM,CACfZ,EAAK,EACL,OAGF,GAAIY,IAAO,GAIX,KAAMG,EAAe,IAAIP,GAAe,CACtC,KAAM,UAAA,CACJO,EAAa,YAAW,EACxBf,EAAK,CACP,EACD,EAED,OAAOW,EAAUC,EAAE,MAAA,OAAAI,EAAA,CAAA,EAAAC,EAAIJ,CAAI,CAAA,CAAA,CAAA,EAAG,UAAUE,CAAY,EACtD,CChHM,SAAUG,GACdC,EACAC,EACAC,EAAyB,WAErBC,EACAC,EAAW,GACf,OAAIJ,GAAsB,OAAOA,GAAuB,UACnDK,EAA8EL,EAAkB,WAAhGG,EAAUE,IAAA,OAAG,IAAQA,EAAEC,EAAuDN,EAAkB,WAAzEC,EAAUK,IAAA,OAAG,IAAQA,EAAEC,EAAgCP,EAAkB,SAAlDI,EAAQG,IAAA,OAAG,GAAKA,EAAEL,EAAcF,EAAkB,WAEnGG,EAAcH,GAAkB,KAAlBA,EAAsB,IAE/BQ,GAAS,CACd,UAAW,UAAA,CAAM,OAAA,IAAIC,GAAcN,EAAYF,EAAYC,CAAS,CAAnD,EACjB,aAAc,GACd,gBAAiB,GACjB,oBAAqBE,EACtB,CACH,CClHM,SAAUM,IAAS,SAAOC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EAC9B,IAAMC,EAAYC,GAAaH,CAAM,EACrC,OAAOI,EAAQ,SAACC,EAAQC,EAAU,EAI/BJ,EAAYK,GAAOP,EAAQK,EAAQH,CAAS,EAAIK,GAAOP,EAAQK,CAAM,GAAG,UAAUC,CAAU,CAC/F,CAAC,CACH,CCmBM,SAAUE,EACdC,EACAC,EAA6G,CAE7G,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAyD,KACzDC,EAAQ,EAERC,EAAa,GAIXC,EAAgB,UAAA,CAAM,OAAAD,GAAc,CAACF,GAAmBD,EAAW,SAAQ,CAArD,EAE5BD,EAAO,UACLM,EACEL,EACA,SAACM,EAAK,CAEJL,GAAe,MAAfA,EAAiB,YAAW,EAC5B,IAAIM,EAAa,EACXC,EAAaN,IAEnBO,EAAUb,EAAQU,EAAOE,CAAU,CAAC,EAAE,UACnCP,EAAkBI,EACjBL,EAIA,SAACU,EAAU,CAAK,OAAAV,EAAW,KAAKH,EAAiBA,EAAeS,EAAOI,EAAYF,EAAYD,GAAY,EAAIG,CAAU,CAAzG,EAChB,UAAA,CAIET,EAAkB,KAClBG,EAAa,CACf,CAAC,CACD,CAEN,EACA,UAAA,CACED,EAAa,GACbC,EAAa,CACf,CAAC,CACF,CAEL,CAAC,CACH,CCkCM,SAAUO,GACdC,EACAC,EACAC,EAA8B,CAK9B,IAAMC,EACJC,EAAWJ,CAAc,GAAKC,GAASC,EAElC,CAAE,KAAMF,EAA2E,MAAKC,EAAE,SAAQC,CAAA,EACnGF,EAEN,OAAOG,EACHE,EAAQ,SAACC,EAAQC,EAAU,QACzBC,EAAAL,EAAY,aAAS,MAAAK,IAAA,QAAAA,EAAA,KAArBL,CAAW,EACX,IAAIM,EAAU,GACdH,EAAO,UACLI,EACEH,EACA,SAACI,EAAK,QACJH,EAAAL,EAAY,QAAI,MAAAK,IAAA,QAAAA,EAAA,KAAhBL,EAAmBQ,CAAK,EACxBJ,EAAW,KAAKI,CAAK,CACvB,EACA,UAAA,OACEF,EAAU,IACVD,EAAAL,EAAY,YAAQ,MAAAK,IAAA,QAAAA,EAAA,KAApBL,CAAW,EACXI,EAAW,SAAQ,CACrB,EACA,SAACK,EAAG,OACFH,EAAU,IACVD,EAAAL,EAAY,SAAK,MAAAK,IAAA,QAAAA,EAAA,KAAjBL,EAAoBS,CAAG,EACvBL,EAAW,MAAMK,CAAG,CACtB,EACA,UAAA,SACMH,KACFD,EAAAL,EAAY,eAAW,MAAAK,IAAA,QAAAA,EAAA,KAAvBL,CAAW,IAEbU,EAAAV,EAAY,YAAQ,MAAAU,IAAA,QAAAA,EAAA,KAApBV,CAAW,CACb,CAAC,CACF,CAEL,CAAC,EAIDW,CACN,CC7JM,SAAUC,IAAc,SAAOC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACnC,IAAMC,EAAUC,GAAkBH,CAAM,EAExC,OAAOI,EAAQ,SAACC,EAAQC,EAAU,CAehC,QAdMC,EAAMP,EAAO,OACbQ,EAAc,IAAI,MAAMD,CAAG,EAI7BE,EAAWT,EAAO,IAAI,UAAA,CAAM,MAAA,EAAA,CAAK,EAGjCU,EAAQ,cAMHC,EAAC,CACRC,EAAUZ,EAAOW,CAAC,CAAC,EAAE,UACnBE,EACEP,EACA,SAACQ,EAAK,CACJN,EAAYG,CAAC,EAAIG,EACb,CAACJ,GAAS,CAACD,EAASE,CAAC,IAEvBF,EAASE,CAAC,EAAI,IAKbD,EAAQD,EAAS,MAAMM,CAAQ,KAAON,EAAW,MAEtD,EAGAO,EAAI,CACL,GAnBIL,EAAI,EAAGA,EAAIJ,EAAKI,MAAhBA,CAAC,EAwBVN,EAAO,UACLQ,EAAyBP,EAAY,SAACQ,EAAK,CACzC,GAAIJ,EAAO,CAET,IAAMO,EAAMC,EAAA,CAAIJ,CAAK,EAAAK,EAAKX,CAAW,CAAA,EACrCF,EAAW,KAAKJ,EAAUA,EAAO,MAAA,OAAAgB,EAAA,CAAA,EAAAC,EAAIF,CAAM,CAAA,CAAA,EAAIA,CAAM,EAEzD,CAAC,CAAC,CAEN,CAAC,CACH,CCxFM,SAAUG,IAAG,SAAOC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACxB,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChCL,GAAS,MAAA,OAAAM,EAAA,CAACF,CAA8B,EAAAG,EAAMN,CAAuC,CAAA,CAAA,EAAE,UAAUI,CAAU,CAC7G,CAAC,CACH,CCCM,SAAUG,IAAO,SAAkCC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACvD,OAAOC,GAAG,MAAA,OAAAC,EAAA,CAAA,EAAAC,EAAIJ,CAAW,CAAA,CAAA,CAC3B,CCgBO,SAASK,GACdC,EAAkBC,EAAmB,SAChC,CACL,OAAO,MAAM,KAAKA,EAAK,iBAAoBD,CAAQ,CAAC,CACtD,CAuBO,SAASE,EACdF,EAAkBC,EAAmB,SAClC,CACH,IAAME,EAAKC,GAAsBJ,EAAUC,CAAI,EAC/C,GAAI,OAAOE,GAAO,YAChB,MAAM,IAAI,eACR,8BAA8BH,CAAQ,iBACxC,EAGF,OAAOG,CACT,CAsBO,SAASC,GACdJ,EAAkBC,EAAmB,SACtB,CACf,OAAOA,EAAK,cAAiBD,CAAQ,GAAK,MAC5C,CAOO,SAASK,IAA4C,CAC1D,OAAO,SAAS,yBAAyB,aACrC,SAAS,eAAiB,MAEhC,CCrEA,IAAMC,GAAYC,EAChBC,EAAU,SAAS,KAAM,SAAS,EAClCA,EAAU,SAAS,KAAM,UAAU,CACrC,EACG,KACCC,GAAa,CAAC,EACdC,GAAU,MAAS,EACnBC,EAAI,IAAMC,GAAiB,GAAK,SAAS,IAAI,EAC7CC,GAAY,CAAC,CACf,EAaK,SAASC,GACdC,EACqB,CACrB,OAAOT,GACJ,KACCK,EAAIK,GAAUD,EAAG,SAASC,CAAM,CAAC,EACjCC,GAAqB,CACvB,CACJ,CCnCO,SAASC,GACdC,EACe,CACf,MAAO,CACL,EAAGA,EAAG,WACN,EAAGA,EAAG,SACR,CACF,CAWO,SAASC,GACdD,EAC2B,CAC3B,OAAOE,EACLC,EAAUH,EAAI,QAAQ,EACtBG,EAAU,OAAQ,QAAQ,CAC5B,EACG,KACCC,GAAU,EAAGC,EAAuB,EACpCC,EAAI,IAAMP,GAAwBC,CAAE,CAAC,EACrCO,GAAUR,GAAwBC,CAAE,CAAC,CACvC,CACJ,CCnBA,SAASQ,GAAYC,EAAiBC,EAA8B,CAGlE,GAAI,OAAOA,GAAU,UAAY,OAAOA,GAAU,SAChDD,EAAG,WAAaC,EAAM,SAAS,UAGtBA,aAAiB,KAC1BD,EAAG,YAAYC,CAAK,UAGX,MAAM,QAAQA,CAAK,EAC5B,QAAWC,KAAQD,EACjBF,GAAYC,EAAIE,CAAI,CAE1B,CAyBO,SAASC,EACdC,EAAaC,KAAmCC,EAC7C,CACH,IAAMN,EAAK,SAAS,cAAcI,CAAG,EAGrC,GAAIC,EACF,QAAWE,KAAQ,OAAO,KAAKF,CAAU,EACnC,OAAOA,EAAWE,CAAI,GAAM,cAI5B,OAAOF,EAAWE,CAAI,GAAM,UAC9BP,EAAG,aAAaO,EAAMF,EAAWE,CAAI,CAAC,EAEtCP,EAAG,aAAaO,EAAM,EAAE,GAI9B,QAAWN,KAASK,EAClBP,GAAYC,EAAIC,CAAK,EAGvB,OAAOD,CACT,CC9EO,SAASQ,GAAMC,EAAuB,CAC3C,GAAIA,EAAQ,IAAK,CACf,IAAMC,EAAS,GAAGD,EAAQ,KAAO,IAAO,IACxC,MAAO,KAAKA,EAAQ,MAAY,KAAM,QAAQC,CAAM,CAAC,GACvD,KACE,QAAOD,EAAM,SAAS,CAE1B,CCCO,SAASE,GAAYC,EAA+B,CACzD,IAAMC,EAASC,EAAE,SAAU,CAAE,IAAAF,CAAI,CAAC,EAClC,OAAOG,GAAM,KACX,SAAS,KAAK,YAAYF,CAAM,EACzBG,EACLC,EAAUJ,EAAQ,MAAM,EACxBI,EAAUJ,EAAQ,OAAO,EACtB,KACCK,EAAU,IACRC,GAAW,IAAM,IAAI,eAAe,mBAAmBP,CAAG,EAAE,CAAC,CAC9D,CACH,CACJ,EACG,KACCQ,EAAI,IAAG,EAAY,EACnBC,GAAS,IAAM,SAAS,KAAK,YAAYR,CAAM,CAAC,EAChDS,GAAK,CAAC,CACR,EACH,CACH,CCVA,IAAMC,GAAS,IAAIC,EAiBbC,GAAYC,GAAM,IACtB,OAAO,gBAAmB,YACtBC,GAAY,4CAA4C,EACxDC,GAAG,MAAS,CACjB,EACE,KACCC,EAAI,IAAM,IAAI,eAAeC,GAAW,CACtC,QAAWC,KAASD,EAClBP,GAAO,KAAKQ,CAAK,CACrB,CAAC,CAAC,EACFC,EAAUC,GAAYC,EAAMC,GAAOP,GAAGK,CAAQ,CAAC,EAC5C,KACCG,GAAS,IAAMH,EAAS,WAAW,CAAC,CACtC,CACF,EACAI,GAAY,CAAC,CACf,EAaK,SAASC,GACdC,EACa,CACb,MAAO,CACL,MAAQA,EAAG,YACX,OAAQA,EAAG,YACb,CACF,CC7EO,SAASC,GACdC,EACa,CACb,MAAO,CACL,MAAQA,EAAG,YACX,OAAQA,EAAG,YACb,CACF,CCSA,IAAMC,GAAS,IAAIC,EAUbC,GAAYC,GAAM,IAAMC,GAC5B,IAAI,qBAAqBC,GAAW,CAClC,QAAWC,KAASD,EAClBL,GAAO,KAAKM,CAAK,CACrB,EAAG,CACD,UAAW,CACb,CAAC,CACH,CAAC,EACE,KACCC,EAAUC,GAAYC,EAAMC,GAAON,GAAGI,CAAQ,CAAC,EAC5C,KACCG,GAAS,IAAMH,EAAS,WAAW,CAAC,CACtC,CACF,EACAI,GAAY,CAAC,CACf,EAwCK,SAASC,GACdC,EAAiBC,EAAY,GACR,CACrB,OAAOC,GAA0BF,CAAE,EAChC,KACCG,EAAI,CAAC,CAAE,EAAAC,CAAE,IAAM,CACb,IAAMC,EAAUC,GAAeN,CAAE,EAC3BO,EAAUC,GAAsBR,CAAE,EACxC,OAAOI,GACLG,EAAQ,OAASF,EAAQ,OAASJ,CAEtC,CAAC,EACDQ,GAAqB,CACvB,CACJ,CCjFA,IAAMC,GAA4C,CAChD,OAAQC,EAAW,yBAAyB,EAC5C,OAAQA,EAAW,yBAAyB,CAC9C,ECqDA,IAAMC,GAASC,EAAW,WAAW,EAC/BC,GAAiB,KAAK,MAAMF,GAAO,WAAY,EACrDE,GAAO,KAAO,GAAG,IAAI,IAAIA,GAAO,KAAMC,GAAY,CAAC,CAAC,GAW7C,SAASC,IAAwB,CACtC,OAAOF,EACT,CAqBO,SAASG,GACdC,EAAkBC,EACV,CACR,OAAO,OAAOA,GAAU,YACpBC,GAAO,aAAaF,CAAG,EAAE,QAAQ,IAAKC,EAAM,SAAS,CAAC,EACtDC,GAAO,aAAaF,CAAG,CAC7B,CC1GO,SAASG,IAAmB,CACjC,OAAO,IAAI,IAAI,SAAS,IAAI,CAC9B,CCaO,SAASC,GACdC,EAAmBC,EACD,CAClB,OAAO,IAAIC,EAAiBC,GAAY,CACtC,IAAMC,EAAM,IAAI,eAChBA,EAAI,KAAK,MAAQ,GAAGJ,CAAG,EAAE,EACzBI,EAAI,aAAe,OAGnBA,EAAI,iBAAiB,OAAQ,IAAM,CAC7BA,EAAI,QAAU,KAAOA,EAAI,OAAS,KACpCD,EAAS,KAAKC,EAAI,QAAQ,EAC1BD,EAAS,SAAS,GAElBA,EAAS,MAAM,IAAI,MAAMC,EAAI,UAAU,CAAC,CAE5C,CAAC,EAGDA,EAAI,iBAAiB,QAAS,IAAM,CAClCD,EAAS,MAAM,IAAI,MAAM,eAAe,CAAC,CAC3C,CAAC,EAGDC,EAAI,iBAAiB,QAAS,IAAM,CAClCD,EAAS,MAAM,IAAI,MAAM,iBAAiB,CAAC,CAC7C,CAAC,EAGG,OAAOF,GAAA,YAAAA,EAAS,YAAc,cAChCG,EAAI,iBAAiB,WAAYC,GAAS,CACxCJ,EAAQ,UAAW,KAAMI,EAAM,OAASA,EAAM,MAAS,GAAG,CAC5D,CAAC,EAGDJ,EAAQ,UAAU,KAAK,CAAC,GAI1BG,EAAI,KAAK,CACX,CAAC,CACH,CAcO,SAASE,GACdN,EAAmBC,EACJ,CACf,OAAOF,GAAQC,EAAKC,CAAO,EACxB,KACCM,EAAUC,GAAOA,EAAI,KAAK,CAAC,EAC3BC,EAAIC,GAAQ,KAAK,MAAMA,CAAI,CAAM,EACjCC,GAAY,CAAC,CACf,CACJ,CCrCO,SAASC,GACdC,EAASC,EAAmB,SACP,CACrB,OAAOC,EAAW,uBAAuBF,CAAI,IAAKC,CAAI,CACxD,CAYO,SAASE,GACdH,EAASC,EAAmB,SACL,CACvB,OAAOG,GAAY,uBAAuBJ,CAAI,IAAKC,CAAI,CACzD,CCzCO,SAASI,GACdC,EAC0D,CAG1D,IAAMC,EAASC,GAAkBF,CAAE,EAC7BG,EAASC,EACbC,EAAUL,EAAI,OAAO,EACrBK,EAAUL,EAAI,OAAO,EAAE,KAAKM,GAAM,CAAC,CAAC,CACtC,EACG,KACCC,EAAI,IAAMP,EAAG,KAAK,EAClBQ,GAAUR,EAAG,KAAK,EAClBS,GAAqB,CACvB,EAGF,OAAAR,EACG,KACCS,GAAOC,GAAU,CAACA,CAAM,EACxBC,GAAeT,CAAM,CACvB,EACG,UAAU,CAAC,CAAC,CAAEU,CAAK,IAAM,CACxB,IAAMC,EAAO,SAAS,SAAS,SAC3B,OAAO,IAAO,YAAcD,EAAM,QACpC,GAAG,OAAQ,WAAY,GAAGC,CAAI,aAAaD,CAAK,EAAE,CACtD,CAAC,EAGEE,GAAc,CAACZ,EAAQF,CAAM,CAAC,EAClC,KACCM,EAAI,CAAC,CAACM,EAAOG,CAAK,KAAO,CAAE,IAAKhB,EAAI,MAAAa,EAAO,MAAAG,CAAM,EAAE,CACrD,CACJ,CCzEA,IAAAC,GAAiC,SCAjC,IAAAC,GAAqB,SA6BrB,SAASC,GAAUC,EAAYC,EAAuB,CACpD,SAAO,SAAKD,EAAK,UAAWC,EAAO,CACjC,KAAM,CACJ,QAAS,MACT,SAAU,MACZ,CACF,CAAC,CACH,CAeO,SAASC,GACdF,EAAYC,EAAeE,EACd,CACb,OACEC,EAAC,MAAG,MAAM,+BACRA,EAAC,QAAK,MAAM,WACVA,EAAC,OAAI,IAAKJ,EAAK,IAAK,CACtB,EACAI,EAAC,UACC,MAAM,uBACN,MAAOC,GAAY,gBAAgB,EACnC,sBAAqBF,EAAOH,EAAK,UAAY,IAAIA,EAAK,SAAS,KAE/DI,EAAC,YACCD,EACIJ,GAAUC,EAAMC,CAAK,EACrB,IAAIF,GAAUC,EAAMC,CAAK,CAAC,GAC/B,CACH,CACF,CAEJ,CCzDO,SAASK,GACdC,EACa,CACb,IAAMC,EAAQ,IAAID,EAAK,IAAI,GAC3B,OACEE,EAAC,KAAE,KAAMF,EAAK,IAAK,MAAOC,EAAO,MAAM,yBACrCC,EAAC,OAAI,IAAKF,EAAK,MAAO,CACxB,CAEJ,CASO,SAASG,GACdC,EACa,CACb,OACEF,EAAC,KACC,KAAK,6DACL,MAAM,wDACP,IACGE,CACJ,CAEJ,CF6BO,SAASC,GACdC,EAAiB,CAAE,OAAAC,EAAQ,OAAAC,CAAO,EACJ,CAC9B,OAAQF,EAAG,aAAa,eAAe,EAAG,CAExC,IAAK,OACH,OAAOG,GAAc,CACnBD,EAAO,KAAKE,GAAwB,OAAO,CAAC,EAC5CH,EACG,KACCI,EAAI,CAAC,CAAE,MAAAC,CAAM,IAAM,OAAO,OAAOA,EAAM,IAAI,EACxC,IAAIC,GAAQA,EAAK,QAAQ,SAAU,EAAE,CAAC,CACzC,CACF,CACJ,CAAC,EACE,KACCF,EAAI,CAAC,CAAC,CAAE,MAAAG,CAAM,EAAGC,CAAI,OAAM,GAAAC,QAAOD,EAAMD,CAAK,CAAC,EAC9CG,EAAUC,GAASX,EAAO,KACxBI,EAAI,CAAC,CAAE,MAAAC,CAAM,KAAO,CAClB,KAAMM,EAAM,IAAUC,IACb,CACL,UAAAA,EACA,IAAK,CACHP,EAAM,KACNO,EACA,MACF,EAAE,KAAK,EAAE,CACX,EACD,CACH,EAAE,CACJ,CAAC,CACH,EAEJ,QACE,OAAOV,GAAc,CACnBD,EAAO,KAAKE,GAAwB,OAAO,CAAC,EAC5CH,EACG,KACCI,EAAI,CAAC,CAAE,MAAAC,EAAO,OAAAQ,CAAO,IAAM,CACzB,GAAG,OAAO,KAAKR,EAAM,IAAI,EACzB,GAAG,OAAO,KAAKQ,EAAO,IAAI,CAC5B,CAAC,CACH,CACJ,CAAC,EACE,KACCT,EAAI,CAAC,CAAC,CAAE,MAAAG,CAAM,EAAGC,CAAI,OAAM,GAAAC,QAAOD,EAAMD,CAAK,CAAC,EAC9CG,EAAUI,GAAcd,EAAO,KAC7BI,EAAI,CAAC,CAAE,MAAAC,EAAO,OAAAQ,CAAO,KAAO,CAC1B,KAAMC,EAAW,IAAUF,GAAa,CACtC,IAAMG,EACJH,KAAaP,EAAM,KACfA,EACAQ,EACN,MAAO,CACL,UAAAD,EACA,IAAK,CACHG,EAAS,KACTA,EAAS,KAAKH,CAAS,CACzB,EAAE,KAAK,EAAE,CACX,CACF,CAAC,CACH,EAAE,CACJ,CAAC,CACH,CACN,CACF,CAUO,SAASI,GACdjB,EAAiB,CAAE,OAAAC,EAAQ,OAAAC,CAAO,EACoB,CACtD,IAAMgB,EAAQ,IAAIC,EACZC,EAAYC,GAAqBrB,CAAE,EACtC,KACCsB,GAAO,OAAO,CAChB,EAGIC,EAAOC,EAAW,wBAAyBxB,CAAE,EACnDkB,EACG,KACCO,GAAevB,CAAM,CACvB,EACG,UAAU,CAAC,CAAC,CAAE,KAAAO,CAAK,EAAG,CAAE,MAAAD,CAAM,CAAC,IAAM,CACpC,GAAIA,EACF,OAAQC,EAAK,OAAQ,CAGnB,IAAK,GACHc,EAAK,YAAc,aACnB,MAGF,IAAK,GACHA,EAAK,YAAc,UACnB,MAGF,QACEA,EAAK,YAAc,GAAGG,GAAMjB,EAAK,MAAM,CAAC,UAC5C,MAEAc,EAAK,YAAc,yBAEvB,CAAC,EAGL,IAAMI,EAAO3B,EAAG,aAAa,eAAe,IAAM,OAC5C4B,EAAOJ,EAAW,uBAAwBxB,CAAE,EAClD,OAAAkB,EACG,KACCW,GAAI,IAAMD,EAAK,UAAY,EAAE,EAC7BjB,EAAU,CAAC,CAAE,KAAAF,CAAK,IAAMqB,EACtBC,GAAG,GAAGtB,EAAK,MAAM,EAAG,EAAE,CAAC,EACvBsB,GAAG,GAAGtB,EAAK,MAAM,EAAE,CAAC,EACjB,KACCuB,GAAY,EAAE,EACdC,GAAQb,CAAS,EACjBT,EAAU,CAAC,CAACuB,CAAK,IAAMA,CAAK,CAC9B,CACJ,CAAC,EACDT,GAAevB,CAAM,CACvB,EACG,UAAU,CAAC,CAACiC,EAAQ,CAAE,MAAA3B,CAAM,CAAC,IAAMoB,EAAK,YACvCQ,GAAuBD,EAAQ3B,EAAOmB,CAAI,CAC5C,CAAC,EAGE5B,GAAsBC,EAAI,CAAE,OAAAE,EAAQ,OAAAD,CAAO,CAAC,EAChD,KACC4B,GAAIQ,GAASnB,EAAM,KAAKmB,CAAK,CAAC,EAC9BC,GAAS,IAAMpB,EAAM,SAAS,CAAC,EAC/Bb,EAAIgC,GAAUE,GAAA,CAAE,IAAKvC,GAAOqC,EAAQ,CACtC,CACJ,CG/JO,SAASG,GACdC,EACmC,CACnC,IAAMC,EAASC,GAAc,EACvBC,EAASC,GACb,IAAI,IAAI,2CAA4CH,EAAO,IAAI,CACjE,EAGMI,EAASC,GAAoB,mBAAoBN,CAAE,EACnDO,EAASD,GAAoB,oBAAqBN,CAAE,EAGpDQ,EAAUC,GAAqBJ,CAAK,EACpCK,EAAUC,GAAsBJ,EAAQ,CAAE,OAAAJ,EAAQ,OAAAK,CAAO,CAAC,EAChE,OAAOI,EAAMJ,EAAQE,CAAO,CAC9B,CCcO,SAASG,GACdC,EACoC,CACpC,IAAMC,EAAeC,GACnB,2DACF,EAGMC,EAAQC,GAAoB,mBAAmB,EAC/CC,EAAQD,GAAoB,mBAAmB,EAGrD,OAAAH,EAAa,UAAUK,GAAe,CACpCN,EAAG,gBAAgB,QAAQ,EAG3B,IAAMO,EAAOC,EAAW,wBAAyBR,CAAE,EACnD,QAAWS,KAAWH,EAAY,SAC5BG,EAAQ,OAAS,UACnBF,EAAK,YAAYG,GAAoBD,EAAQ,IAAI,CAAC,EAGtDF,EAAK,YAAYI,GACfL,EAAY,SAAS,OAAO,CAAC,CAAE,KAAAM,CAAK,IAClCA,IAAS,SACV,EAAE,MACL,CAAC,EAGDT,EAAM,UAAY,GAAGG,EAAY,SAAS,MAAM,GAChDD,EAAM,UAAY,KAAKC,EAAY,MAChC,SAAS,EACT,QAAQ,wBAAyB,GAAG,CACvC,UACF,CAAC,EAGML,EACJ,KACCY,EAAIC,GAAUC,GAAA,CAAE,IAAKf,GAAOc,EAAQ,CACtC,CACJ,CCrHO,SAASE,IAAuB,CACrC,GAAM,CAAE,OAAAC,CAAO,EAAI,IAAI,IAAI,SAAS,IAAI,EACxCC,EAAU,SAAS,KAAM,OAAO,EAC7B,UAAUC,GAAM,CACf,GAAIA,EAAG,kBAAkB,YAAa,CACpC,IAAMC,EAAKD,EAAG,OAAO,QAAQ,GAAG,EAC5BC,GAAMA,EAAG,SAAWH,GACtB,GAAG,OAAQ,QAAS,WAAY,QAASG,EAAG,IAAI,CACpD,CACF,CAAC,CACL,CCLAC,GAAe,EAGf,IAAMC,GAAa,UAChB,KACCC,EAAU,IAAMC,EAGd,GAAGC,GAAqB,YAAY,EACjC,IAAIC,GAAMC,GAAgBD,CAAE,CAAC,EAGhC,GAAGD,GAAqB,aAAa,EAClC,IAAIC,GAAME,GAAiBF,CAAE,CAAC,CACnC,CAAC,CACH,EAGFJ,GAAW,UAAU",
+ "names": ["require_scorer", "__commonJSMin", "exports", "AcronymResult", "computeScore", "emptyAcronymResult", "isAcronymFullWord", "isMatch", "isSeparator", "isWordEnd", "isWordStart", "miss_coeff", "pos_bonus", "scoreAcronyms", "scoreCharacter", "scoreConsecutives", "scoreExact", "scoreExactMatch", "scorePattern", "scorePosition", "scoreSize", "tau_size", "wm", "string", "query", "options", "allowErrors", "preparedQuery", "score", "string_lw", "subject", "query_lw", "query_up", "i", "j", "m", "n", "qj_lw", "qj_up", "si", "subject_lw", "acro", "acro_score", "align", "csc_diag", "csc_row", "csc_score", "csc_should_rebuild", "miss_budget", "miss_left", "pos", "record_miss", "score_diag", "score_row", "score_up", "si_lw", "start", "sz", "curr_s", "prev_s", "len", "next_s", "c", "sc", "quality", "count", "sameCase", "end", "bonus", "posBonus", "startOfWord", "k", "mi", "nj", "pos2", "fullWord", "sepCount", "sumPos", "nbAcronymInQuery", "require_pathScorer", "__commonJSMin", "exports", "computeScore", "countDir", "file_coeff", "getExtension", "getExtensionScore", "isMatch", "scorePath", "scoreSize", "tau_depth", "_ref", "string", "query", "options", "allowErrors", "preparedQuery", "score", "string_lw", "subject", "subject_lw", "fullPathScore", "alpha", "basePathScore", "basePos", "depth", "end", "extAdjust", "fileLength", "pathSeparator", "useExtensionBonus", "path", "count", "i", "str", "pos", "candidate", "ext", "startPos", "endPos", "maxDepth", "matched", "n", "require_query", "__commonJSMin", "exports", "module", "Query", "coreChars", "countDir", "getCharCodes", "getExtension", "opt_char_re", "truncatedUpperCase", "_ref", "query", "_arg", "optCharRegEx", "pathSeparator", "_ref1", "str", "char", "upper", "_i", "_len", "charCodes", "i", "len", "require_filter", "__commonJSMin", "exports", "module", "Query", "pathScorer", "pluckCandidates", "scorer", "sortCandidates", "a", "b", "candidates", "query", "options", "bKey", "candidate", "key", "maxInners", "maxResults", "score", "scoreProvider", "scoredCandidates", "spotLeft", "string", "usePathScoring", "_i", "_len", "require_matcher", "__commonJSMin", "exports", "basenameMatch", "computeMatch", "isMatch", "isWordStart", "match", "mergeMatches", "scoreAcronyms", "scoreCharacter", "scoreConsecutives", "_ref", "string", "query", "options", "allowErrors", "baseMatches", "matches", "pathSeparator", "preparedQuery", "string_lw", "matchIndex", "matchPos", "matchPositions", "output", "strPos", "tagClass", "tagClose", "tagOpen", "_ref1", "subject", "subject_lw", "basePos", "depth", "end", "a", "b", "ai", "bj", "i", "j", "m", "n", "out", "offset", "DIAGONAL", "LEFT", "STOP", "UP", "acro_score", "align", "backtrack", "csc_diag", "csc_row", "csc_score", "move", "pos", "query_lw", "score", "score_diag", "score_row", "score_up", "si_lw", "start", "trace", "require_fuzzaldrin", "__commonJSMin", "exports", "module", "Query", "defaultPathSeparator", "filter", "matcher", "parseOptions", "pathScorer", "preparedQueryCache", "scorer", "candidates", "query", "options", "string", "_i", "_ref", "_results", "extendStatics", "d", "b", "p", "__extends", "__", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "__generator", "body", "_", "t", "f", "y", "g", "verb", "n", "v", "op", "__values", "o", "s", "m", "i", "__read", "n", "r", "ar", "e", "error", "__spreadArray", "to", "from", "pack", "i", "l", "ar", "__await", "v", "__asyncGenerator", "thisArg", "_arguments", "generator", "g", "q", "verb", "n", "a", "b", "resume", "step", "e", "settle", "r", "fulfill", "reject", "value", "f", "__asyncValues", "o", "m", "i", "__values", "verb", "n", "v", "resolve", "reject", "settle", "d", "isFunction", "value", "createErrorClass", "createImpl", "_super", "instance", "ctorFunc", "UnsubscriptionError", "createErrorClass", "_super", "errors", "err", "i", "arrRemove", "arr", "item", "index", "Subscription", "initialTeardown", "errors", "_parentage", "_parentage_1", "__values", "_parentage_1_1", "parent_1", "initialFinalizer", "isFunction", "e", "UnsubscriptionError", "_finalizers", "_finalizers_1", "_finalizers_1_1", "finalizer", "execFinalizer", "err", "__spreadArray", "__read", "teardown", "_a", "parent", "arrRemove", "empty", "EMPTY_SUBSCRIPTION", "Subscription", "isSubscription", "value", "isFunction", "execFinalizer", "finalizer", "config", "timeoutProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "reportUnhandledError", "err", "timeoutProvider", "onUnhandledError", "config", "noop", "COMPLETE_NOTIFICATION", "createNotification", "errorNotification", "error", "nextNotification", "value", "kind", "context", "errorContext", "cb", "config", "isRoot", "_a", "errorThrown", "error", "captureError", "err", "Subscriber", "_super", "__extends", "destination", "_this", "isSubscription", "EMPTY_OBSERVER", "next", "error", "complete", "SafeSubscriber", "value", "handleStoppedNotification", "nextNotification", "err", "errorNotification", "COMPLETE_NOTIFICATION", "Subscription", "_bind", "bind", "fn", "thisArg", "ConsumerObserver", "partialObserver", "value", "error", "handleUnhandledError", "err", "SafeSubscriber", "_super", "__extends", "observerOrNext", "complete", "_this", "isFunction", "context_1", "config", "Subscriber", "handleUnhandledError", "error", "config", "captureError", "reportUnhandledError", "defaultErrorHandler", "err", "handleStoppedNotification", "notification", "subscriber", "onStoppedNotification", "timeoutProvider", "EMPTY_OBSERVER", "noop", "observable", "identity", "x", "pipeFromArray", "fns", "identity", "input", "prev", "fn", "Observable", "subscribe", "operator", "observable", "observerOrNext", "error", "complete", "_this", "subscriber", "isSubscriber", "SafeSubscriber", "errorContext", "_a", "source", "sink", "err", "next", "promiseCtor", "getPromiseCtor", "resolve", "reject", "value", "operations", "_i", "pipeFromArray", "x", "getPromiseCtor", "promiseCtor", "_a", "config", "isObserver", "value", "isFunction", "isSubscriber", "Subscriber", "isSubscription", "hasLift", "source", "isFunction", "operate", "init", "liftedSource", "err", "createOperatorSubscriber", "destination", "onNext", "onComplete", "onError", "onFinalize", "OperatorSubscriber", "_super", "__extends", "shouldUnsubscribe", "_this", "value", "err", "closed_1", "_a", "Subscriber", "animationFrameProvider", "callback", "request", "cancel", "delegate", "handle", "timestamp", "Subscription", "args", "_i", "__spreadArray", "__read", "ObjectUnsubscribedError", "createErrorClass", "_super", "Subject", "_super", "__extends", "_this", "operator", "subject", "AnonymousSubject", "ObjectUnsubscribedError", "value", "errorContext", "_b", "__values", "_c", "observer", "err", "observers", "_a", "subscriber", "hasError", "isStopped", "EMPTY_SUBSCRIPTION", "Subscription", "arrRemove", "thrownError", "observable", "Observable", "destination", "source", "AnonymousSubject", "_super", "__extends", "destination", "source", "_this", "value", "_b", "_a", "err", "subscriber", "EMPTY_SUBSCRIPTION", "Subject", "dateTimestampProvider", "ReplaySubject", "_super", "__extends", "_bufferSize", "_windowTime", "_timestampProvider", "dateTimestampProvider", "_this", "value", "_a", "isStopped", "_buffer", "_infiniteTimeWindow", "subscriber", "subscription", "copy", "i", "adjustedBufferSize", "now", "last", "Subject", "Action", "_super", "__extends", "scheduler", "work", "state", "delay", "Subscription", "intervalProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "AsyncAction", "_super", "__extends", "scheduler", "work", "_this", "state", "delay", "id", "_a", "_id", "intervalProvider", "_scheduler", "error", "_delay", "errored", "errorValue", "e", "actions", "arrRemove", "Action", "Scheduler", "schedulerActionCtor", "now", "work", "delay", "state", "dateTimestampProvider", "AsyncScheduler", "_super", "__extends", "SchedulerAction", "now", "Scheduler", "_this", "action", "actions", "error", "asyncScheduler", "AsyncScheduler", "AsyncAction", "async", "AnimationFrameAction", "_super", "__extends", "scheduler", "work", "_this", "id", "delay", "animationFrameProvider", "actions", "_a", "AsyncAction", "AnimationFrameScheduler", "_super", "__extends", "action", "flushId", "actions", "error", "AsyncScheduler", "animationFrameScheduler", "AnimationFrameScheduler", "AnimationFrameAction", "EMPTY", "Observable", "subscriber", "isScheduler", "value", "isFunction", "last", "arr", "popResultSelector", "args", "isFunction", "popScheduler", "isScheduler", "popNumber", "defaultValue", "isArrayLike", "x", "isPromise", "value", "isFunction", "isInteropObservable", "input", "isFunction", "observable", "isAsyncIterable", "obj", "isFunction", "createInvalidObservableTypeError", "input", "getSymbolIterator", "iterator", "isIterable", "input", "isFunction", "iterator", "readableStreamLikeToAsyncGenerator", "readableStream", "reader", "__await", "_a", "_b", "value", "done", "isReadableStreamLike", "obj", "isFunction", "innerFrom", "input", "Observable", "isInteropObservable", "fromInteropObservable", "isArrayLike", "fromArrayLike", "isPromise", "fromPromise", "isAsyncIterable", "fromAsyncIterable", "isIterable", "fromIterable", "isReadableStreamLike", "fromReadableStreamLike", "createInvalidObservableTypeError", "obj", "subscriber", "obs", "observable", "isFunction", "array", "i", "promise", "value", "err", "reportUnhandledError", "iterable", "iterable_1", "__values", "iterable_1_1", "asyncIterable", "process", "readableStream", "readableStreamLikeToAsyncGenerator", "asyncIterable_1", "__asyncValues", "asyncIterable_1_1", "executeSchedule", "parentSubscription", "scheduler", "work", "delay", "repeat", "scheduleSubscription", "observeOn", "scheduler", "delay", "operate", "source", "subscriber", "createOperatorSubscriber", "value", "executeSchedule", "err", "subscribeOn", "scheduler", "delay", "operate", "source", "subscriber", "scheduleObservable", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "schedulePromise", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "scheduleArray", "input", "scheduler", "Observable", "subscriber", "i", "scheduleIterable", "input", "scheduler", "Observable", "subscriber", "iterator", "executeSchedule", "value", "done", "_a", "err", "isFunction", "scheduleAsyncIterable", "input", "scheduler", "Observable", "subscriber", "executeSchedule", "iterator", "result", "scheduleReadableStreamLike", "input", "scheduler", "scheduleAsyncIterable", "readableStreamLikeToAsyncGenerator", "scheduled", "input", "scheduler", "isInteropObservable", "scheduleObservable", "isArrayLike", "scheduleArray", "isPromise", "schedulePromise", "isAsyncIterable", "scheduleAsyncIterable", "isIterable", "scheduleIterable", "isReadableStreamLike", "scheduleReadableStreamLike", "createInvalidObservableTypeError", "from", "input", "scheduler", "scheduled", "innerFrom", "of", "args", "_i", "scheduler", "popScheduler", "from", "throwError", "errorOrErrorFactory", "scheduler", "errorFactory", "isFunction", "init", "subscriber", "Observable", "isValidDate", "value", "map", "project", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "isArray", "callOrApply", "fn", "args", "__spreadArray", "__read", "mapOneOrManyArgs", "map", "isArray", "getPrototypeOf", "objectProto", "getKeys", "argsArgArrayOrObject", "args", "first_1", "isPOJO", "keys", "key", "obj", "createObject", "keys", "values", "result", "key", "i", "combineLatest", "args", "_i", "scheduler", "popScheduler", "resultSelector", "popResultSelector", "_a", "argsArgArrayOrObject", "observables", "keys", "from", "result", "Observable", "combineLatestInit", "values", "createObject", "identity", "mapOneOrManyArgs", "valueTransform", "subscriber", "maybeSchedule", "length", "active", "remainingFirstValues", "i", "source", "hasFirstValue", "createOperatorSubscriber", "value", "execute", "subscription", "executeSchedule", "mergeInternals", "source", "subscriber", "project", "concurrent", "onBeforeNext", "expand", "innerSubScheduler", "additionalFinalizer", "buffer", "active", "index", "isComplete", "checkComplete", "outerNext", "value", "doInnerSub", "innerComplete", "innerFrom", "createOperatorSubscriber", "innerValue", "bufferedValue", "executeSchedule", "err", "mergeMap", "project", "resultSelector", "concurrent", "isFunction", "a", "i", "map", "b", "ii", "innerFrom", "operate", "source", "subscriber", "mergeInternals", "mergeAll", "concurrent", "mergeMap", "identity", "concatAll", "mergeAll", "concat", "args", "_i", "concatAll", "from", "popScheduler", "defer", "observableFactory", "Observable", "subscriber", "innerFrom", "nodeEventEmitterMethods", "eventTargetMethods", "jqueryMethods", "fromEvent", "target", "eventName", "options", "resultSelector", "isFunction", "mapOneOrManyArgs", "_a", "__read", "isEventTarget", "methodName", "handler", "isNodeStyleEventEmitter", "toCommonHandlerRegistry", "isJQueryStyleEventEmitter", "add", "remove", "isArrayLike", "mergeMap", "subTarget", "innerFrom", "Observable", "subscriber", "args", "_i", "timer", "dueTime", "intervalOrScheduler", "scheduler", "async", "intervalDuration", "isScheduler", "Observable", "subscriber", "due", "isValidDate", "n", "merge", "args", "_i", "scheduler", "popScheduler", "concurrent", "popNumber", "sources", "innerFrom", "mergeAll", "from", "EMPTY", "NEVER", "Observable", "noop", "isArray", "argsOrArgArray", "args", "filter", "predicate", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "zip", "args", "_i", "resultSelector", "popResultSelector", "sources", "argsOrArgArray", "Observable", "subscriber", "buffers", "completed", "sourceIndex", "innerFrom", "createOperatorSubscriber", "value", "buffer", "result", "__spreadArray", "__read", "i", "EMPTY", "audit", "durationSelector", "operate", "source", "subscriber", "hasValue", "lastValue", "durationSubscriber", "isComplete", "endDuration", "value", "cleanupDuration", "createOperatorSubscriber", "innerFrom", "auditTime", "duration", "scheduler", "asyncScheduler", "audit", "timer", "bufferCount", "bufferSize", "startBufferEvery", "operate", "source", "subscriber", "buffers", "count", "createOperatorSubscriber", "value", "toEmit", "buffers_1", "__values", "buffers_1_1", "buffer", "toEmit_1", "toEmit_1_1", "arrRemove", "buffers_2", "buffers_2_1", "debounceTime", "dueTime", "scheduler", "asyncScheduler", "operate", "source", "subscriber", "activeTask", "lastValue", "lastTime", "emit", "value", "emitWhenIdle", "targetTime", "now", "createOperatorSubscriber", "take", "count", "EMPTY", "operate", "source", "subscriber", "seen", "createOperatorSubscriber", "value", "ignoreElements", "operate", "source", "subscriber", "createOperatorSubscriber", "noop", "mapTo", "value", "map", "delayWhen", "delayDurationSelector", "subscriptionDelay", "source", "concat", "take", "ignoreElements", "mergeMap", "value", "index", "innerFrom", "mapTo", "delay", "due", "scheduler", "asyncScheduler", "duration", "timer", "delayWhen", "distinctUntilChanged", "comparator", "keySelector", "identity", "defaultCompare", "operate", "source", "subscriber", "previousKey", "first", "createOperatorSubscriber", "value", "currentKey", "a", "b", "distinctUntilKeyChanged", "key", "compare", "distinctUntilChanged", "x", "y", "finalize", "callback", "operate", "source", "subscriber", "share", "options", "_a", "connector", "Subject", "_b", "resetOnError", "_c", "resetOnComplete", "_d", "resetOnRefCountZero", "wrapperSource", "connection", "resetConnection", "subject", "refCount", "hasCompleted", "hasErrored", "cancelReset", "reset", "resetAndUnsubscribe", "conn", "operate", "source", "subscriber", "dest", "handleReset", "SafeSubscriber", "value", "err", "innerFrom", "on", "args", "_i", "onSubscriber", "__spreadArray", "__read", "shareReplay", "configOrBufferSize", "windowTime", "scheduler", "bufferSize", "refCount", "_a", "_b", "_c", "share", "ReplaySubject", "startWith", "values", "_i", "scheduler", "popScheduler", "operate", "source", "subscriber", "concat", "switchMap", "project", "resultSelector", "operate", "source", "subscriber", "innerSubscriber", "index", "isComplete", "checkComplete", "createOperatorSubscriber", "value", "innerIndex", "outerIndex", "innerFrom", "innerValue", "tap", "observerOrNext", "error", "complete", "tapObserver", "isFunction", "operate", "source", "subscriber", "_a", "isUnsub", "createOperatorSubscriber", "value", "err", "_b", "identity", "withLatestFrom", "inputs", "_i", "project", "popResultSelector", "operate", "source", "subscriber", "len", "otherValues", "hasValue", "ready", "i", "innerFrom", "createOperatorSubscriber", "value", "identity", "noop", "values", "__spreadArray", "__read", "zip", "sources", "_i", "operate", "source", "subscriber", "__spreadArray", "__read", "zipWith", "otherInputs", "_i", "zip", "__spreadArray", "__read", "getElements", "selector", "node", "getElement", "el", "getOptionalElement", "getActiveElement", "observer$", "merge", "fromEvent", "debounceTime", "startWith", "map", "getActiveElement", "shareReplay", "watchElementFocus", "el", "active", "distinctUntilChanged", "getElementContentOffset", "el", "watchElementContentOffset", "merge", "fromEvent", "auditTime", "animationFrameScheduler", "map", "startWith", "appendChild", "el", "child", "node", "h", "tag", "attributes", "children", "attr", "round", "value", "digits", "watchScript", "src", "script", "h", "defer", "merge", "fromEvent", "switchMap", "throwError", "map", "finalize", "take", "entry$", "Subject", "observer$", "defer", "watchScript", "of", "map", "entries", "entry", "switchMap", "observer", "merge", "NEVER", "finalize", "shareReplay", "getElementSize", "el", "getElementContentSize", "el", "entry$", "Subject", "observer$", "defer", "of", "entries", "entry", "switchMap", "observer", "merge", "NEVER", "finalize", "shareReplay", "watchElementBoundary", "el", "threshold", "watchElementContentOffset", "map", "y", "visible", "getElementSize", "content", "getElementContentSize", "distinctUntilChanged", "toggles", "getElement", "script", "getElement", "config", "getLocation", "configuration", "translation", "key", "value", "config", "getLocation", "request", "url", "options", "Observable", "observer", "req", "event", "requestJSON", "switchMap", "res", "map", "body", "shareReplay", "getComponentElement", "type", "node", "getElement", "getComponentElements", "getElements", "mountIconSearchQuery", "el", "focus$", "watchElementFocus", "value$", "merge", "fromEvent", "delay", "map", "startWith", "distinctUntilChanged", "filter", "active", "withLatestFrom", "value", "path", "combineLatest", "focus", "import_fuzzaldrin_plus", "import_fuzzaldrin_plus", "highlight", "icon", "query", "renderIconSearchResult", "file", "h", "translation", "renderPublicSponsor", "user", "title", "h", "renderPrivateSponsor", "count", "watchIconSearchResult", "el", "index$", "query$", "combineLatest", "distinctUntilKeyChanged", "map", "icons", "icon", "value", "data", "search", "switchMap", "files", "shortcode", "emojis", "shortcodes", "category", "mountIconSearchResult", "push$", "Subject", "boundary$", "watchElementBoundary", "filter", "meta", "getElement", "withLatestFrom", "round", "file", "list", "tap", "merge", "of", "bufferCount", "zipWith", "chunk", "result", "renderIconSearchResult", "state", "finalize", "__spreadValues", "mountIconSearch", "el", "config", "configuration", "index$", "requestJSON", "query", "getComponentElement", "result", "query$", "mountIconSearchQuery", "result$", "mountIconSearchResult", "merge", "mountSponsorship", "el", "sponsorship$", "requestJSON", "count", "getComponentElement", "total", "sponsorship", "list", "getElement", "sponsor", "renderPublicSponsor", "renderPrivateSponsor", "type", "map", "state", "__spreadValues", "setupAnalytics", "origin", "fromEvent", "ev", "el", "setupAnalytics", "component$", "switchMap", "merge", "getComponentElements", "el", "mountIconSearch", "mountSponsorship"]
+}
diff --git a/dev/src/overrides/assets/javascripts/custom.ts b/dev/src/overrides/assets/javascripts/custom.ts
deleted file mode 100644
index 7c3c3847..00000000
--- a/dev/src/overrides/assets/javascripts/custom.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { merge, switchMap } from "rxjs"
-
-import {
- getComponentElements,
- mountIconSearch,
- mountSponsorship
-} from "./components"
-import { setupAnalytics } from "./integrations"
-
-/* ----------------------------------------------------------------------------
- * Application
- * ------------------------------------------------------------------------- */
-
-/* Set up extra analytics events */
-setupAnalytics()
-
-/* Set up extra component observables */
-const component$ = document$
- .pipe(
- switchMap(() => merge(
-
- /* Icon search */
- ...getComponentElements("iconsearch")
- .map(el => mountIconSearch(el)),
-
- /* Sponsorship */
- ...getComponentElements("sponsorship")
- .map(el => mountSponsorship(el))
- ))
- )
-
-/* Subscribe to all components */
-component$.subscribe()
diff --git a/dev/src/overrides/assets/javascripts/iconsearch_index.json b/dev/src/overrides/assets/javascripts/iconsearch_index.json
new file mode 100644
index 00000000..64305ef9
--- /dev/null
+++ b/dev/src/overrides/assets/javascripts/iconsearch_index.json
@@ -0,0 +1 @@
+{"icons":{"base":"https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/material/templates/.icons/","data":{"fontawesome-brands-42-group":"fontawesome/brands/42-group.svg","fontawesome-brands-500px":"fontawesome/brands/500px.svg","fontawesome-brands-accessible-icon":"fontawesome/brands/accessible-icon.svg","fontawesome-brands-accusoft":"fontawesome/brands/accusoft.svg","fontawesome-brands-adn":"fontawesome/brands/adn.svg","fontawesome-brands-adversal":"fontawesome/brands/adversal.svg","fontawesome-brands-affiliatetheme":"fontawesome/brands/affiliatetheme.svg","fontawesome-brands-airbnb":"fontawesome/brands/airbnb.svg","fontawesome-brands-algolia":"fontawesome/brands/algolia.svg","fontawesome-brands-alipay":"fontawesome/brands/alipay.svg","fontawesome-brands-amazon-pay":"fontawesome/brands/amazon-pay.svg","fontawesome-brands-amazon":"fontawesome/brands/amazon.svg","fontawesome-brands-amilia":"fontawesome/brands/amilia.svg","fontawesome-brands-android":"fontawesome/brands/android.svg","fontawesome-brands-angellist":"fontawesome/brands/angellist.svg","fontawesome-brands-angrycreative":"fontawesome/brands/angrycreative.svg","fontawesome-brands-angular":"fontawesome/brands/angular.svg","fontawesome-brands-app-store-ios":"fontawesome/brands/app-store-ios.svg","fontawesome-brands-app-store":"fontawesome/brands/app-store.svg","fontawesome-brands-apper":"fontawesome/brands/apper.svg","fontawesome-brands-apple-pay":"fontawesome/brands/apple-pay.svg","fontawesome-brands-apple":"fontawesome/brands/apple.svg","fontawesome-brands-artstation":"fontawesome/brands/artstation.svg","fontawesome-brands-asymmetrik":"fontawesome/brands/asymmetrik.svg","fontawesome-brands-atlassian":"fontawesome/brands/atlassian.svg","fontawesome-brands-audible":"fontawesome/brands/audible.svg","fontawesome-brands-autoprefixer":"fontawesome/brands/autoprefixer.svg","fontawesome-brands-avianex":"fontawesome/brands/avianex.svg","fontawesome-brands-aviato":"fontawesome/brands/aviato.svg","fontawesome-brands-aws":"fontawesome/brands/aws.svg","fontawesome-brands-bandcamp":"fontawesome/brands/bandcamp.svg","fontawesome-brands-battle-net":"fontawesome/brands/battle-net.svg","fontawesome-brands-behance":"fontawesome/brands/behance.svg","fontawesome-brands-bilibili":"fontawesome/brands/bilibili.svg","fontawesome-brands-bimobject":"fontawesome/brands/bimobject.svg","fontawesome-brands-bitbucket":"fontawesome/brands/bitbucket.svg","fontawesome-brands-bitcoin":"fontawesome/brands/bitcoin.svg","fontawesome-brands-bity":"fontawesome/brands/bity.svg","fontawesome-brands-black-tie":"fontawesome/brands/black-tie.svg","fontawesome-brands-blackberry":"fontawesome/brands/blackberry.svg","fontawesome-brands-blogger-b":"fontawesome/brands/blogger-b.svg","fontawesome-brands-blogger":"fontawesome/brands/blogger.svg","fontawesome-brands-bluetooth-b":"fontawesome/brands/bluetooth-b.svg","fontawesome-brands-bluetooth":"fontawesome/brands/bluetooth.svg","fontawesome-brands-bootstrap":"fontawesome/brands/bootstrap.svg","fontawesome-brands-bots":"fontawesome/brands/bots.svg","fontawesome-brands-btc":"fontawesome/brands/btc.svg","fontawesome-brands-buffer":"fontawesome/brands/buffer.svg","fontawesome-brands-buromobelexperte":"fontawesome/brands/buromobelexperte.svg","fontawesome-brands-buy-n-large":"fontawesome/brands/buy-n-large.svg","fontawesome-brands-buysellads":"fontawesome/brands/buysellads.svg","fontawesome-brands-canadian-maple-leaf":"fontawesome/brands/canadian-maple-leaf.svg","fontawesome-brands-cc-amazon-pay":"fontawesome/brands/cc-amazon-pay.svg","fontawesome-brands-cc-amex":"fontawesome/brands/cc-amex.svg","fontawesome-brands-cc-apple-pay":"fontawesome/brands/cc-apple-pay.svg","fontawesome-brands-cc-diners-club":"fontawesome/brands/cc-diners-club.svg","fontawesome-brands-cc-discover":"fontawesome/brands/cc-discover.svg","fontawesome-brands-cc-jcb":"fontawesome/brands/cc-jcb.svg","fontawesome-brands-cc-mastercard":"fontawesome/brands/cc-mastercard.svg","fontawesome-brands-cc-paypal":"fontawesome/brands/cc-paypal.svg","fontawesome-brands-cc-stripe":"fontawesome/brands/cc-stripe.svg","fontawesome-brands-cc-visa":"fontawesome/brands/cc-visa.svg","fontawesome-brands-centercode":"fontawesome/brands/centercode.svg","fontawesome-brands-centos":"fontawesome/brands/centos.svg","fontawesome-brands-chrome":"fontawesome/brands/chrome.svg","fontawesome-brands-chromecast":"fontawesome/brands/chromecast.svg","fontawesome-brands-cloudflare":"fontawesome/brands/cloudflare.svg","fontawesome-brands-cloudscale":"fontawesome/brands/cloudscale.svg","fontawesome-brands-cloudsmith":"fontawesome/brands/cloudsmith.svg","fontawesome-brands-cloudversify":"fontawesome/brands/cloudversify.svg","fontawesome-brands-cmplid":"fontawesome/brands/cmplid.svg","fontawesome-brands-codepen":"fontawesome/brands/codepen.svg","fontawesome-brands-codiepie":"fontawesome/brands/codiepie.svg","fontawesome-brands-confluence":"fontawesome/brands/confluence.svg","fontawesome-brands-connectdevelop":"fontawesome/brands/connectdevelop.svg","fontawesome-brands-contao":"fontawesome/brands/contao.svg","fontawesome-brands-cotton-bureau":"fontawesome/brands/cotton-bureau.svg","fontawesome-brands-cpanel":"fontawesome/brands/cpanel.svg","fontawesome-brands-creative-commons-by":"fontawesome/brands/creative-commons-by.svg","fontawesome-brands-creative-commons-nc-eu":"fontawesome/brands/creative-commons-nc-eu.svg","fontawesome-brands-creative-commons-nc-jp":"fontawesome/brands/creative-commons-nc-jp.svg","fontawesome-brands-creative-commons-nc":"fontawesome/brands/creative-commons-nc.svg","fontawesome-brands-creative-commons-nd":"fontawesome/brands/creative-commons-nd.svg","fontawesome-brands-creative-commons-pd-alt":"fontawesome/brands/creative-commons-pd-alt.svg","fontawesome-brands-creative-commons-pd":"fontawesome/brands/creative-commons-pd.svg","fontawesome-brands-creative-commons-remix":"fontawesome/brands/creative-commons-remix.svg","fontawesome-brands-creative-commons-sa":"fontawesome/brands/creative-commons-sa.svg","fontawesome-brands-creative-commons-sampling-plus":"fontawesome/brands/creative-commons-sampling-plus.svg","fontawesome-brands-creative-commons-sampling":"fontawesome/brands/creative-commons-sampling.svg","fontawesome-brands-creative-commons-share":"fontawesome/brands/creative-commons-share.svg","fontawesome-brands-creative-commons-zero":"fontawesome/brands/creative-commons-zero.svg","fontawesome-brands-creative-commons":"fontawesome/brands/creative-commons.svg","fontawesome-brands-critical-role":"fontawesome/brands/critical-role.svg","fontawesome-brands-css3-alt":"fontawesome/brands/css3-alt.svg","fontawesome-brands-css3":"fontawesome/brands/css3.svg","fontawesome-brands-cuttlefish":"fontawesome/brands/cuttlefish.svg","fontawesome-brands-d-and-d-beyond":"fontawesome/brands/d-and-d-beyond.svg","fontawesome-brands-d-and-d":"fontawesome/brands/d-and-d.svg","fontawesome-brands-dailymotion":"fontawesome/brands/dailymotion.svg","fontawesome-brands-dashcube":"fontawesome/brands/dashcube.svg","fontawesome-brands-debian":"fontawesome/brands/debian.svg","fontawesome-brands-deezer":"fontawesome/brands/deezer.svg","fontawesome-brands-delicious":"fontawesome/brands/delicious.svg","fontawesome-brands-deploydog":"fontawesome/brands/deploydog.svg","fontawesome-brands-deskpro":"fontawesome/brands/deskpro.svg","fontawesome-brands-dev":"fontawesome/brands/dev.svg","fontawesome-brands-deviantart":"fontawesome/brands/deviantart.svg","fontawesome-brands-dhl":"fontawesome/brands/dhl.svg","fontawesome-brands-diaspora":"fontawesome/brands/diaspora.svg","fontawesome-brands-digg":"fontawesome/brands/digg.svg","fontawesome-brands-digital-ocean":"fontawesome/brands/digital-ocean.svg","fontawesome-brands-discord":"fontawesome/brands/discord.svg","fontawesome-brands-discourse":"fontawesome/brands/discourse.svg","fontawesome-brands-dochub":"fontawesome/brands/dochub.svg","fontawesome-brands-docker":"fontawesome/brands/docker.svg","fontawesome-brands-draft2digital":"fontawesome/brands/draft2digital.svg","fontawesome-brands-dribbble":"fontawesome/brands/dribbble.svg","fontawesome-brands-dropbox":"fontawesome/brands/dropbox.svg","fontawesome-brands-drupal":"fontawesome/brands/drupal.svg","fontawesome-brands-dyalog":"fontawesome/brands/dyalog.svg","fontawesome-brands-earlybirds":"fontawesome/brands/earlybirds.svg","fontawesome-brands-ebay":"fontawesome/brands/ebay.svg","fontawesome-brands-edge-legacy":"fontawesome/brands/edge-legacy.svg","fontawesome-brands-edge":"fontawesome/brands/edge.svg","fontawesome-brands-elementor":"fontawesome/brands/elementor.svg","fontawesome-brands-ello":"fontawesome/brands/ello.svg","fontawesome-brands-ember":"fontawesome/brands/ember.svg","fontawesome-brands-empire":"fontawesome/brands/empire.svg","fontawesome-brands-envira":"fontawesome/brands/envira.svg","fontawesome-brands-erlang":"fontawesome/brands/erlang.svg","fontawesome-brands-ethereum":"fontawesome/brands/ethereum.svg","fontawesome-brands-etsy":"fontawesome/brands/etsy.svg","fontawesome-brands-evernote":"fontawesome/brands/evernote.svg","fontawesome-brands-expeditedssl":"fontawesome/brands/expeditedssl.svg","fontawesome-brands-facebook-f":"fontawesome/brands/facebook-f.svg","fontawesome-brands-facebook-messenger":"fontawesome/brands/facebook-messenger.svg","fontawesome-brands-facebook":"fontawesome/brands/facebook.svg","fontawesome-brands-fantasy-flight-games":"fontawesome/brands/fantasy-flight-games.svg","fontawesome-brands-fedex":"fontawesome/brands/fedex.svg","fontawesome-brands-fedora":"fontawesome/brands/fedora.svg","fontawesome-brands-figma":"fontawesome/brands/figma.svg","fontawesome-brands-firefox-browser":"fontawesome/brands/firefox-browser.svg","fontawesome-brands-firefox":"fontawesome/brands/firefox.svg","fontawesome-brands-first-order-alt":"fontawesome/brands/first-order-alt.svg","fontawesome-brands-first-order":"fontawesome/brands/first-order.svg","fontawesome-brands-firstdraft":"fontawesome/brands/firstdraft.svg","fontawesome-brands-flickr":"fontawesome/brands/flickr.svg","fontawesome-brands-flipboard":"fontawesome/brands/flipboard.svg","fontawesome-brands-fly":"fontawesome/brands/fly.svg","fontawesome-brands-font-awesome":"fontawesome/brands/font-awesome.svg","fontawesome-brands-fonticons-fi":"fontawesome/brands/fonticons-fi.svg","fontawesome-brands-fonticons":"fontawesome/brands/fonticons.svg","fontawesome-brands-fort-awesome-alt":"fontawesome/brands/fort-awesome-alt.svg","fontawesome-brands-fort-awesome":"fontawesome/brands/fort-awesome.svg","fontawesome-brands-forumbee":"fontawesome/brands/forumbee.svg","fontawesome-brands-foursquare":"fontawesome/brands/foursquare.svg","fontawesome-brands-free-code-camp":"fontawesome/brands/free-code-camp.svg","fontawesome-brands-freebsd":"fontawesome/brands/freebsd.svg","fontawesome-brands-fulcrum":"fontawesome/brands/fulcrum.svg","fontawesome-brands-galactic-republic":"fontawesome/brands/galactic-republic.svg","fontawesome-brands-galactic-senate":"fontawesome/brands/galactic-senate.svg","fontawesome-brands-get-pocket":"fontawesome/brands/get-pocket.svg","fontawesome-brands-gg-circle":"fontawesome/brands/gg-circle.svg","fontawesome-brands-gg":"fontawesome/brands/gg.svg","fontawesome-brands-git-alt":"fontawesome/brands/git-alt.svg","fontawesome-brands-git":"fontawesome/brands/git.svg","fontawesome-brands-github-alt":"fontawesome/brands/github-alt.svg","fontawesome-brands-github":"fontawesome/brands/github.svg","fontawesome-brands-gitkraken":"fontawesome/brands/gitkraken.svg","fontawesome-brands-gitlab":"fontawesome/brands/gitlab.svg","fontawesome-brands-gitter":"fontawesome/brands/gitter.svg","fontawesome-brands-glide-g":"fontawesome/brands/glide-g.svg","fontawesome-brands-glide":"fontawesome/brands/glide.svg","fontawesome-brands-gofore":"fontawesome/brands/gofore.svg","fontawesome-brands-golang":"fontawesome/brands/golang.svg","fontawesome-brands-goodreads-g":"fontawesome/brands/goodreads-g.svg","fontawesome-brands-goodreads":"fontawesome/brands/goodreads.svg","fontawesome-brands-google-drive":"fontawesome/brands/google-drive.svg","fontawesome-brands-google-pay":"fontawesome/brands/google-pay.svg","fontawesome-brands-google-play":"fontawesome/brands/google-play.svg","fontawesome-brands-google-plus-g":"fontawesome/brands/google-plus-g.svg","fontawesome-brands-google-plus":"fontawesome/brands/google-plus.svg","fontawesome-brands-google-wallet":"fontawesome/brands/google-wallet.svg","fontawesome-brands-google":"fontawesome/brands/google.svg","fontawesome-brands-gratipay":"fontawesome/brands/gratipay.svg","fontawesome-brands-grav":"fontawesome/brands/grav.svg","fontawesome-brands-gripfire":"fontawesome/brands/gripfire.svg","fontawesome-brands-grunt":"fontawesome/brands/grunt.svg","fontawesome-brands-guilded":"fontawesome/brands/guilded.svg","fontawesome-brands-gulp":"fontawesome/brands/gulp.svg","fontawesome-brands-hacker-news":"fontawesome/brands/hacker-news.svg","fontawesome-brands-hackerrank":"fontawesome/brands/hackerrank.svg","fontawesome-brands-hashnode":"fontawesome/brands/hashnode.svg","fontawesome-brands-hips":"fontawesome/brands/hips.svg","fontawesome-brands-hire-a-helper":"fontawesome/brands/hire-a-helper.svg","fontawesome-brands-hive":"fontawesome/brands/hive.svg","fontawesome-brands-hooli":"fontawesome/brands/hooli.svg","fontawesome-brands-hornbill":"fontawesome/brands/hornbill.svg","fontawesome-brands-hotjar":"fontawesome/brands/hotjar.svg","fontawesome-brands-houzz":"fontawesome/brands/houzz.svg","fontawesome-brands-html5":"fontawesome/brands/html5.svg","fontawesome-brands-hubspot":"fontawesome/brands/hubspot.svg","fontawesome-brands-ideal":"fontawesome/brands/ideal.svg","fontawesome-brands-imdb":"fontawesome/brands/imdb.svg","fontawesome-brands-instagram":"fontawesome/brands/instagram.svg","fontawesome-brands-instalod":"fontawesome/brands/instalod.svg","fontawesome-brands-intercom":"fontawesome/brands/intercom.svg","fontawesome-brands-internet-explorer":"fontawesome/brands/internet-explorer.svg","fontawesome-brands-invision":"fontawesome/brands/invision.svg","fontawesome-brands-ioxhost":"fontawesome/brands/ioxhost.svg","fontawesome-brands-itch-io":"fontawesome/brands/itch-io.svg","fontawesome-brands-itunes-note":"fontawesome/brands/itunes-note.svg","fontawesome-brands-itunes":"fontawesome/brands/itunes.svg","fontawesome-brands-java":"fontawesome/brands/java.svg","fontawesome-brands-jedi-order":"fontawesome/brands/jedi-order.svg","fontawesome-brands-jenkins":"fontawesome/brands/jenkins.svg","fontawesome-brands-jira":"fontawesome/brands/jira.svg","fontawesome-brands-joget":"fontawesome/brands/joget.svg","fontawesome-brands-joomla":"fontawesome/brands/joomla.svg","fontawesome-brands-js":"fontawesome/brands/js.svg","fontawesome-brands-jsfiddle":"fontawesome/brands/jsfiddle.svg","fontawesome-brands-kaggle":"fontawesome/brands/kaggle.svg","fontawesome-brands-keybase":"fontawesome/brands/keybase.svg","fontawesome-brands-keycdn":"fontawesome/brands/keycdn.svg","fontawesome-brands-kickstarter-k":"fontawesome/brands/kickstarter-k.svg","fontawesome-brands-kickstarter":"fontawesome/brands/kickstarter.svg","fontawesome-brands-korvue":"fontawesome/brands/korvue.svg","fontawesome-brands-laravel":"fontawesome/brands/laravel.svg","fontawesome-brands-lastfm":"fontawesome/brands/lastfm.svg","fontawesome-brands-leanpub":"fontawesome/brands/leanpub.svg","fontawesome-brands-less":"fontawesome/brands/less.svg","fontawesome-brands-line":"fontawesome/brands/line.svg","fontawesome-brands-linkedin-in":"fontawesome/brands/linkedin-in.svg","fontawesome-brands-linkedin":"fontawesome/brands/linkedin.svg","fontawesome-brands-linode":"fontawesome/brands/linode.svg","fontawesome-brands-linux":"fontawesome/brands/linux.svg","fontawesome-brands-lyft":"fontawesome/brands/lyft.svg","fontawesome-brands-magento":"fontawesome/brands/magento.svg","fontawesome-brands-mailchimp":"fontawesome/brands/mailchimp.svg","fontawesome-brands-mandalorian":"fontawesome/brands/mandalorian.svg","fontawesome-brands-markdown":"fontawesome/brands/markdown.svg","fontawesome-brands-mastodon":"fontawesome/brands/mastodon.svg","fontawesome-brands-maxcdn":"fontawesome/brands/maxcdn.svg","fontawesome-brands-mdb":"fontawesome/brands/mdb.svg","fontawesome-brands-medapps":"fontawesome/brands/medapps.svg","fontawesome-brands-medium":"fontawesome/brands/medium.svg","fontawesome-brands-medrt":"fontawesome/brands/medrt.svg","fontawesome-brands-meetup":"fontawesome/brands/meetup.svg","fontawesome-brands-megaport":"fontawesome/brands/megaport.svg","fontawesome-brands-mendeley":"fontawesome/brands/mendeley.svg","fontawesome-brands-meta":"fontawesome/brands/meta.svg","fontawesome-brands-microblog":"fontawesome/brands/microblog.svg","fontawesome-brands-microsoft":"fontawesome/brands/microsoft.svg","fontawesome-brands-mix":"fontawesome/brands/mix.svg","fontawesome-brands-mixcloud":"fontawesome/brands/mixcloud.svg","fontawesome-brands-mixer":"fontawesome/brands/mixer.svg","fontawesome-brands-mizuni":"fontawesome/brands/mizuni.svg","fontawesome-brands-modx":"fontawesome/brands/modx.svg","fontawesome-brands-monero":"fontawesome/brands/monero.svg","fontawesome-brands-napster":"fontawesome/brands/napster.svg","fontawesome-brands-neos":"fontawesome/brands/neos.svg","fontawesome-brands-nfc-directional":"fontawesome/brands/nfc-directional.svg","fontawesome-brands-nfc-symbol":"fontawesome/brands/nfc-symbol.svg","fontawesome-brands-nimblr":"fontawesome/brands/nimblr.svg","fontawesome-brands-node-js":"fontawesome/brands/node-js.svg","fontawesome-brands-node":"fontawesome/brands/node.svg","fontawesome-brands-npm":"fontawesome/brands/npm.svg","fontawesome-brands-ns8":"fontawesome/brands/ns8.svg","fontawesome-brands-nutritionix":"fontawesome/brands/nutritionix.svg","fontawesome-brands-octopus-deploy":"fontawesome/brands/octopus-deploy.svg","fontawesome-brands-odnoklassniki":"fontawesome/brands/odnoklassniki.svg","fontawesome-brands-odysee":"fontawesome/brands/odysee.svg","fontawesome-brands-old-republic":"fontawesome/brands/old-republic.svg","fontawesome-brands-opencart":"fontawesome/brands/opencart.svg","fontawesome-brands-openid":"fontawesome/brands/openid.svg","fontawesome-brands-opera":"fontawesome/brands/opera.svg","fontawesome-brands-optin-monster":"fontawesome/brands/optin-monster.svg","fontawesome-brands-orcid":"fontawesome/brands/orcid.svg","fontawesome-brands-osi":"fontawesome/brands/osi.svg","fontawesome-brands-padlet":"fontawesome/brands/padlet.svg","fontawesome-brands-page4":"fontawesome/brands/page4.svg","fontawesome-brands-pagelines":"fontawesome/brands/pagelines.svg","fontawesome-brands-palfed":"fontawesome/brands/palfed.svg","fontawesome-brands-patreon":"fontawesome/brands/patreon.svg","fontawesome-brands-paypal":"fontawesome/brands/paypal.svg","fontawesome-brands-perbyte":"fontawesome/brands/perbyte.svg","fontawesome-brands-periscope":"fontawesome/brands/periscope.svg","fontawesome-brands-phabricator":"fontawesome/brands/phabricator.svg","fontawesome-brands-phoenix-framework":"fontawesome/brands/phoenix-framework.svg","fontawesome-brands-phoenix-squadron":"fontawesome/brands/phoenix-squadron.svg","fontawesome-brands-php":"fontawesome/brands/php.svg","fontawesome-brands-pied-piper-alt":"fontawesome/brands/pied-piper-alt.svg","fontawesome-brands-pied-piper-hat":"fontawesome/brands/pied-piper-hat.svg","fontawesome-brands-pied-piper-pp":"fontawesome/brands/pied-piper-pp.svg","fontawesome-brands-pied-piper":"fontawesome/brands/pied-piper.svg","fontawesome-brands-pinterest-p":"fontawesome/brands/pinterest-p.svg","fontawesome-brands-pinterest":"fontawesome/brands/pinterest.svg","fontawesome-brands-pix":"fontawesome/brands/pix.svg","fontawesome-brands-playstation":"fontawesome/brands/playstation.svg","fontawesome-brands-product-hunt":"fontawesome/brands/product-hunt.svg","fontawesome-brands-pushed":"fontawesome/brands/pushed.svg","fontawesome-brands-python":"fontawesome/brands/python.svg","fontawesome-brands-qq":"fontawesome/brands/qq.svg","fontawesome-brands-quinscape":"fontawesome/brands/quinscape.svg","fontawesome-brands-quora":"fontawesome/brands/quora.svg","fontawesome-brands-r-project":"fontawesome/brands/r-project.svg","fontawesome-brands-raspberry-pi":"fontawesome/brands/raspberry-pi.svg","fontawesome-brands-ravelry":"fontawesome/brands/ravelry.svg","fontawesome-brands-react":"fontawesome/brands/react.svg","fontawesome-brands-reacteurope":"fontawesome/brands/reacteurope.svg","fontawesome-brands-readme":"fontawesome/brands/readme.svg","fontawesome-brands-rebel":"fontawesome/brands/rebel.svg","fontawesome-brands-red-river":"fontawesome/brands/red-river.svg","fontawesome-brands-reddit-alien":"fontawesome/brands/reddit-alien.svg","fontawesome-brands-reddit":"fontawesome/brands/reddit.svg","fontawesome-brands-redhat":"fontawesome/brands/redhat.svg","fontawesome-brands-renren":"fontawesome/brands/renren.svg","fontawesome-brands-replyd":"fontawesome/brands/replyd.svg","fontawesome-brands-researchgate":"fontawesome/brands/researchgate.svg","fontawesome-brands-resolving":"fontawesome/brands/resolving.svg","fontawesome-brands-rev":"fontawesome/brands/rev.svg","fontawesome-brands-rocketchat":"fontawesome/brands/rocketchat.svg","fontawesome-brands-rockrms":"fontawesome/brands/rockrms.svg","fontawesome-brands-rust":"fontawesome/brands/rust.svg","fontawesome-brands-safari":"fontawesome/brands/safari.svg","fontawesome-brands-salesforce":"fontawesome/brands/salesforce.svg","fontawesome-brands-sass":"fontawesome/brands/sass.svg","fontawesome-brands-schlix":"fontawesome/brands/schlix.svg","fontawesome-brands-screenpal":"fontawesome/brands/screenpal.svg","fontawesome-brands-scribd":"fontawesome/brands/scribd.svg","fontawesome-brands-searchengin":"fontawesome/brands/searchengin.svg","fontawesome-brands-sellcast":"fontawesome/brands/sellcast.svg","fontawesome-brands-sellsy":"fontawesome/brands/sellsy.svg","fontawesome-brands-servicestack":"fontawesome/brands/servicestack.svg","fontawesome-brands-shirtsinbulk":"fontawesome/brands/shirtsinbulk.svg","fontawesome-brands-shopify":"fontawesome/brands/shopify.svg","fontawesome-brands-shopware":"fontawesome/brands/shopware.svg","fontawesome-brands-simplybuilt":"fontawesome/brands/simplybuilt.svg","fontawesome-brands-sistrix":"fontawesome/brands/sistrix.svg","fontawesome-brands-sith":"fontawesome/brands/sith.svg","fontawesome-brands-sitrox":"fontawesome/brands/sitrox.svg","fontawesome-brands-sketch":"fontawesome/brands/sketch.svg","fontawesome-brands-skyatlas":"fontawesome/brands/skyatlas.svg","fontawesome-brands-skype":"fontawesome/brands/skype.svg","fontawesome-brands-slack":"fontawesome/brands/slack.svg","fontawesome-brands-slideshare":"fontawesome/brands/slideshare.svg","fontawesome-brands-snapchat":"fontawesome/brands/snapchat.svg","fontawesome-brands-soundcloud":"fontawesome/brands/soundcloud.svg","fontawesome-brands-sourcetree":"fontawesome/brands/sourcetree.svg","fontawesome-brands-space-awesome":"fontawesome/brands/space-awesome.svg","fontawesome-brands-speakap":"fontawesome/brands/speakap.svg","fontawesome-brands-speaker-deck":"fontawesome/brands/speaker-deck.svg","fontawesome-brands-spotify":"fontawesome/brands/spotify.svg","fontawesome-brands-square-behance":"fontawesome/brands/square-behance.svg","fontawesome-brands-square-dribbble":"fontawesome/brands/square-dribbble.svg","fontawesome-brands-square-facebook":"fontawesome/brands/square-facebook.svg","fontawesome-brands-square-font-awesome-stroke":"fontawesome/brands/square-font-awesome-stroke.svg","fontawesome-brands-square-font-awesome":"fontawesome/brands/square-font-awesome.svg","fontawesome-brands-square-git":"fontawesome/brands/square-git.svg","fontawesome-brands-square-github":"fontawesome/brands/square-github.svg","fontawesome-brands-square-gitlab":"fontawesome/brands/square-gitlab.svg","fontawesome-brands-square-google-plus":"fontawesome/brands/square-google-plus.svg","fontawesome-brands-square-hacker-news":"fontawesome/brands/square-hacker-news.svg","fontawesome-brands-square-instagram":"fontawesome/brands/square-instagram.svg","fontawesome-brands-square-js":"fontawesome/brands/square-js.svg","fontawesome-brands-square-lastfm":"fontawesome/brands/square-lastfm.svg","fontawesome-brands-square-odnoklassniki":"fontawesome/brands/square-odnoklassniki.svg","fontawesome-brands-square-pied-piper":"fontawesome/brands/square-pied-piper.svg","fontawesome-brands-square-pinterest":"fontawesome/brands/square-pinterest.svg","fontawesome-brands-square-reddit":"fontawesome/brands/square-reddit.svg","fontawesome-brands-square-snapchat":"fontawesome/brands/square-snapchat.svg","fontawesome-brands-square-steam":"fontawesome/brands/square-steam.svg","fontawesome-brands-square-threads":"fontawesome/brands/square-threads.svg","fontawesome-brands-square-tumblr":"fontawesome/brands/square-tumblr.svg","fontawesome-brands-square-twitter":"fontawesome/brands/square-twitter.svg","fontawesome-brands-square-viadeo":"fontawesome/brands/square-viadeo.svg","fontawesome-brands-square-vimeo":"fontawesome/brands/square-vimeo.svg","fontawesome-brands-square-whatsapp":"fontawesome/brands/square-whatsapp.svg","fontawesome-brands-square-x-twitter":"fontawesome/brands/square-x-twitter.svg","fontawesome-brands-square-xing":"fontawesome/brands/square-xing.svg","fontawesome-brands-square-youtube":"fontawesome/brands/square-youtube.svg","fontawesome-brands-squarespace":"fontawesome/brands/squarespace.svg","fontawesome-brands-stack-exchange":"fontawesome/brands/stack-exchange.svg","fontawesome-brands-stack-overflow":"fontawesome/brands/stack-overflow.svg","fontawesome-brands-stackpath":"fontawesome/brands/stackpath.svg","fontawesome-brands-staylinked":"fontawesome/brands/staylinked.svg","fontawesome-brands-steam-symbol":"fontawesome/brands/steam-symbol.svg","fontawesome-brands-steam":"fontawesome/brands/steam.svg","fontawesome-brands-sticker-mule":"fontawesome/brands/sticker-mule.svg","fontawesome-brands-strava":"fontawesome/brands/strava.svg","fontawesome-brands-stripe-s":"fontawesome/brands/stripe-s.svg","fontawesome-brands-stripe":"fontawesome/brands/stripe.svg","fontawesome-brands-stubber":"fontawesome/brands/stubber.svg","fontawesome-brands-studiovinari":"fontawesome/brands/studiovinari.svg","fontawesome-brands-stumbleupon-circle":"fontawesome/brands/stumbleupon-circle.svg","fontawesome-brands-stumbleupon":"fontawesome/brands/stumbleupon.svg","fontawesome-brands-superpowers":"fontawesome/brands/superpowers.svg","fontawesome-brands-supple":"fontawesome/brands/supple.svg","fontawesome-brands-suse":"fontawesome/brands/suse.svg","fontawesome-brands-swift":"fontawesome/brands/swift.svg","fontawesome-brands-symfony":"fontawesome/brands/symfony.svg","fontawesome-brands-teamspeak":"fontawesome/brands/teamspeak.svg","fontawesome-brands-telegram":"fontawesome/brands/telegram.svg","fontawesome-brands-tencent-weibo":"fontawesome/brands/tencent-weibo.svg","fontawesome-brands-the-red-yeti":"fontawesome/brands/the-red-yeti.svg","fontawesome-brands-themeco":"fontawesome/brands/themeco.svg","fontawesome-brands-themeisle":"fontawesome/brands/themeisle.svg","fontawesome-brands-think-peaks":"fontawesome/brands/think-peaks.svg","fontawesome-brands-threads":"fontawesome/brands/threads.svg","fontawesome-brands-tiktok":"fontawesome/brands/tiktok.svg","fontawesome-brands-trade-federation":"fontawesome/brands/trade-federation.svg","fontawesome-brands-trello":"fontawesome/brands/trello.svg","fontawesome-brands-tumblr":"fontawesome/brands/tumblr.svg","fontawesome-brands-twitch":"fontawesome/brands/twitch.svg","fontawesome-brands-twitter":"fontawesome/brands/twitter.svg","fontawesome-brands-typo3":"fontawesome/brands/typo3.svg","fontawesome-brands-uber":"fontawesome/brands/uber.svg","fontawesome-brands-ubuntu":"fontawesome/brands/ubuntu.svg","fontawesome-brands-uikit":"fontawesome/brands/uikit.svg","fontawesome-brands-umbraco":"fontawesome/brands/umbraco.svg","fontawesome-brands-uncharted":"fontawesome/brands/uncharted.svg","fontawesome-brands-uniregistry":"fontawesome/brands/uniregistry.svg","fontawesome-brands-unity":"fontawesome/brands/unity.svg","fontawesome-brands-unsplash":"fontawesome/brands/unsplash.svg","fontawesome-brands-untappd":"fontawesome/brands/untappd.svg","fontawesome-brands-ups":"fontawesome/brands/ups.svg","fontawesome-brands-usb":"fontawesome/brands/usb.svg","fontawesome-brands-usps":"fontawesome/brands/usps.svg","fontawesome-brands-ussunnah":"fontawesome/brands/ussunnah.svg","fontawesome-brands-vaadin":"fontawesome/brands/vaadin.svg","fontawesome-brands-viacoin":"fontawesome/brands/viacoin.svg","fontawesome-brands-viadeo":"fontawesome/brands/viadeo.svg","fontawesome-brands-viber":"fontawesome/brands/viber.svg","fontawesome-brands-vimeo-v":"fontawesome/brands/vimeo-v.svg","fontawesome-brands-vimeo":"fontawesome/brands/vimeo.svg","fontawesome-brands-vine":"fontawesome/brands/vine.svg","fontawesome-brands-vk":"fontawesome/brands/vk.svg","fontawesome-brands-vnv":"fontawesome/brands/vnv.svg","fontawesome-brands-vuejs":"fontawesome/brands/vuejs.svg","fontawesome-brands-watchman-monitoring":"fontawesome/brands/watchman-monitoring.svg","fontawesome-brands-waze":"fontawesome/brands/waze.svg","fontawesome-brands-weebly":"fontawesome/brands/weebly.svg","fontawesome-brands-weibo":"fontawesome/brands/weibo.svg","fontawesome-brands-weixin":"fontawesome/brands/weixin.svg","fontawesome-brands-whatsapp":"fontawesome/brands/whatsapp.svg","fontawesome-brands-whmcs":"fontawesome/brands/whmcs.svg","fontawesome-brands-wikipedia-w":"fontawesome/brands/wikipedia-w.svg","fontawesome-brands-windows":"fontawesome/brands/windows.svg","fontawesome-brands-wirsindhandwerk":"fontawesome/brands/wirsindhandwerk.svg","fontawesome-brands-wix":"fontawesome/brands/wix.svg","fontawesome-brands-wizards-of-the-coast":"fontawesome/brands/wizards-of-the-coast.svg","fontawesome-brands-wodu":"fontawesome/brands/wodu.svg","fontawesome-brands-wolf-pack-battalion":"fontawesome/brands/wolf-pack-battalion.svg","fontawesome-brands-wordpress-simple":"fontawesome/brands/wordpress-simple.svg","fontawesome-brands-wordpress":"fontawesome/brands/wordpress.svg","fontawesome-brands-wpbeginner":"fontawesome/brands/wpbeginner.svg","fontawesome-brands-wpexplorer":"fontawesome/brands/wpexplorer.svg","fontawesome-brands-wpforms":"fontawesome/brands/wpforms.svg","fontawesome-brands-wpressr":"fontawesome/brands/wpressr.svg","fontawesome-brands-x-twitter":"fontawesome/brands/x-twitter.svg","fontawesome-brands-xbox":"fontawesome/brands/xbox.svg","fontawesome-brands-xing":"fontawesome/brands/xing.svg","fontawesome-brands-y-combinator":"fontawesome/brands/y-combinator.svg","fontawesome-brands-yahoo":"fontawesome/brands/yahoo.svg","fontawesome-brands-yammer":"fontawesome/brands/yammer.svg","fontawesome-brands-yandex-international":"fontawesome/brands/yandex-international.svg","fontawesome-brands-yandex":"fontawesome/brands/yandex.svg","fontawesome-brands-yarn":"fontawesome/brands/yarn.svg","fontawesome-brands-yelp":"fontawesome/brands/yelp.svg","fontawesome-brands-yoast":"fontawesome/brands/yoast.svg","fontawesome-brands-youtube":"fontawesome/brands/youtube.svg","fontawesome-brands-zhihu":"fontawesome/brands/zhihu.svg","fontawesome-regular-address-book":"fontawesome/regular/address-book.svg","fontawesome-regular-address-card":"fontawesome/regular/address-card.svg","fontawesome-regular-bell-slash":"fontawesome/regular/bell-slash.svg","fontawesome-regular-bell":"fontawesome/regular/bell.svg","fontawesome-regular-bookmark":"fontawesome/regular/bookmark.svg","fontawesome-regular-building":"fontawesome/regular/building.svg","fontawesome-regular-calendar-check":"fontawesome/regular/calendar-check.svg","fontawesome-regular-calendar-days":"fontawesome/regular/calendar-days.svg","fontawesome-regular-calendar-minus":"fontawesome/regular/calendar-minus.svg","fontawesome-regular-calendar-plus":"fontawesome/regular/calendar-plus.svg","fontawesome-regular-calendar-xmark":"fontawesome/regular/calendar-xmark.svg","fontawesome-regular-calendar":"fontawesome/regular/calendar.svg","fontawesome-regular-chart-bar":"fontawesome/regular/chart-bar.svg","fontawesome-regular-chess-bishop":"fontawesome/regular/chess-bishop.svg","fontawesome-regular-chess-king":"fontawesome/regular/chess-king.svg","fontawesome-regular-chess-knight":"fontawesome/regular/chess-knight.svg","fontawesome-regular-chess-pawn":"fontawesome/regular/chess-pawn.svg","fontawesome-regular-chess-queen":"fontawesome/regular/chess-queen.svg","fontawesome-regular-chess-rook":"fontawesome/regular/chess-rook.svg","fontawesome-regular-circle-check":"fontawesome/regular/circle-check.svg","fontawesome-regular-circle-dot":"fontawesome/regular/circle-dot.svg","fontawesome-regular-circle-down":"fontawesome/regular/circle-down.svg","fontawesome-regular-circle-left":"fontawesome/regular/circle-left.svg","fontawesome-regular-circle-pause":"fontawesome/regular/circle-pause.svg","fontawesome-regular-circle-play":"fontawesome/regular/circle-play.svg","fontawesome-regular-circle-question":"fontawesome/regular/circle-question.svg","fontawesome-regular-circle-right":"fontawesome/regular/circle-right.svg","fontawesome-regular-circle-stop":"fontawesome/regular/circle-stop.svg","fontawesome-regular-circle-up":"fontawesome/regular/circle-up.svg","fontawesome-regular-circle-user":"fontawesome/regular/circle-user.svg","fontawesome-regular-circle-xmark":"fontawesome/regular/circle-xmark.svg","fontawesome-regular-circle":"fontawesome/regular/circle.svg","fontawesome-regular-clipboard":"fontawesome/regular/clipboard.svg","fontawesome-regular-clock":"fontawesome/regular/clock.svg","fontawesome-regular-clone":"fontawesome/regular/clone.svg","fontawesome-regular-closed-captioning":"fontawesome/regular/closed-captioning.svg","fontawesome-regular-comment-dots":"fontawesome/regular/comment-dots.svg","fontawesome-regular-comment":"fontawesome/regular/comment.svg","fontawesome-regular-comments":"fontawesome/regular/comments.svg","fontawesome-regular-compass":"fontawesome/regular/compass.svg","fontawesome-regular-copy":"fontawesome/regular/copy.svg","fontawesome-regular-copyright":"fontawesome/regular/copyright.svg","fontawesome-regular-credit-card":"fontawesome/regular/credit-card.svg","fontawesome-regular-envelope-open":"fontawesome/regular/envelope-open.svg","fontawesome-regular-envelope":"fontawesome/regular/envelope.svg","fontawesome-regular-eye-slash":"fontawesome/regular/eye-slash.svg","fontawesome-regular-eye":"fontawesome/regular/eye.svg","fontawesome-regular-face-angry":"fontawesome/regular/face-angry.svg","fontawesome-regular-face-dizzy":"fontawesome/regular/face-dizzy.svg","fontawesome-regular-face-flushed":"fontawesome/regular/face-flushed.svg","fontawesome-regular-face-frown-open":"fontawesome/regular/face-frown-open.svg","fontawesome-regular-face-frown":"fontawesome/regular/face-frown.svg","fontawesome-regular-face-grimace":"fontawesome/regular/face-grimace.svg","fontawesome-regular-face-grin-beam-sweat":"fontawesome/regular/face-grin-beam-sweat.svg","fontawesome-regular-face-grin-beam":"fontawesome/regular/face-grin-beam.svg","fontawesome-regular-face-grin-hearts":"fontawesome/regular/face-grin-hearts.svg","fontawesome-regular-face-grin-squint-tears":"fontawesome/regular/face-grin-squint-tears.svg","fontawesome-regular-face-grin-squint":"fontawesome/regular/face-grin-squint.svg","fontawesome-regular-face-grin-stars":"fontawesome/regular/face-grin-stars.svg","fontawesome-regular-face-grin-tears":"fontawesome/regular/face-grin-tears.svg","fontawesome-regular-face-grin-tongue-squint":"fontawesome/regular/face-grin-tongue-squint.svg","fontawesome-regular-face-grin-tongue-wink":"fontawesome/regular/face-grin-tongue-wink.svg","fontawesome-regular-face-grin-tongue":"fontawesome/regular/face-grin-tongue.svg","fontawesome-regular-face-grin-wide":"fontawesome/regular/face-grin-wide.svg","fontawesome-regular-face-grin-wink":"fontawesome/regular/face-grin-wink.svg","fontawesome-regular-face-grin":"fontawesome/regular/face-grin.svg","fontawesome-regular-face-kiss-beam":"fontawesome/regular/face-kiss-beam.svg","fontawesome-regular-face-kiss-wink-heart":"fontawesome/regular/face-kiss-wink-heart.svg","fontawesome-regular-face-kiss":"fontawesome/regular/face-kiss.svg","fontawesome-regular-face-laugh-beam":"fontawesome/regular/face-laugh-beam.svg","fontawesome-regular-face-laugh-squint":"fontawesome/regular/face-laugh-squint.svg","fontawesome-regular-face-laugh-wink":"fontawesome/regular/face-laugh-wink.svg","fontawesome-regular-face-laugh":"fontawesome/regular/face-laugh.svg","fontawesome-regular-face-meh-blank":"fontawesome/regular/face-meh-blank.svg","fontawesome-regular-face-meh":"fontawesome/regular/face-meh.svg","fontawesome-regular-face-rolling-eyes":"fontawesome/regular/face-rolling-eyes.svg","fontawesome-regular-face-sad-cry":"fontawesome/regular/face-sad-cry.svg","fontawesome-regular-face-sad-tear":"fontawesome/regular/face-sad-tear.svg","fontawesome-regular-face-smile-beam":"fontawesome/regular/face-smile-beam.svg","fontawesome-regular-face-smile-wink":"fontawesome/regular/face-smile-wink.svg","fontawesome-regular-face-smile":"fontawesome/regular/face-smile.svg","fontawesome-regular-face-surprise":"fontawesome/regular/face-surprise.svg","fontawesome-regular-face-tired":"fontawesome/regular/face-tired.svg","fontawesome-regular-file-audio":"fontawesome/regular/file-audio.svg","fontawesome-regular-file-code":"fontawesome/regular/file-code.svg","fontawesome-regular-file-excel":"fontawesome/regular/file-excel.svg","fontawesome-regular-file-image":"fontawesome/regular/file-image.svg","fontawesome-regular-file-lines":"fontawesome/regular/file-lines.svg","fontawesome-regular-file-pdf":"fontawesome/regular/file-pdf.svg","fontawesome-regular-file-powerpoint":"fontawesome/regular/file-powerpoint.svg","fontawesome-regular-file-video":"fontawesome/regular/file-video.svg","fontawesome-regular-file-word":"fontawesome/regular/file-word.svg","fontawesome-regular-file-zipper":"fontawesome/regular/file-zipper.svg","fontawesome-regular-file":"fontawesome/regular/file.svg","fontawesome-regular-flag":"fontawesome/regular/flag.svg","fontawesome-regular-floppy-disk":"fontawesome/regular/floppy-disk.svg","fontawesome-regular-folder-closed":"fontawesome/regular/folder-closed.svg","fontawesome-regular-folder-open":"fontawesome/regular/folder-open.svg","fontawesome-regular-folder":"fontawesome/regular/folder.svg","fontawesome-regular-font-awesome":"fontawesome/regular/font-awesome.svg","fontawesome-regular-futbol":"fontawesome/regular/futbol.svg","fontawesome-regular-gem":"fontawesome/regular/gem.svg","fontawesome-regular-hand-back-fist":"fontawesome/regular/hand-back-fist.svg","fontawesome-regular-hand-lizard":"fontawesome/regular/hand-lizard.svg","fontawesome-regular-hand-peace":"fontawesome/regular/hand-peace.svg","fontawesome-regular-hand-point-down":"fontawesome/regular/hand-point-down.svg","fontawesome-regular-hand-point-left":"fontawesome/regular/hand-point-left.svg","fontawesome-regular-hand-point-right":"fontawesome/regular/hand-point-right.svg","fontawesome-regular-hand-point-up":"fontawesome/regular/hand-point-up.svg","fontawesome-regular-hand-pointer":"fontawesome/regular/hand-pointer.svg","fontawesome-regular-hand-scissors":"fontawesome/regular/hand-scissors.svg","fontawesome-regular-hand-spock":"fontawesome/regular/hand-spock.svg","fontawesome-regular-hand":"fontawesome/regular/hand.svg","fontawesome-regular-handshake":"fontawesome/regular/handshake.svg","fontawesome-regular-hard-drive":"fontawesome/regular/hard-drive.svg","fontawesome-regular-heart":"fontawesome/regular/heart.svg","fontawesome-regular-hospital":"fontawesome/regular/hospital.svg","fontawesome-regular-hourglass-half":"fontawesome/regular/hourglass-half.svg","fontawesome-regular-hourglass":"fontawesome/regular/hourglass.svg","fontawesome-regular-id-badge":"fontawesome/regular/id-badge.svg","fontawesome-regular-id-card":"fontawesome/regular/id-card.svg","fontawesome-regular-image":"fontawesome/regular/image.svg","fontawesome-regular-images":"fontawesome/regular/images.svg","fontawesome-regular-keyboard":"fontawesome/regular/keyboard.svg","fontawesome-regular-lemon":"fontawesome/regular/lemon.svg","fontawesome-regular-life-ring":"fontawesome/regular/life-ring.svg","fontawesome-regular-lightbulb":"fontawesome/regular/lightbulb.svg","fontawesome-regular-map":"fontawesome/regular/map.svg","fontawesome-regular-message":"fontawesome/regular/message.svg","fontawesome-regular-money-bill-1":"fontawesome/regular/money-bill-1.svg","fontawesome-regular-moon":"fontawesome/regular/moon.svg","fontawesome-regular-newspaper":"fontawesome/regular/newspaper.svg","fontawesome-regular-note-sticky":"fontawesome/regular/note-sticky.svg","fontawesome-regular-object-group":"fontawesome/regular/object-group.svg","fontawesome-regular-object-ungroup":"fontawesome/regular/object-ungroup.svg","fontawesome-regular-paper-plane":"fontawesome/regular/paper-plane.svg","fontawesome-regular-paste":"fontawesome/regular/paste.svg","fontawesome-regular-pen-to-square":"fontawesome/regular/pen-to-square.svg","fontawesome-regular-rectangle-list":"fontawesome/regular/rectangle-list.svg","fontawesome-regular-rectangle-xmark":"fontawesome/regular/rectangle-xmark.svg","fontawesome-regular-registered":"fontawesome/regular/registered.svg","fontawesome-regular-share-from-square":"fontawesome/regular/share-from-square.svg","fontawesome-regular-snowflake":"fontawesome/regular/snowflake.svg","fontawesome-regular-square-caret-down":"fontawesome/regular/square-caret-down.svg","fontawesome-regular-square-caret-left":"fontawesome/regular/square-caret-left.svg","fontawesome-regular-square-caret-right":"fontawesome/regular/square-caret-right.svg","fontawesome-regular-square-caret-up":"fontawesome/regular/square-caret-up.svg","fontawesome-regular-square-check":"fontawesome/regular/square-check.svg","fontawesome-regular-square-full":"fontawesome/regular/square-full.svg","fontawesome-regular-square-minus":"fontawesome/regular/square-minus.svg","fontawesome-regular-square-plus":"fontawesome/regular/square-plus.svg","fontawesome-regular-square":"fontawesome/regular/square.svg","fontawesome-regular-star-half-stroke":"fontawesome/regular/star-half-stroke.svg","fontawesome-regular-star-half":"fontawesome/regular/star-half.svg","fontawesome-regular-star":"fontawesome/regular/star.svg","fontawesome-regular-sun":"fontawesome/regular/sun.svg","fontawesome-regular-thumbs-down":"fontawesome/regular/thumbs-down.svg","fontawesome-regular-thumbs-up":"fontawesome/regular/thumbs-up.svg","fontawesome-regular-trash-can":"fontawesome/regular/trash-can.svg","fontawesome-regular-user":"fontawesome/regular/user.svg","fontawesome-regular-window-maximize":"fontawesome/regular/window-maximize.svg","fontawesome-regular-window-minimize":"fontawesome/regular/window-minimize.svg","fontawesome-regular-window-restore":"fontawesome/regular/window-restore.svg","fontawesome-solid-0":"fontawesome/solid/0.svg","fontawesome-solid-1":"fontawesome/solid/1.svg","fontawesome-solid-2":"fontawesome/solid/2.svg","fontawesome-solid-3":"fontawesome/solid/3.svg","fontawesome-solid-4":"fontawesome/solid/4.svg","fontawesome-solid-5":"fontawesome/solid/5.svg","fontawesome-solid-6":"fontawesome/solid/6.svg","fontawesome-solid-7":"fontawesome/solid/7.svg","fontawesome-solid-8":"fontawesome/solid/8.svg","fontawesome-solid-9":"fontawesome/solid/9.svg","fontawesome-solid-a":"fontawesome/solid/a.svg","fontawesome-solid-address-book":"fontawesome/solid/address-book.svg","fontawesome-solid-address-card":"fontawesome/solid/address-card.svg","fontawesome-solid-align-center":"fontawesome/solid/align-center.svg","fontawesome-solid-align-justify":"fontawesome/solid/align-justify.svg","fontawesome-solid-align-left":"fontawesome/solid/align-left.svg","fontawesome-solid-align-right":"fontawesome/solid/align-right.svg","fontawesome-solid-anchor-circle-check":"fontawesome/solid/anchor-circle-check.svg","fontawesome-solid-anchor-circle-exclamation":"fontawesome/solid/anchor-circle-exclamation.svg","fontawesome-solid-anchor-circle-xmark":"fontawesome/solid/anchor-circle-xmark.svg","fontawesome-solid-anchor-lock":"fontawesome/solid/anchor-lock.svg","fontawesome-solid-anchor":"fontawesome/solid/anchor.svg","fontawesome-solid-angle-down":"fontawesome/solid/angle-down.svg","fontawesome-solid-angle-left":"fontawesome/solid/angle-left.svg","fontawesome-solid-angle-right":"fontawesome/solid/angle-right.svg","fontawesome-solid-angle-up":"fontawesome/solid/angle-up.svg","fontawesome-solid-angles-down":"fontawesome/solid/angles-down.svg","fontawesome-solid-angles-left":"fontawesome/solid/angles-left.svg","fontawesome-solid-angles-right":"fontawesome/solid/angles-right.svg","fontawesome-solid-angles-up":"fontawesome/solid/angles-up.svg","fontawesome-solid-ankh":"fontawesome/solid/ankh.svg","fontawesome-solid-apple-whole":"fontawesome/solid/apple-whole.svg","fontawesome-solid-archway":"fontawesome/solid/archway.svg","fontawesome-solid-arrow-down-1-9":"fontawesome/solid/arrow-down-1-9.svg","fontawesome-solid-arrow-down-9-1":"fontawesome/solid/arrow-down-9-1.svg","fontawesome-solid-arrow-down-a-z":"fontawesome/solid/arrow-down-a-z.svg","fontawesome-solid-arrow-down-long":"fontawesome/solid/arrow-down-long.svg","fontawesome-solid-arrow-down-short-wide":"fontawesome/solid/arrow-down-short-wide.svg","fontawesome-solid-arrow-down-up-across-line":"fontawesome/solid/arrow-down-up-across-line.svg","fontawesome-solid-arrow-down-up-lock":"fontawesome/solid/arrow-down-up-lock.svg","fontawesome-solid-arrow-down-wide-short":"fontawesome/solid/arrow-down-wide-short.svg","fontawesome-solid-arrow-down-z-a":"fontawesome/solid/arrow-down-z-a.svg","fontawesome-solid-arrow-down":"fontawesome/solid/arrow-down.svg","fontawesome-solid-arrow-left-long":"fontawesome/solid/arrow-left-long.svg","fontawesome-solid-arrow-left":"fontawesome/solid/arrow-left.svg","fontawesome-solid-arrow-pointer":"fontawesome/solid/arrow-pointer.svg","fontawesome-solid-arrow-right-arrow-left":"fontawesome/solid/arrow-right-arrow-left.svg","fontawesome-solid-arrow-right-from-bracket":"fontawesome/solid/arrow-right-from-bracket.svg","fontawesome-solid-arrow-right-long":"fontawesome/solid/arrow-right-long.svg","fontawesome-solid-arrow-right-to-bracket":"fontawesome/solid/arrow-right-to-bracket.svg","fontawesome-solid-arrow-right-to-city":"fontawesome/solid/arrow-right-to-city.svg","fontawesome-solid-arrow-right":"fontawesome/solid/arrow-right.svg","fontawesome-solid-arrow-rotate-left":"fontawesome/solid/arrow-rotate-left.svg","fontawesome-solid-arrow-rotate-right":"fontawesome/solid/arrow-rotate-right.svg","fontawesome-solid-arrow-trend-down":"fontawesome/solid/arrow-trend-down.svg","fontawesome-solid-arrow-trend-up":"fontawesome/solid/arrow-trend-up.svg","fontawesome-solid-arrow-turn-down":"fontawesome/solid/arrow-turn-down.svg","fontawesome-solid-arrow-turn-up":"fontawesome/solid/arrow-turn-up.svg","fontawesome-solid-arrow-up-1-9":"fontawesome/solid/arrow-up-1-9.svg","fontawesome-solid-arrow-up-9-1":"fontawesome/solid/arrow-up-9-1.svg","fontawesome-solid-arrow-up-a-z":"fontawesome/solid/arrow-up-a-z.svg","fontawesome-solid-arrow-up-from-bracket":"fontawesome/solid/arrow-up-from-bracket.svg","fontawesome-solid-arrow-up-from-ground-water":"fontawesome/solid/arrow-up-from-ground-water.svg","fontawesome-solid-arrow-up-from-water-pump":"fontawesome/solid/arrow-up-from-water-pump.svg","fontawesome-solid-arrow-up-long":"fontawesome/solid/arrow-up-long.svg","fontawesome-solid-arrow-up-right-dots":"fontawesome/solid/arrow-up-right-dots.svg","fontawesome-solid-arrow-up-right-from-square":"fontawesome/solid/arrow-up-right-from-square.svg","fontawesome-solid-arrow-up-short-wide":"fontawesome/solid/arrow-up-short-wide.svg","fontawesome-solid-arrow-up-wide-short":"fontawesome/solid/arrow-up-wide-short.svg","fontawesome-solid-arrow-up-z-a":"fontawesome/solid/arrow-up-z-a.svg","fontawesome-solid-arrow-up":"fontawesome/solid/arrow-up.svg","fontawesome-solid-arrows-down-to-line":"fontawesome/solid/arrows-down-to-line.svg","fontawesome-solid-arrows-down-to-people":"fontawesome/solid/arrows-down-to-people.svg","fontawesome-solid-arrows-left-right-to-line":"fontawesome/solid/arrows-left-right-to-line.svg","fontawesome-solid-arrows-left-right":"fontawesome/solid/arrows-left-right.svg","fontawesome-solid-arrows-rotate":"fontawesome/solid/arrows-rotate.svg","fontawesome-solid-arrows-spin":"fontawesome/solid/arrows-spin.svg","fontawesome-solid-arrows-split-up-and-left":"fontawesome/solid/arrows-split-up-and-left.svg","fontawesome-solid-arrows-to-circle":"fontawesome/solid/arrows-to-circle.svg","fontawesome-solid-arrows-to-dot":"fontawesome/solid/arrows-to-dot.svg","fontawesome-solid-arrows-to-eye":"fontawesome/solid/arrows-to-eye.svg","fontawesome-solid-arrows-turn-right":"fontawesome/solid/arrows-turn-right.svg","fontawesome-solid-arrows-turn-to-dots":"fontawesome/solid/arrows-turn-to-dots.svg","fontawesome-solid-arrows-up-down-left-right":"fontawesome/solid/arrows-up-down-left-right.svg","fontawesome-solid-arrows-up-down":"fontawesome/solid/arrows-up-down.svg","fontawesome-solid-arrows-up-to-line":"fontawesome/solid/arrows-up-to-line.svg","fontawesome-solid-asterisk":"fontawesome/solid/asterisk.svg","fontawesome-solid-at":"fontawesome/solid/at.svg","fontawesome-solid-atom":"fontawesome/solid/atom.svg","fontawesome-solid-audio-description":"fontawesome/solid/audio-description.svg","fontawesome-solid-austral-sign":"fontawesome/solid/austral-sign.svg","fontawesome-solid-award":"fontawesome/solid/award.svg","fontawesome-solid-b":"fontawesome/solid/b.svg","fontawesome-solid-baby-carriage":"fontawesome/solid/baby-carriage.svg","fontawesome-solid-baby":"fontawesome/solid/baby.svg","fontawesome-solid-backward-fast":"fontawesome/solid/backward-fast.svg","fontawesome-solid-backward-step":"fontawesome/solid/backward-step.svg","fontawesome-solid-backward":"fontawesome/solid/backward.svg","fontawesome-solid-bacon":"fontawesome/solid/bacon.svg","fontawesome-solid-bacteria":"fontawesome/solid/bacteria.svg","fontawesome-solid-bacterium":"fontawesome/solid/bacterium.svg","fontawesome-solid-bag-shopping":"fontawesome/solid/bag-shopping.svg","fontawesome-solid-bahai":"fontawesome/solid/bahai.svg","fontawesome-solid-baht-sign":"fontawesome/solid/baht-sign.svg","fontawesome-solid-ban-smoking":"fontawesome/solid/ban-smoking.svg","fontawesome-solid-ban":"fontawesome/solid/ban.svg","fontawesome-solid-bandage":"fontawesome/solid/bandage.svg","fontawesome-solid-bangladeshi-taka-sign":"fontawesome/solid/bangladeshi-taka-sign.svg","fontawesome-solid-barcode":"fontawesome/solid/barcode.svg","fontawesome-solid-bars-progress":"fontawesome/solid/bars-progress.svg","fontawesome-solid-bars-staggered":"fontawesome/solid/bars-staggered.svg","fontawesome-solid-bars":"fontawesome/solid/bars.svg","fontawesome-solid-baseball-bat-ball":"fontawesome/solid/baseball-bat-ball.svg","fontawesome-solid-baseball":"fontawesome/solid/baseball.svg","fontawesome-solid-basket-shopping":"fontawesome/solid/basket-shopping.svg","fontawesome-solid-basketball":"fontawesome/solid/basketball.svg","fontawesome-solid-bath":"fontawesome/solid/bath.svg","fontawesome-solid-battery-empty":"fontawesome/solid/battery-empty.svg","fontawesome-solid-battery-full":"fontawesome/solid/battery-full.svg","fontawesome-solid-battery-half":"fontawesome/solid/battery-half.svg","fontawesome-solid-battery-quarter":"fontawesome/solid/battery-quarter.svg","fontawesome-solid-battery-three-quarters":"fontawesome/solid/battery-three-quarters.svg","fontawesome-solid-bed-pulse":"fontawesome/solid/bed-pulse.svg","fontawesome-solid-bed":"fontawesome/solid/bed.svg","fontawesome-solid-beer-mug-empty":"fontawesome/solid/beer-mug-empty.svg","fontawesome-solid-bell-concierge":"fontawesome/solid/bell-concierge.svg","fontawesome-solid-bell-slash":"fontawesome/solid/bell-slash.svg","fontawesome-solid-bell":"fontawesome/solid/bell.svg","fontawesome-solid-bezier-curve":"fontawesome/solid/bezier-curve.svg","fontawesome-solid-bicycle":"fontawesome/solid/bicycle.svg","fontawesome-solid-binoculars":"fontawesome/solid/binoculars.svg","fontawesome-solid-biohazard":"fontawesome/solid/biohazard.svg","fontawesome-solid-bitcoin-sign":"fontawesome/solid/bitcoin-sign.svg","fontawesome-solid-blender-phone":"fontawesome/solid/blender-phone.svg","fontawesome-solid-blender":"fontawesome/solid/blender.svg","fontawesome-solid-blog":"fontawesome/solid/blog.svg","fontawesome-solid-bold":"fontawesome/solid/bold.svg","fontawesome-solid-bolt-lightning":"fontawesome/solid/bolt-lightning.svg","fontawesome-solid-bolt":"fontawesome/solid/bolt.svg","fontawesome-solid-bomb":"fontawesome/solid/bomb.svg","fontawesome-solid-bone":"fontawesome/solid/bone.svg","fontawesome-solid-bong":"fontawesome/solid/bong.svg","fontawesome-solid-book-atlas":"fontawesome/solid/book-atlas.svg","fontawesome-solid-book-bible":"fontawesome/solid/book-bible.svg","fontawesome-solid-book-bookmark":"fontawesome/solid/book-bookmark.svg","fontawesome-solid-book-journal-whills":"fontawesome/solid/book-journal-whills.svg","fontawesome-solid-book-medical":"fontawesome/solid/book-medical.svg","fontawesome-solid-book-open-reader":"fontawesome/solid/book-open-reader.svg","fontawesome-solid-book-open":"fontawesome/solid/book-open.svg","fontawesome-solid-book-quran":"fontawesome/solid/book-quran.svg","fontawesome-solid-book-skull":"fontawesome/solid/book-skull.svg","fontawesome-solid-book-tanakh":"fontawesome/solid/book-tanakh.svg","fontawesome-solid-book":"fontawesome/solid/book.svg","fontawesome-solid-bookmark":"fontawesome/solid/bookmark.svg","fontawesome-solid-border-all":"fontawesome/solid/border-all.svg","fontawesome-solid-border-none":"fontawesome/solid/border-none.svg","fontawesome-solid-border-top-left":"fontawesome/solid/border-top-left.svg","fontawesome-solid-bore-hole":"fontawesome/solid/bore-hole.svg","fontawesome-solid-bottle-droplet":"fontawesome/solid/bottle-droplet.svg","fontawesome-solid-bottle-water":"fontawesome/solid/bottle-water.svg","fontawesome-solid-bowl-food":"fontawesome/solid/bowl-food.svg","fontawesome-solid-bowl-rice":"fontawesome/solid/bowl-rice.svg","fontawesome-solid-bowling-ball":"fontawesome/solid/bowling-ball.svg","fontawesome-solid-box-archive":"fontawesome/solid/box-archive.svg","fontawesome-solid-box-open":"fontawesome/solid/box-open.svg","fontawesome-solid-box-tissue":"fontawesome/solid/box-tissue.svg","fontawesome-solid-box":"fontawesome/solid/box.svg","fontawesome-solid-boxes-packing":"fontawesome/solid/boxes-packing.svg","fontawesome-solid-boxes-stacked":"fontawesome/solid/boxes-stacked.svg","fontawesome-solid-braille":"fontawesome/solid/braille.svg","fontawesome-solid-brain":"fontawesome/solid/brain.svg","fontawesome-solid-brazilian-real-sign":"fontawesome/solid/brazilian-real-sign.svg","fontawesome-solid-bread-slice":"fontawesome/solid/bread-slice.svg","fontawesome-solid-bridge-circle-check":"fontawesome/solid/bridge-circle-check.svg","fontawesome-solid-bridge-circle-exclamation":"fontawesome/solid/bridge-circle-exclamation.svg","fontawesome-solid-bridge-circle-xmark":"fontawesome/solid/bridge-circle-xmark.svg","fontawesome-solid-bridge-lock":"fontawesome/solid/bridge-lock.svg","fontawesome-solid-bridge-water":"fontawesome/solid/bridge-water.svg","fontawesome-solid-bridge":"fontawesome/solid/bridge.svg","fontawesome-solid-briefcase-medical":"fontawesome/solid/briefcase-medical.svg","fontawesome-solid-briefcase":"fontawesome/solid/briefcase.svg","fontawesome-solid-broom-ball":"fontawesome/solid/broom-ball.svg","fontawesome-solid-broom":"fontawesome/solid/broom.svg","fontawesome-solid-brush":"fontawesome/solid/brush.svg","fontawesome-solid-bucket":"fontawesome/solid/bucket.svg","fontawesome-solid-bug-slash":"fontawesome/solid/bug-slash.svg","fontawesome-solid-bug":"fontawesome/solid/bug.svg","fontawesome-solid-bugs":"fontawesome/solid/bugs.svg","fontawesome-solid-building-circle-arrow-right":"fontawesome/solid/building-circle-arrow-right.svg","fontawesome-solid-building-circle-check":"fontawesome/solid/building-circle-check.svg","fontawesome-solid-building-circle-exclamation":"fontawesome/solid/building-circle-exclamation.svg","fontawesome-solid-building-circle-xmark":"fontawesome/solid/building-circle-xmark.svg","fontawesome-solid-building-columns":"fontawesome/solid/building-columns.svg","fontawesome-solid-building-flag":"fontawesome/solid/building-flag.svg","fontawesome-solid-building-lock":"fontawesome/solid/building-lock.svg","fontawesome-solid-building-ngo":"fontawesome/solid/building-ngo.svg","fontawesome-solid-building-shield":"fontawesome/solid/building-shield.svg","fontawesome-solid-building-un":"fontawesome/solid/building-un.svg","fontawesome-solid-building-user":"fontawesome/solid/building-user.svg","fontawesome-solid-building-wheat":"fontawesome/solid/building-wheat.svg","fontawesome-solid-building":"fontawesome/solid/building.svg","fontawesome-solid-bullhorn":"fontawesome/solid/bullhorn.svg","fontawesome-solid-bullseye":"fontawesome/solid/bullseye.svg","fontawesome-solid-burger":"fontawesome/solid/burger.svg","fontawesome-solid-burst":"fontawesome/solid/burst.svg","fontawesome-solid-bus-simple":"fontawesome/solid/bus-simple.svg","fontawesome-solid-bus":"fontawesome/solid/bus.svg","fontawesome-solid-business-time":"fontawesome/solid/business-time.svg","fontawesome-solid-c":"fontawesome/solid/c.svg","fontawesome-solid-cable-car":"fontawesome/solid/cable-car.svg","fontawesome-solid-cake-candles":"fontawesome/solid/cake-candles.svg","fontawesome-solid-calculator":"fontawesome/solid/calculator.svg","fontawesome-solid-calendar-check":"fontawesome/solid/calendar-check.svg","fontawesome-solid-calendar-day":"fontawesome/solid/calendar-day.svg","fontawesome-solid-calendar-days":"fontawesome/solid/calendar-days.svg","fontawesome-solid-calendar-minus":"fontawesome/solid/calendar-minus.svg","fontawesome-solid-calendar-plus":"fontawesome/solid/calendar-plus.svg","fontawesome-solid-calendar-week":"fontawesome/solid/calendar-week.svg","fontawesome-solid-calendar-xmark":"fontawesome/solid/calendar-xmark.svg","fontawesome-solid-calendar":"fontawesome/solid/calendar.svg","fontawesome-solid-camera-retro":"fontawesome/solid/camera-retro.svg","fontawesome-solid-camera-rotate":"fontawesome/solid/camera-rotate.svg","fontawesome-solid-camera":"fontawesome/solid/camera.svg","fontawesome-solid-campground":"fontawesome/solid/campground.svg","fontawesome-solid-candy-cane":"fontawesome/solid/candy-cane.svg","fontawesome-solid-cannabis":"fontawesome/solid/cannabis.svg","fontawesome-solid-capsules":"fontawesome/solid/capsules.svg","fontawesome-solid-car-battery":"fontawesome/solid/car-battery.svg","fontawesome-solid-car-burst":"fontawesome/solid/car-burst.svg","fontawesome-solid-car-on":"fontawesome/solid/car-on.svg","fontawesome-solid-car-rear":"fontawesome/solid/car-rear.svg","fontawesome-solid-car-side":"fontawesome/solid/car-side.svg","fontawesome-solid-car-tunnel":"fontawesome/solid/car-tunnel.svg","fontawesome-solid-car":"fontawesome/solid/car.svg","fontawesome-solid-caravan":"fontawesome/solid/caravan.svg","fontawesome-solid-caret-down":"fontawesome/solid/caret-down.svg","fontawesome-solid-caret-left":"fontawesome/solid/caret-left.svg","fontawesome-solid-caret-right":"fontawesome/solid/caret-right.svg","fontawesome-solid-caret-up":"fontawesome/solid/caret-up.svg","fontawesome-solid-carrot":"fontawesome/solid/carrot.svg","fontawesome-solid-cart-arrow-down":"fontawesome/solid/cart-arrow-down.svg","fontawesome-solid-cart-flatbed-suitcase":"fontawesome/solid/cart-flatbed-suitcase.svg","fontawesome-solid-cart-flatbed":"fontawesome/solid/cart-flatbed.svg","fontawesome-solid-cart-plus":"fontawesome/solid/cart-plus.svg","fontawesome-solid-cart-shopping":"fontawesome/solid/cart-shopping.svg","fontawesome-solid-cash-register":"fontawesome/solid/cash-register.svg","fontawesome-solid-cat":"fontawesome/solid/cat.svg","fontawesome-solid-cedi-sign":"fontawesome/solid/cedi-sign.svg","fontawesome-solid-cent-sign":"fontawesome/solid/cent-sign.svg","fontawesome-solid-certificate":"fontawesome/solid/certificate.svg","fontawesome-solid-chair":"fontawesome/solid/chair.svg","fontawesome-solid-chalkboard-user":"fontawesome/solid/chalkboard-user.svg","fontawesome-solid-chalkboard":"fontawesome/solid/chalkboard.svg","fontawesome-solid-champagne-glasses":"fontawesome/solid/champagne-glasses.svg","fontawesome-solid-charging-station":"fontawesome/solid/charging-station.svg","fontawesome-solid-chart-area":"fontawesome/solid/chart-area.svg","fontawesome-solid-chart-bar":"fontawesome/solid/chart-bar.svg","fontawesome-solid-chart-column":"fontawesome/solid/chart-column.svg","fontawesome-solid-chart-gantt":"fontawesome/solid/chart-gantt.svg","fontawesome-solid-chart-line":"fontawesome/solid/chart-line.svg","fontawesome-solid-chart-pie":"fontawesome/solid/chart-pie.svg","fontawesome-solid-chart-simple":"fontawesome/solid/chart-simple.svg","fontawesome-solid-check-double":"fontawesome/solid/check-double.svg","fontawesome-solid-check-to-slot":"fontawesome/solid/check-to-slot.svg","fontawesome-solid-check":"fontawesome/solid/check.svg","fontawesome-solid-cheese":"fontawesome/solid/cheese.svg","fontawesome-solid-chess-bishop":"fontawesome/solid/chess-bishop.svg","fontawesome-solid-chess-board":"fontawesome/solid/chess-board.svg","fontawesome-solid-chess-king":"fontawesome/solid/chess-king.svg","fontawesome-solid-chess-knight":"fontawesome/solid/chess-knight.svg","fontawesome-solid-chess-pawn":"fontawesome/solid/chess-pawn.svg","fontawesome-solid-chess-queen":"fontawesome/solid/chess-queen.svg","fontawesome-solid-chess-rook":"fontawesome/solid/chess-rook.svg","fontawesome-solid-chess":"fontawesome/solid/chess.svg","fontawesome-solid-chevron-down":"fontawesome/solid/chevron-down.svg","fontawesome-solid-chevron-left":"fontawesome/solid/chevron-left.svg","fontawesome-solid-chevron-right":"fontawesome/solid/chevron-right.svg","fontawesome-solid-chevron-up":"fontawesome/solid/chevron-up.svg","fontawesome-solid-child-combatant":"fontawesome/solid/child-combatant.svg","fontawesome-solid-child-dress":"fontawesome/solid/child-dress.svg","fontawesome-solid-child-reaching":"fontawesome/solid/child-reaching.svg","fontawesome-solid-child":"fontawesome/solid/child.svg","fontawesome-solid-children":"fontawesome/solid/children.svg","fontawesome-solid-church":"fontawesome/solid/church.svg","fontawesome-solid-circle-arrow-down":"fontawesome/solid/circle-arrow-down.svg","fontawesome-solid-circle-arrow-left":"fontawesome/solid/circle-arrow-left.svg","fontawesome-solid-circle-arrow-right":"fontawesome/solid/circle-arrow-right.svg","fontawesome-solid-circle-arrow-up":"fontawesome/solid/circle-arrow-up.svg","fontawesome-solid-circle-check":"fontawesome/solid/circle-check.svg","fontawesome-solid-circle-chevron-down":"fontawesome/solid/circle-chevron-down.svg","fontawesome-solid-circle-chevron-left":"fontawesome/solid/circle-chevron-left.svg","fontawesome-solid-circle-chevron-right":"fontawesome/solid/circle-chevron-right.svg","fontawesome-solid-circle-chevron-up":"fontawesome/solid/circle-chevron-up.svg","fontawesome-solid-circle-dollar-to-slot":"fontawesome/solid/circle-dollar-to-slot.svg","fontawesome-solid-circle-dot":"fontawesome/solid/circle-dot.svg","fontawesome-solid-circle-down":"fontawesome/solid/circle-down.svg","fontawesome-solid-circle-exclamation":"fontawesome/solid/circle-exclamation.svg","fontawesome-solid-circle-h":"fontawesome/solid/circle-h.svg","fontawesome-solid-circle-half-stroke":"fontawesome/solid/circle-half-stroke.svg","fontawesome-solid-circle-info":"fontawesome/solid/circle-info.svg","fontawesome-solid-circle-left":"fontawesome/solid/circle-left.svg","fontawesome-solid-circle-minus":"fontawesome/solid/circle-minus.svg","fontawesome-solid-circle-nodes":"fontawesome/solid/circle-nodes.svg","fontawesome-solid-circle-notch":"fontawesome/solid/circle-notch.svg","fontawesome-solid-circle-pause":"fontawesome/solid/circle-pause.svg","fontawesome-solid-circle-play":"fontawesome/solid/circle-play.svg","fontawesome-solid-circle-plus":"fontawesome/solid/circle-plus.svg","fontawesome-solid-circle-question":"fontawesome/solid/circle-question.svg","fontawesome-solid-circle-radiation":"fontawesome/solid/circle-radiation.svg","fontawesome-solid-circle-right":"fontawesome/solid/circle-right.svg","fontawesome-solid-circle-stop":"fontawesome/solid/circle-stop.svg","fontawesome-solid-circle-up":"fontawesome/solid/circle-up.svg","fontawesome-solid-circle-user":"fontawesome/solid/circle-user.svg","fontawesome-solid-circle-xmark":"fontawesome/solid/circle-xmark.svg","fontawesome-solid-circle":"fontawesome/solid/circle.svg","fontawesome-solid-city":"fontawesome/solid/city.svg","fontawesome-solid-clapperboard":"fontawesome/solid/clapperboard.svg","fontawesome-solid-clipboard-check":"fontawesome/solid/clipboard-check.svg","fontawesome-solid-clipboard-list":"fontawesome/solid/clipboard-list.svg","fontawesome-solid-clipboard-question":"fontawesome/solid/clipboard-question.svg","fontawesome-solid-clipboard-user":"fontawesome/solid/clipboard-user.svg","fontawesome-solid-clipboard":"fontawesome/solid/clipboard.svg","fontawesome-solid-clock-rotate-left":"fontawesome/solid/clock-rotate-left.svg","fontawesome-solid-clock":"fontawesome/solid/clock.svg","fontawesome-solid-clone":"fontawesome/solid/clone.svg","fontawesome-solid-closed-captioning":"fontawesome/solid/closed-captioning.svg","fontawesome-solid-cloud-arrow-down":"fontawesome/solid/cloud-arrow-down.svg","fontawesome-solid-cloud-arrow-up":"fontawesome/solid/cloud-arrow-up.svg","fontawesome-solid-cloud-bolt":"fontawesome/solid/cloud-bolt.svg","fontawesome-solid-cloud-meatball":"fontawesome/solid/cloud-meatball.svg","fontawesome-solid-cloud-moon-rain":"fontawesome/solid/cloud-moon-rain.svg","fontawesome-solid-cloud-moon":"fontawesome/solid/cloud-moon.svg","fontawesome-solid-cloud-rain":"fontawesome/solid/cloud-rain.svg","fontawesome-solid-cloud-showers-heavy":"fontawesome/solid/cloud-showers-heavy.svg","fontawesome-solid-cloud-showers-water":"fontawesome/solid/cloud-showers-water.svg","fontawesome-solid-cloud-sun-rain":"fontawesome/solid/cloud-sun-rain.svg","fontawesome-solid-cloud-sun":"fontawesome/solid/cloud-sun.svg","fontawesome-solid-cloud":"fontawesome/solid/cloud.svg","fontawesome-solid-clover":"fontawesome/solid/clover.svg","fontawesome-solid-code-branch":"fontawesome/solid/code-branch.svg","fontawesome-solid-code-commit":"fontawesome/solid/code-commit.svg","fontawesome-solid-code-compare":"fontawesome/solid/code-compare.svg","fontawesome-solid-code-fork":"fontawesome/solid/code-fork.svg","fontawesome-solid-code-merge":"fontawesome/solid/code-merge.svg","fontawesome-solid-code-pull-request":"fontawesome/solid/code-pull-request.svg","fontawesome-solid-code":"fontawesome/solid/code.svg","fontawesome-solid-coins":"fontawesome/solid/coins.svg","fontawesome-solid-colon-sign":"fontawesome/solid/colon-sign.svg","fontawesome-solid-comment-dollar":"fontawesome/solid/comment-dollar.svg","fontawesome-solid-comment-dots":"fontawesome/solid/comment-dots.svg","fontawesome-solid-comment-medical":"fontawesome/solid/comment-medical.svg","fontawesome-solid-comment-slash":"fontawesome/solid/comment-slash.svg","fontawesome-solid-comment-sms":"fontawesome/solid/comment-sms.svg","fontawesome-solid-comment":"fontawesome/solid/comment.svg","fontawesome-solid-comments-dollar":"fontawesome/solid/comments-dollar.svg","fontawesome-solid-comments":"fontawesome/solid/comments.svg","fontawesome-solid-compact-disc":"fontawesome/solid/compact-disc.svg","fontawesome-solid-compass-drafting":"fontawesome/solid/compass-drafting.svg","fontawesome-solid-compass":"fontawesome/solid/compass.svg","fontawesome-solid-compress":"fontawesome/solid/compress.svg","fontawesome-solid-computer-mouse":"fontawesome/solid/computer-mouse.svg","fontawesome-solid-computer":"fontawesome/solid/computer.svg","fontawesome-solid-cookie-bite":"fontawesome/solid/cookie-bite.svg","fontawesome-solid-cookie":"fontawesome/solid/cookie.svg","fontawesome-solid-copy":"fontawesome/solid/copy.svg","fontawesome-solid-copyright":"fontawesome/solid/copyright.svg","fontawesome-solid-couch":"fontawesome/solid/couch.svg","fontawesome-solid-cow":"fontawesome/solid/cow.svg","fontawesome-solid-credit-card":"fontawesome/solid/credit-card.svg","fontawesome-solid-crop-simple":"fontawesome/solid/crop-simple.svg","fontawesome-solid-crop":"fontawesome/solid/crop.svg","fontawesome-solid-cross":"fontawesome/solid/cross.svg","fontawesome-solid-crosshairs":"fontawesome/solid/crosshairs.svg","fontawesome-solid-crow":"fontawesome/solid/crow.svg","fontawesome-solid-crown":"fontawesome/solid/crown.svg","fontawesome-solid-crutch":"fontawesome/solid/crutch.svg","fontawesome-solid-cruzeiro-sign":"fontawesome/solid/cruzeiro-sign.svg","fontawesome-solid-cube":"fontawesome/solid/cube.svg","fontawesome-solid-cubes-stacked":"fontawesome/solid/cubes-stacked.svg","fontawesome-solid-cubes":"fontawesome/solid/cubes.svg","fontawesome-solid-d":"fontawesome/solid/d.svg","fontawesome-solid-database":"fontawesome/solid/database.svg","fontawesome-solid-delete-left":"fontawesome/solid/delete-left.svg","fontawesome-solid-democrat":"fontawesome/solid/democrat.svg","fontawesome-solid-desktop":"fontawesome/solid/desktop.svg","fontawesome-solid-dharmachakra":"fontawesome/solid/dharmachakra.svg","fontawesome-solid-diagram-next":"fontawesome/solid/diagram-next.svg","fontawesome-solid-diagram-predecessor":"fontawesome/solid/diagram-predecessor.svg","fontawesome-solid-diagram-project":"fontawesome/solid/diagram-project.svg","fontawesome-solid-diagram-successor":"fontawesome/solid/diagram-successor.svg","fontawesome-solid-diamond-turn-right":"fontawesome/solid/diamond-turn-right.svg","fontawesome-solid-diamond":"fontawesome/solid/diamond.svg","fontawesome-solid-dice-d20":"fontawesome/solid/dice-d20.svg","fontawesome-solid-dice-d6":"fontawesome/solid/dice-d6.svg","fontawesome-solid-dice-five":"fontawesome/solid/dice-five.svg","fontawesome-solid-dice-four":"fontawesome/solid/dice-four.svg","fontawesome-solid-dice-one":"fontawesome/solid/dice-one.svg","fontawesome-solid-dice-six":"fontawesome/solid/dice-six.svg","fontawesome-solid-dice-three":"fontawesome/solid/dice-three.svg","fontawesome-solid-dice-two":"fontawesome/solid/dice-two.svg","fontawesome-solid-dice":"fontawesome/solid/dice.svg","fontawesome-solid-disease":"fontawesome/solid/disease.svg","fontawesome-solid-display":"fontawesome/solid/display.svg","fontawesome-solid-divide":"fontawesome/solid/divide.svg","fontawesome-solid-dna":"fontawesome/solid/dna.svg","fontawesome-solid-dog":"fontawesome/solid/dog.svg","fontawesome-solid-dollar-sign":"fontawesome/solid/dollar-sign.svg","fontawesome-solid-dolly":"fontawesome/solid/dolly.svg","fontawesome-solid-dong-sign":"fontawesome/solid/dong-sign.svg","fontawesome-solid-door-closed":"fontawesome/solid/door-closed.svg","fontawesome-solid-door-open":"fontawesome/solid/door-open.svg","fontawesome-solid-dove":"fontawesome/solid/dove.svg","fontawesome-solid-down-left-and-up-right-to-center":"fontawesome/solid/down-left-and-up-right-to-center.svg","fontawesome-solid-down-long":"fontawesome/solid/down-long.svg","fontawesome-solid-download":"fontawesome/solid/download.svg","fontawesome-solid-dragon":"fontawesome/solid/dragon.svg","fontawesome-solid-draw-polygon":"fontawesome/solid/draw-polygon.svg","fontawesome-solid-droplet-slash":"fontawesome/solid/droplet-slash.svg","fontawesome-solid-droplet":"fontawesome/solid/droplet.svg","fontawesome-solid-drum-steelpan":"fontawesome/solid/drum-steelpan.svg","fontawesome-solid-drum":"fontawesome/solid/drum.svg","fontawesome-solid-drumstick-bite":"fontawesome/solid/drumstick-bite.svg","fontawesome-solid-dumbbell":"fontawesome/solid/dumbbell.svg","fontawesome-solid-dumpster-fire":"fontawesome/solid/dumpster-fire.svg","fontawesome-solid-dumpster":"fontawesome/solid/dumpster.svg","fontawesome-solid-dungeon":"fontawesome/solid/dungeon.svg","fontawesome-solid-e":"fontawesome/solid/e.svg","fontawesome-solid-ear-deaf":"fontawesome/solid/ear-deaf.svg","fontawesome-solid-ear-listen":"fontawesome/solid/ear-listen.svg","fontawesome-solid-earth-africa":"fontawesome/solid/earth-africa.svg","fontawesome-solid-earth-americas":"fontawesome/solid/earth-americas.svg","fontawesome-solid-earth-asia":"fontawesome/solid/earth-asia.svg","fontawesome-solid-earth-europe":"fontawesome/solid/earth-europe.svg","fontawesome-solid-earth-oceania":"fontawesome/solid/earth-oceania.svg","fontawesome-solid-egg":"fontawesome/solid/egg.svg","fontawesome-solid-eject":"fontawesome/solid/eject.svg","fontawesome-solid-elevator":"fontawesome/solid/elevator.svg","fontawesome-solid-ellipsis-vertical":"fontawesome/solid/ellipsis-vertical.svg","fontawesome-solid-ellipsis":"fontawesome/solid/ellipsis.svg","fontawesome-solid-envelope-circle-check":"fontawesome/solid/envelope-circle-check.svg","fontawesome-solid-envelope-open-text":"fontawesome/solid/envelope-open-text.svg","fontawesome-solid-envelope-open":"fontawesome/solid/envelope-open.svg","fontawesome-solid-envelope":"fontawesome/solid/envelope.svg","fontawesome-solid-envelopes-bulk":"fontawesome/solid/envelopes-bulk.svg","fontawesome-solid-equals":"fontawesome/solid/equals.svg","fontawesome-solid-eraser":"fontawesome/solid/eraser.svg","fontawesome-solid-ethernet":"fontawesome/solid/ethernet.svg","fontawesome-solid-euro-sign":"fontawesome/solid/euro-sign.svg","fontawesome-solid-exclamation":"fontawesome/solid/exclamation.svg","fontawesome-solid-expand":"fontawesome/solid/expand.svg","fontawesome-solid-explosion":"fontawesome/solid/explosion.svg","fontawesome-solid-eye-dropper":"fontawesome/solid/eye-dropper.svg","fontawesome-solid-eye-low-vision":"fontawesome/solid/eye-low-vision.svg","fontawesome-solid-eye-slash":"fontawesome/solid/eye-slash.svg","fontawesome-solid-eye":"fontawesome/solid/eye.svg","fontawesome-solid-f":"fontawesome/solid/f.svg","fontawesome-solid-face-angry":"fontawesome/solid/face-angry.svg","fontawesome-solid-face-dizzy":"fontawesome/solid/face-dizzy.svg","fontawesome-solid-face-flushed":"fontawesome/solid/face-flushed.svg","fontawesome-solid-face-frown-open":"fontawesome/solid/face-frown-open.svg","fontawesome-solid-face-frown":"fontawesome/solid/face-frown.svg","fontawesome-solid-face-grimace":"fontawesome/solid/face-grimace.svg","fontawesome-solid-face-grin-beam-sweat":"fontawesome/solid/face-grin-beam-sweat.svg","fontawesome-solid-face-grin-beam":"fontawesome/solid/face-grin-beam.svg","fontawesome-solid-face-grin-hearts":"fontawesome/solid/face-grin-hearts.svg","fontawesome-solid-face-grin-squint-tears":"fontawesome/solid/face-grin-squint-tears.svg","fontawesome-solid-face-grin-squint":"fontawesome/solid/face-grin-squint.svg","fontawesome-solid-face-grin-stars":"fontawesome/solid/face-grin-stars.svg","fontawesome-solid-face-grin-tears":"fontawesome/solid/face-grin-tears.svg","fontawesome-solid-face-grin-tongue-squint":"fontawesome/solid/face-grin-tongue-squint.svg","fontawesome-solid-face-grin-tongue-wink":"fontawesome/solid/face-grin-tongue-wink.svg","fontawesome-solid-face-grin-tongue":"fontawesome/solid/face-grin-tongue.svg","fontawesome-solid-face-grin-wide":"fontawesome/solid/face-grin-wide.svg","fontawesome-solid-face-grin-wink":"fontawesome/solid/face-grin-wink.svg","fontawesome-solid-face-grin":"fontawesome/solid/face-grin.svg","fontawesome-solid-face-kiss-beam":"fontawesome/solid/face-kiss-beam.svg","fontawesome-solid-face-kiss-wink-heart":"fontawesome/solid/face-kiss-wink-heart.svg","fontawesome-solid-face-kiss":"fontawesome/solid/face-kiss.svg","fontawesome-solid-face-laugh-beam":"fontawesome/solid/face-laugh-beam.svg","fontawesome-solid-face-laugh-squint":"fontawesome/solid/face-laugh-squint.svg","fontawesome-solid-face-laugh-wink":"fontawesome/solid/face-laugh-wink.svg","fontawesome-solid-face-laugh":"fontawesome/solid/face-laugh.svg","fontawesome-solid-face-meh-blank":"fontawesome/solid/face-meh-blank.svg","fontawesome-solid-face-meh":"fontawesome/solid/face-meh.svg","fontawesome-solid-face-rolling-eyes":"fontawesome/solid/face-rolling-eyes.svg","fontawesome-solid-face-sad-cry":"fontawesome/solid/face-sad-cry.svg","fontawesome-solid-face-sad-tear":"fontawesome/solid/face-sad-tear.svg","fontawesome-solid-face-smile-beam":"fontawesome/solid/face-smile-beam.svg","fontawesome-solid-face-smile-wink":"fontawesome/solid/face-smile-wink.svg","fontawesome-solid-face-smile":"fontawesome/solid/face-smile.svg","fontawesome-solid-face-surprise":"fontawesome/solid/face-surprise.svg","fontawesome-solid-face-tired":"fontawesome/solid/face-tired.svg","fontawesome-solid-fan":"fontawesome/solid/fan.svg","fontawesome-solid-faucet-drip":"fontawesome/solid/faucet-drip.svg","fontawesome-solid-faucet":"fontawesome/solid/faucet.svg","fontawesome-solid-fax":"fontawesome/solid/fax.svg","fontawesome-solid-feather-pointed":"fontawesome/solid/feather-pointed.svg","fontawesome-solid-feather":"fontawesome/solid/feather.svg","fontawesome-solid-ferry":"fontawesome/solid/ferry.svg","fontawesome-solid-file-arrow-down":"fontawesome/solid/file-arrow-down.svg","fontawesome-solid-file-arrow-up":"fontawesome/solid/file-arrow-up.svg","fontawesome-solid-file-audio":"fontawesome/solid/file-audio.svg","fontawesome-solid-file-circle-check":"fontawesome/solid/file-circle-check.svg","fontawesome-solid-file-circle-exclamation":"fontawesome/solid/file-circle-exclamation.svg","fontawesome-solid-file-circle-minus":"fontawesome/solid/file-circle-minus.svg","fontawesome-solid-file-circle-plus":"fontawesome/solid/file-circle-plus.svg","fontawesome-solid-file-circle-question":"fontawesome/solid/file-circle-question.svg","fontawesome-solid-file-circle-xmark":"fontawesome/solid/file-circle-xmark.svg","fontawesome-solid-file-code":"fontawesome/solid/file-code.svg","fontawesome-solid-file-contract":"fontawesome/solid/file-contract.svg","fontawesome-solid-file-csv":"fontawesome/solid/file-csv.svg","fontawesome-solid-file-excel":"fontawesome/solid/file-excel.svg","fontawesome-solid-file-export":"fontawesome/solid/file-export.svg","fontawesome-solid-file-image":"fontawesome/solid/file-image.svg","fontawesome-solid-file-import":"fontawesome/solid/file-import.svg","fontawesome-solid-file-invoice-dollar":"fontawesome/solid/file-invoice-dollar.svg","fontawesome-solid-file-invoice":"fontawesome/solid/file-invoice.svg","fontawesome-solid-file-lines":"fontawesome/solid/file-lines.svg","fontawesome-solid-file-medical":"fontawesome/solid/file-medical.svg","fontawesome-solid-file-pdf":"fontawesome/solid/file-pdf.svg","fontawesome-solid-file-pen":"fontawesome/solid/file-pen.svg","fontawesome-solid-file-powerpoint":"fontawesome/solid/file-powerpoint.svg","fontawesome-solid-file-prescription":"fontawesome/solid/file-prescription.svg","fontawesome-solid-file-shield":"fontawesome/solid/file-shield.svg","fontawesome-solid-file-signature":"fontawesome/solid/file-signature.svg","fontawesome-solid-file-video":"fontawesome/solid/file-video.svg","fontawesome-solid-file-waveform":"fontawesome/solid/file-waveform.svg","fontawesome-solid-file-word":"fontawesome/solid/file-word.svg","fontawesome-solid-file-zipper":"fontawesome/solid/file-zipper.svg","fontawesome-solid-file":"fontawesome/solid/file.svg","fontawesome-solid-fill-drip":"fontawesome/solid/fill-drip.svg","fontawesome-solid-fill":"fontawesome/solid/fill.svg","fontawesome-solid-film":"fontawesome/solid/film.svg","fontawesome-solid-filter-circle-dollar":"fontawesome/solid/filter-circle-dollar.svg","fontawesome-solid-filter-circle-xmark":"fontawesome/solid/filter-circle-xmark.svg","fontawesome-solid-filter":"fontawesome/solid/filter.svg","fontawesome-solid-fingerprint":"fontawesome/solid/fingerprint.svg","fontawesome-solid-fire-burner":"fontawesome/solid/fire-burner.svg","fontawesome-solid-fire-extinguisher":"fontawesome/solid/fire-extinguisher.svg","fontawesome-solid-fire-flame-curved":"fontawesome/solid/fire-flame-curved.svg","fontawesome-solid-fire-flame-simple":"fontawesome/solid/fire-flame-simple.svg","fontawesome-solid-fire":"fontawesome/solid/fire.svg","fontawesome-solid-fish-fins":"fontawesome/solid/fish-fins.svg","fontawesome-solid-fish":"fontawesome/solid/fish.svg","fontawesome-solid-flag-checkered":"fontawesome/solid/flag-checkered.svg","fontawesome-solid-flag-usa":"fontawesome/solid/flag-usa.svg","fontawesome-solid-flag":"fontawesome/solid/flag.svg","fontawesome-solid-flask-vial":"fontawesome/solid/flask-vial.svg","fontawesome-solid-flask":"fontawesome/solid/flask.svg","fontawesome-solid-floppy-disk":"fontawesome/solid/floppy-disk.svg","fontawesome-solid-florin-sign":"fontawesome/solid/florin-sign.svg","fontawesome-solid-folder-closed":"fontawesome/solid/folder-closed.svg","fontawesome-solid-folder-minus":"fontawesome/solid/folder-minus.svg","fontawesome-solid-folder-open":"fontawesome/solid/folder-open.svg","fontawesome-solid-folder-plus":"fontawesome/solid/folder-plus.svg","fontawesome-solid-folder-tree":"fontawesome/solid/folder-tree.svg","fontawesome-solid-folder":"fontawesome/solid/folder.svg","fontawesome-solid-font-awesome":"fontawesome/solid/font-awesome.svg","fontawesome-solid-font":"fontawesome/solid/font.svg","fontawesome-solid-football":"fontawesome/solid/football.svg","fontawesome-solid-forward-fast":"fontawesome/solid/forward-fast.svg","fontawesome-solid-forward-step":"fontawesome/solid/forward-step.svg","fontawesome-solid-forward":"fontawesome/solid/forward.svg","fontawesome-solid-franc-sign":"fontawesome/solid/franc-sign.svg","fontawesome-solid-frog":"fontawesome/solid/frog.svg","fontawesome-solid-futbol":"fontawesome/solid/futbol.svg","fontawesome-solid-g":"fontawesome/solid/g.svg","fontawesome-solid-gamepad":"fontawesome/solid/gamepad.svg","fontawesome-solid-gas-pump":"fontawesome/solid/gas-pump.svg","fontawesome-solid-gauge-high":"fontawesome/solid/gauge-high.svg","fontawesome-solid-gauge-simple-high":"fontawesome/solid/gauge-simple-high.svg","fontawesome-solid-gauge-simple":"fontawesome/solid/gauge-simple.svg","fontawesome-solid-gauge":"fontawesome/solid/gauge.svg","fontawesome-solid-gavel":"fontawesome/solid/gavel.svg","fontawesome-solid-gear":"fontawesome/solid/gear.svg","fontawesome-solid-gears":"fontawesome/solid/gears.svg","fontawesome-solid-gem":"fontawesome/solid/gem.svg","fontawesome-solid-genderless":"fontawesome/solid/genderless.svg","fontawesome-solid-ghost":"fontawesome/solid/ghost.svg","fontawesome-solid-gift":"fontawesome/solid/gift.svg","fontawesome-solid-gifts":"fontawesome/solid/gifts.svg","fontawesome-solid-glass-water-droplet":"fontawesome/solid/glass-water-droplet.svg","fontawesome-solid-glass-water":"fontawesome/solid/glass-water.svg","fontawesome-solid-glasses":"fontawesome/solid/glasses.svg","fontawesome-solid-globe":"fontawesome/solid/globe.svg","fontawesome-solid-golf-ball-tee":"fontawesome/solid/golf-ball-tee.svg","fontawesome-solid-gopuram":"fontawesome/solid/gopuram.svg","fontawesome-solid-graduation-cap":"fontawesome/solid/graduation-cap.svg","fontawesome-solid-greater-than-equal":"fontawesome/solid/greater-than-equal.svg","fontawesome-solid-greater-than":"fontawesome/solid/greater-than.svg","fontawesome-solid-grip-lines-vertical":"fontawesome/solid/grip-lines-vertical.svg","fontawesome-solid-grip-lines":"fontawesome/solid/grip-lines.svg","fontawesome-solid-grip-vertical":"fontawesome/solid/grip-vertical.svg","fontawesome-solid-grip":"fontawesome/solid/grip.svg","fontawesome-solid-group-arrows-rotate":"fontawesome/solid/group-arrows-rotate.svg","fontawesome-solid-guarani-sign":"fontawesome/solid/guarani-sign.svg","fontawesome-solid-guitar":"fontawesome/solid/guitar.svg","fontawesome-solid-gun":"fontawesome/solid/gun.svg","fontawesome-solid-h":"fontawesome/solid/h.svg","fontawesome-solid-hammer":"fontawesome/solid/hammer.svg","fontawesome-solid-hamsa":"fontawesome/solid/hamsa.svg","fontawesome-solid-hand-back-fist":"fontawesome/solid/hand-back-fist.svg","fontawesome-solid-hand-dots":"fontawesome/solid/hand-dots.svg","fontawesome-solid-hand-fist":"fontawesome/solid/hand-fist.svg","fontawesome-solid-hand-holding-dollar":"fontawesome/solid/hand-holding-dollar.svg","fontawesome-solid-hand-holding-droplet":"fontawesome/solid/hand-holding-droplet.svg","fontawesome-solid-hand-holding-hand":"fontawesome/solid/hand-holding-hand.svg","fontawesome-solid-hand-holding-heart":"fontawesome/solid/hand-holding-heart.svg","fontawesome-solid-hand-holding-medical":"fontawesome/solid/hand-holding-medical.svg","fontawesome-solid-hand-holding":"fontawesome/solid/hand-holding.svg","fontawesome-solid-hand-lizard":"fontawesome/solid/hand-lizard.svg","fontawesome-solid-hand-middle-finger":"fontawesome/solid/hand-middle-finger.svg","fontawesome-solid-hand-peace":"fontawesome/solid/hand-peace.svg","fontawesome-solid-hand-point-down":"fontawesome/solid/hand-point-down.svg","fontawesome-solid-hand-point-left":"fontawesome/solid/hand-point-left.svg","fontawesome-solid-hand-point-right":"fontawesome/solid/hand-point-right.svg","fontawesome-solid-hand-point-up":"fontawesome/solid/hand-point-up.svg","fontawesome-solid-hand-pointer":"fontawesome/solid/hand-pointer.svg","fontawesome-solid-hand-scissors":"fontawesome/solid/hand-scissors.svg","fontawesome-solid-hand-sparkles":"fontawesome/solid/hand-sparkles.svg","fontawesome-solid-hand-spock":"fontawesome/solid/hand-spock.svg","fontawesome-solid-hand":"fontawesome/solid/hand.svg","fontawesome-solid-handcuffs":"fontawesome/solid/handcuffs.svg","fontawesome-solid-hands-asl-interpreting":"fontawesome/solid/hands-asl-interpreting.svg","fontawesome-solid-hands-bound":"fontawesome/solid/hands-bound.svg","fontawesome-solid-hands-bubbles":"fontawesome/solid/hands-bubbles.svg","fontawesome-solid-hands-clapping":"fontawesome/solid/hands-clapping.svg","fontawesome-solid-hands-holding-child":"fontawesome/solid/hands-holding-child.svg","fontawesome-solid-hands-holding-circle":"fontawesome/solid/hands-holding-circle.svg","fontawesome-solid-hands-holding":"fontawesome/solid/hands-holding.svg","fontawesome-solid-hands-praying":"fontawesome/solid/hands-praying.svg","fontawesome-solid-hands":"fontawesome/solid/hands.svg","fontawesome-solid-handshake-angle":"fontawesome/solid/handshake-angle.svg","fontawesome-solid-handshake-simple-slash":"fontawesome/solid/handshake-simple-slash.svg","fontawesome-solid-handshake-simple":"fontawesome/solid/handshake-simple.svg","fontawesome-solid-handshake-slash":"fontawesome/solid/handshake-slash.svg","fontawesome-solid-handshake":"fontawesome/solid/handshake.svg","fontawesome-solid-hanukiah":"fontawesome/solid/hanukiah.svg","fontawesome-solid-hard-drive":"fontawesome/solid/hard-drive.svg","fontawesome-solid-hashtag":"fontawesome/solid/hashtag.svg","fontawesome-solid-hat-cowboy-side":"fontawesome/solid/hat-cowboy-side.svg","fontawesome-solid-hat-cowboy":"fontawesome/solid/hat-cowboy.svg","fontawesome-solid-hat-wizard":"fontawesome/solid/hat-wizard.svg","fontawesome-solid-head-side-cough-slash":"fontawesome/solid/head-side-cough-slash.svg","fontawesome-solid-head-side-cough":"fontawesome/solid/head-side-cough.svg","fontawesome-solid-head-side-mask":"fontawesome/solid/head-side-mask.svg","fontawesome-solid-head-side-virus":"fontawesome/solid/head-side-virus.svg","fontawesome-solid-heading":"fontawesome/solid/heading.svg","fontawesome-solid-headphones-simple":"fontawesome/solid/headphones-simple.svg","fontawesome-solid-headphones":"fontawesome/solid/headphones.svg","fontawesome-solid-headset":"fontawesome/solid/headset.svg","fontawesome-solid-heart-circle-bolt":"fontawesome/solid/heart-circle-bolt.svg","fontawesome-solid-heart-circle-check":"fontawesome/solid/heart-circle-check.svg","fontawesome-solid-heart-circle-exclamation":"fontawesome/solid/heart-circle-exclamation.svg","fontawesome-solid-heart-circle-minus":"fontawesome/solid/heart-circle-minus.svg","fontawesome-solid-heart-circle-plus":"fontawesome/solid/heart-circle-plus.svg","fontawesome-solid-heart-circle-xmark":"fontawesome/solid/heart-circle-xmark.svg","fontawesome-solid-heart-crack":"fontawesome/solid/heart-crack.svg","fontawesome-solid-heart-pulse":"fontawesome/solid/heart-pulse.svg","fontawesome-solid-heart":"fontawesome/solid/heart.svg","fontawesome-solid-helicopter-symbol":"fontawesome/solid/helicopter-symbol.svg","fontawesome-solid-helicopter":"fontawesome/solid/helicopter.svg","fontawesome-solid-helmet-safety":"fontawesome/solid/helmet-safety.svg","fontawesome-solid-helmet-un":"fontawesome/solid/helmet-un.svg","fontawesome-solid-highlighter":"fontawesome/solid/highlighter.svg","fontawesome-solid-hill-avalanche":"fontawesome/solid/hill-avalanche.svg","fontawesome-solid-hill-rockslide":"fontawesome/solid/hill-rockslide.svg","fontawesome-solid-hippo":"fontawesome/solid/hippo.svg","fontawesome-solid-hockey-puck":"fontawesome/solid/hockey-puck.svg","fontawesome-solid-holly-berry":"fontawesome/solid/holly-berry.svg","fontawesome-solid-horse-head":"fontawesome/solid/horse-head.svg","fontawesome-solid-horse":"fontawesome/solid/horse.svg","fontawesome-solid-hospital-user":"fontawesome/solid/hospital-user.svg","fontawesome-solid-hospital":"fontawesome/solid/hospital.svg","fontawesome-solid-hot-tub-person":"fontawesome/solid/hot-tub-person.svg","fontawesome-solid-hotdog":"fontawesome/solid/hotdog.svg","fontawesome-solid-hotel":"fontawesome/solid/hotel.svg","fontawesome-solid-hourglass-end":"fontawesome/solid/hourglass-end.svg","fontawesome-solid-hourglass-half":"fontawesome/solid/hourglass-half.svg","fontawesome-solid-hourglass-start":"fontawesome/solid/hourglass-start.svg","fontawesome-solid-hourglass":"fontawesome/solid/hourglass.svg","fontawesome-solid-house-chimney-crack":"fontawesome/solid/house-chimney-crack.svg","fontawesome-solid-house-chimney-medical":"fontawesome/solid/house-chimney-medical.svg","fontawesome-solid-house-chimney-user":"fontawesome/solid/house-chimney-user.svg","fontawesome-solid-house-chimney-window":"fontawesome/solid/house-chimney-window.svg","fontawesome-solid-house-chimney":"fontawesome/solid/house-chimney.svg","fontawesome-solid-house-circle-check":"fontawesome/solid/house-circle-check.svg","fontawesome-solid-house-circle-exclamation":"fontawesome/solid/house-circle-exclamation.svg","fontawesome-solid-house-circle-xmark":"fontawesome/solid/house-circle-xmark.svg","fontawesome-solid-house-crack":"fontawesome/solid/house-crack.svg","fontawesome-solid-house-fire":"fontawesome/solid/house-fire.svg","fontawesome-solid-house-flag":"fontawesome/solid/house-flag.svg","fontawesome-solid-house-flood-water-circle-arrow-right":"fontawesome/solid/house-flood-water-circle-arrow-right.svg","fontawesome-solid-house-flood-water":"fontawesome/solid/house-flood-water.svg","fontawesome-solid-house-laptop":"fontawesome/solid/house-laptop.svg","fontawesome-solid-house-lock":"fontawesome/solid/house-lock.svg","fontawesome-solid-house-medical-circle-check":"fontawesome/solid/house-medical-circle-check.svg","fontawesome-solid-house-medical-circle-exclamation":"fontawesome/solid/house-medical-circle-exclamation.svg","fontawesome-solid-house-medical-circle-xmark":"fontawesome/solid/house-medical-circle-xmark.svg","fontawesome-solid-house-medical-flag":"fontawesome/solid/house-medical-flag.svg","fontawesome-solid-house-medical":"fontawesome/solid/house-medical.svg","fontawesome-solid-house-signal":"fontawesome/solid/house-signal.svg","fontawesome-solid-house-tsunami":"fontawesome/solid/house-tsunami.svg","fontawesome-solid-house-user":"fontawesome/solid/house-user.svg","fontawesome-solid-house":"fontawesome/solid/house.svg","fontawesome-solid-hryvnia-sign":"fontawesome/solid/hryvnia-sign.svg","fontawesome-solid-hurricane":"fontawesome/solid/hurricane.svg","fontawesome-solid-i-cursor":"fontawesome/solid/i-cursor.svg","fontawesome-solid-i":"fontawesome/solid/i.svg","fontawesome-solid-ice-cream":"fontawesome/solid/ice-cream.svg","fontawesome-solid-icicles":"fontawesome/solid/icicles.svg","fontawesome-solid-icons":"fontawesome/solid/icons.svg","fontawesome-solid-id-badge":"fontawesome/solid/id-badge.svg","fontawesome-solid-id-card-clip":"fontawesome/solid/id-card-clip.svg","fontawesome-solid-id-card":"fontawesome/solid/id-card.svg","fontawesome-solid-igloo":"fontawesome/solid/igloo.svg","fontawesome-solid-image-portrait":"fontawesome/solid/image-portrait.svg","fontawesome-solid-image":"fontawesome/solid/image.svg","fontawesome-solid-images":"fontawesome/solid/images.svg","fontawesome-solid-inbox":"fontawesome/solid/inbox.svg","fontawesome-solid-indent":"fontawesome/solid/indent.svg","fontawesome-solid-indian-rupee-sign":"fontawesome/solid/indian-rupee-sign.svg","fontawesome-solid-industry":"fontawesome/solid/industry.svg","fontawesome-solid-infinity":"fontawesome/solid/infinity.svg","fontawesome-solid-info":"fontawesome/solid/info.svg","fontawesome-solid-italic":"fontawesome/solid/italic.svg","fontawesome-solid-j":"fontawesome/solid/j.svg","fontawesome-solid-jar-wheat":"fontawesome/solid/jar-wheat.svg","fontawesome-solid-jar":"fontawesome/solid/jar.svg","fontawesome-solid-jedi":"fontawesome/solid/jedi.svg","fontawesome-solid-jet-fighter-up":"fontawesome/solid/jet-fighter-up.svg","fontawesome-solid-jet-fighter":"fontawesome/solid/jet-fighter.svg","fontawesome-solid-joint":"fontawesome/solid/joint.svg","fontawesome-solid-jug-detergent":"fontawesome/solid/jug-detergent.svg","fontawesome-solid-k":"fontawesome/solid/k.svg","fontawesome-solid-kaaba":"fontawesome/solid/kaaba.svg","fontawesome-solid-key":"fontawesome/solid/key.svg","fontawesome-solid-keyboard":"fontawesome/solid/keyboard.svg","fontawesome-solid-khanda":"fontawesome/solid/khanda.svg","fontawesome-solid-kip-sign":"fontawesome/solid/kip-sign.svg","fontawesome-solid-kit-medical":"fontawesome/solid/kit-medical.svg","fontawesome-solid-kitchen-set":"fontawesome/solid/kitchen-set.svg","fontawesome-solid-kiwi-bird":"fontawesome/solid/kiwi-bird.svg","fontawesome-solid-l":"fontawesome/solid/l.svg","fontawesome-solid-land-mine-on":"fontawesome/solid/land-mine-on.svg","fontawesome-solid-landmark-dome":"fontawesome/solid/landmark-dome.svg","fontawesome-solid-landmark-flag":"fontawesome/solid/landmark-flag.svg","fontawesome-solid-landmark":"fontawesome/solid/landmark.svg","fontawesome-solid-language":"fontawesome/solid/language.svg","fontawesome-solid-laptop-code":"fontawesome/solid/laptop-code.svg","fontawesome-solid-laptop-file":"fontawesome/solid/laptop-file.svg","fontawesome-solid-laptop-medical":"fontawesome/solid/laptop-medical.svg","fontawesome-solid-laptop":"fontawesome/solid/laptop.svg","fontawesome-solid-lari-sign":"fontawesome/solid/lari-sign.svg","fontawesome-solid-layer-group":"fontawesome/solid/layer-group.svg","fontawesome-solid-leaf":"fontawesome/solid/leaf.svg","fontawesome-solid-left-long":"fontawesome/solid/left-long.svg","fontawesome-solid-left-right":"fontawesome/solid/left-right.svg","fontawesome-solid-lemon":"fontawesome/solid/lemon.svg","fontawesome-solid-less-than-equal":"fontawesome/solid/less-than-equal.svg","fontawesome-solid-less-than":"fontawesome/solid/less-than.svg","fontawesome-solid-life-ring":"fontawesome/solid/life-ring.svg","fontawesome-solid-lightbulb":"fontawesome/solid/lightbulb.svg","fontawesome-solid-lines-leaning":"fontawesome/solid/lines-leaning.svg","fontawesome-solid-link-slash":"fontawesome/solid/link-slash.svg","fontawesome-solid-link":"fontawesome/solid/link.svg","fontawesome-solid-lira-sign":"fontawesome/solid/lira-sign.svg","fontawesome-solid-list-check":"fontawesome/solid/list-check.svg","fontawesome-solid-list-ol":"fontawesome/solid/list-ol.svg","fontawesome-solid-list-ul":"fontawesome/solid/list-ul.svg","fontawesome-solid-list":"fontawesome/solid/list.svg","fontawesome-solid-litecoin-sign":"fontawesome/solid/litecoin-sign.svg","fontawesome-solid-location-arrow":"fontawesome/solid/location-arrow.svg","fontawesome-solid-location-crosshairs":"fontawesome/solid/location-crosshairs.svg","fontawesome-solid-location-dot":"fontawesome/solid/location-dot.svg","fontawesome-solid-location-pin-lock":"fontawesome/solid/location-pin-lock.svg","fontawesome-solid-location-pin":"fontawesome/solid/location-pin.svg","fontawesome-solid-lock-open":"fontawesome/solid/lock-open.svg","fontawesome-solid-lock":"fontawesome/solid/lock.svg","fontawesome-solid-locust":"fontawesome/solid/locust.svg","fontawesome-solid-lungs-virus":"fontawesome/solid/lungs-virus.svg","fontawesome-solid-lungs":"fontawesome/solid/lungs.svg","fontawesome-solid-m":"fontawesome/solid/m.svg","fontawesome-solid-magnet":"fontawesome/solid/magnet.svg","fontawesome-solid-magnifying-glass-arrow-right":"fontawesome/solid/magnifying-glass-arrow-right.svg","fontawesome-solid-magnifying-glass-chart":"fontawesome/solid/magnifying-glass-chart.svg","fontawesome-solid-magnifying-glass-dollar":"fontawesome/solid/magnifying-glass-dollar.svg","fontawesome-solid-magnifying-glass-location":"fontawesome/solid/magnifying-glass-location.svg","fontawesome-solid-magnifying-glass-minus":"fontawesome/solid/magnifying-glass-minus.svg","fontawesome-solid-magnifying-glass-plus":"fontawesome/solid/magnifying-glass-plus.svg","fontawesome-solid-magnifying-glass":"fontawesome/solid/magnifying-glass.svg","fontawesome-solid-manat-sign":"fontawesome/solid/manat-sign.svg","fontawesome-solid-map-location-dot":"fontawesome/solid/map-location-dot.svg","fontawesome-solid-map-location":"fontawesome/solid/map-location.svg","fontawesome-solid-map-pin":"fontawesome/solid/map-pin.svg","fontawesome-solid-map":"fontawesome/solid/map.svg","fontawesome-solid-marker":"fontawesome/solid/marker.svg","fontawesome-solid-mars-and-venus-burst":"fontawesome/solid/mars-and-venus-burst.svg","fontawesome-solid-mars-and-venus":"fontawesome/solid/mars-and-venus.svg","fontawesome-solid-mars-double":"fontawesome/solid/mars-double.svg","fontawesome-solid-mars-stroke-right":"fontawesome/solid/mars-stroke-right.svg","fontawesome-solid-mars-stroke-up":"fontawesome/solid/mars-stroke-up.svg","fontawesome-solid-mars-stroke":"fontawesome/solid/mars-stroke.svg","fontawesome-solid-mars":"fontawesome/solid/mars.svg","fontawesome-solid-martini-glass-citrus":"fontawesome/solid/martini-glass-citrus.svg","fontawesome-solid-martini-glass-empty":"fontawesome/solid/martini-glass-empty.svg","fontawesome-solid-martini-glass":"fontawesome/solid/martini-glass.svg","fontawesome-solid-mask-face":"fontawesome/solid/mask-face.svg","fontawesome-solid-mask-ventilator":"fontawesome/solid/mask-ventilator.svg","fontawesome-solid-mask":"fontawesome/solid/mask.svg","fontawesome-solid-masks-theater":"fontawesome/solid/masks-theater.svg","fontawesome-solid-mattress-pillow":"fontawesome/solid/mattress-pillow.svg","fontawesome-solid-maximize":"fontawesome/solid/maximize.svg","fontawesome-solid-medal":"fontawesome/solid/medal.svg","fontawesome-solid-memory":"fontawesome/solid/memory.svg","fontawesome-solid-menorah":"fontawesome/solid/menorah.svg","fontawesome-solid-mercury":"fontawesome/solid/mercury.svg","fontawesome-solid-message":"fontawesome/solid/message.svg","fontawesome-solid-meteor":"fontawesome/solid/meteor.svg","fontawesome-solid-microchip":"fontawesome/solid/microchip.svg","fontawesome-solid-microphone-lines-slash":"fontawesome/solid/microphone-lines-slash.svg","fontawesome-solid-microphone-lines":"fontawesome/solid/microphone-lines.svg","fontawesome-solid-microphone-slash":"fontawesome/solid/microphone-slash.svg","fontawesome-solid-microphone":"fontawesome/solid/microphone.svg","fontawesome-solid-microscope":"fontawesome/solid/microscope.svg","fontawesome-solid-mill-sign":"fontawesome/solid/mill-sign.svg","fontawesome-solid-minimize":"fontawesome/solid/minimize.svg","fontawesome-solid-minus":"fontawesome/solid/minus.svg","fontawesome-solid-mitten":"fontawesome/solid/mitten.svg","fontawesome-solid-mobile-button":"fontawesome/solid/mobile-button.svg","fontawesome-solid-mobile-retro":"fontawesome/solid/mobile-retro.svg","fontawesome-solid-mobile-screen-button":"fontawesome/solid/mobile-screen-button.svg","fontawesome-solid-mobile-screen":"fontawesome/solid/mobile-screen.svg","fontawesome-solid-mobile":"fontawesome/solid/mobile.svg","fontawesome-solid-money-bill-1-wave":"fontawesome/solid/money-bill-1-wave.svg","fontawesome-solid-money-bill-1":"fontawesome/solid/money-bill-1.svg","fontawesome-solid-money-bill-transfer":"fontawesome/solid/money-bill-transfer.svg","fontawesome-solid-money-bill-trend-up":"fontawesome/solid/money-bill-trend-up.svg","fontawesome-solid-money-bill-wave":"fontawesome/solid/money-bill-wave.svg","fontawesome-solid-money-bill-wheat":"fontawesome/solid/money-bill-wheat.svg","fontawesome-solid-money-bill":"fontawesome/solid/money-bill.svg","fontawesome-solid-money-bills":"fontawesome/solid/money-bills.svg","fontawesome-solid-money-check-dollar":"fontawesome/solid/money-check-dollar.svg","fontawesome-solid-money-check":"fontawesome/solid/money-check.svg","fontawesome-solid-monument":"fontawesome/solid/monument.svg","fontawesome-solid-moon":"fontawesome/solid/moon.svg","fontawesome-solid-mortar-pestle":"fontawesome/solid/mortar-pestle.svg","fontawesome-solid-mosque":"fontawesome/solid/mosque.svg","fontawesome-solid-mosquito-net":"fontawesome/solid/mosquito-net.svg","fontawesome-solid-mosquito":"fontawesome/solid/mosquito.svg","fontawesome-solid-motorcycle":"fontawesome/solid/motorcycle.svg","fontawesome-solid-mound":"fontawesome/solid/mound.svg","fontawesome-solid-mountain-city":"fontawesome/solid/mountain-city.svg","fontawesome-solid-mountain-sun":"fontawesome/solid/mountain-sun.svg","fontawesome-solid-mountain":"fontawesome/solid/mountain.svg","fontawesome-solid-mug-hot":"fontawesome/solid/mug-hot.svg","fontawesome-solid-mug-saucer":"fontawesome/solid/mug-saucer.svg","fontawesome-solid-music":"fontawesome/solid/music.svg","fontawesome-solid-n":"fontawesome/solid/n.svg","fontawesome-solid-naira-sign":"fontawesome/solid/naira-sign.svg","fontawesome-solid-network-wired":"fontawesome/solid/network-wired.svg","fontawesome-solid-neuter":"fontawesome/solid/neuter.svg","fontawesome-solid-newspaper":"fontawesome/solid/newspaper.svg","fontawesome-solid-not-equal":"fontawesome/solid/not-equal.svg","fontawesome-solid-notdef":"fontawesome/solid/notdef.svg","fontawesome-solid-note-sticky":"fontawesome/solid/note-sticky.svg","fontawesome-solid-notes-medical":"fontawesome/solid/notes-medical.svg","fontawesome-solid-o":"fontawesome/solid/o.svg","fontawesome-solid-object-group":"fontawesome/solid/object-group.svg","fontawesome-solid-object-ungroup":"fontawesome/solid/object-ungroup.svg","fontawesome-solid-oil-can":"fontawesome/solid/oil-can.svg","fontawesome-solid-oil-well":"fontawesome/solid/oil-well.svg","fontawesome-solid-om":"fontawesome/solid/om.svg","fontawesome-solid-otter":"fontawesome/solid/otter.svg","fontawesome-solid-outdent":"fontawesome/solid/outdent.svg","fontawesome-solid-p":"fontawesome/solid/p.svg","fontawesome-solid-pager":"fontawesome/solid/pager.svg","fontawesome-solid-paint-roller":"fontawesome/solid/paint-roller.svg","fontawesome-solid-paintbrush":"fontawesome/solid/paintbrush.svg","fontawesome-solid-palette":"fontawesome/solid/palette.svg","fontawesome-solid-pallet":"fontawesome/solid/pallet.svg","fontawesome-solid-panorama":"fontawesome/solid/panorama.svg","fontawesome-solid-paper-plane":"fontawesome/solid/paper-plane.svg","fontawesome-solid-paperclip":"fontawesome/solid/paperclip.svg","fontawesome-solid-parachute-box":"fontawesome/solid/parachute-box.svg","fontawesome-solid-paragraph":"fontawesome/solid/paragraph.svg","fontawesome-solid-passport":"fontawesome/solid/passport.svg","fontawesome-solid-paste":"fontawesome/solid/paste.svg","fontawesome-solid-pause":"fontawesome/solid/pause.svg","fontawesome-solid-paw":"fontawesome/solid/paw.svg","fontawesome-solid-peace":"fontawesome/solid/peace.svg","fontawesome-solid-pen-clip":"fontawesome/solid/pen-clip.svg","fontawesome-solid-pen-fancy":"fontawesome/solid/pen-fancy.svg","fontawesome-solid-pen-nib":"fontawesome/solid/pen-nib.svg","fontawesome-solid-pen-ruler":"fontawesome/solid/pen-ruler.svg","fontawesome-solid-pen-to-square":"fontawesome/solid/pen-to-square.svg","fontawesome-solid-pen":"fontawesome/solid/pen.svg","fontawesome-solid-pencil":"fontawesome/solid/pencil.svg","fontawesome-solid-people-arrows":"fontawesome/solid/people-arrows.svg","fontawesome-solid-people-carry-box":"fontawesome/solid/people-carry-box.svg","fontawesome-solid-people-group":"fontawesome/solid/people-group.svg","fontawesome-solid-people-line":"fontawesome/solid/people-line.svg","fontawesome-solid-people-pulling":"fontawesome/solid/people-pulling.svg","fontawesome-solid-people-robbery":"fontawesome/solid/people-robbery.svg","fontawesome-solid-people-roof":"fontawesome/solid/people-roof.svg","fontawesome-solid-pepper-hot":"fontawesome/solid/pepper-hot.svg","fontawesome-solid-percent":"fontawesome/solid/percent.svg","fontawesome-solid-person-arrow-down-to-line":"fontawesome/solid/person-arrow-down-to-line.svg","fontawesome-solid-person-arrow-up-from-line":"fontawesome/solid/person-arrow-up-from-line.svg","fontawesome-solid-person-biking":"fontawesome/solid/person-biking.svg","fontawesome-solid-person-booth":"fontawesome/solid/person-booth.svg","fontawesome-solid-person-breastfeeding":"fontawesome/solid/person-breastfeeding.svg","fontawesome-solid-person-burst":"fontawesome/solid/person-burst.svg","fontawesome-solid-person-cane":"fontawesome/solid/person-cane.svg","fontawesome-solid-person-chalkboard":"fontawesome/solid/person-chalkboard.svg","fontawesome-solid-person-circle-check":"fontawesome/solid/person-circle-check.svg","fontawesome-solid-person-circle-exclamation":"fontawesome/solid/person-circle-exclamation.svg","fontawesome-solid-person-circle-minus":"fontawesome/solid/person-circle-minus.svg","fontawesome-solid-person-circle-plus":"fontawesome/solid/person-circle-plus.svg","fontawesome-solid-person-circle-question":"fontawesome/solid/person-circle-question.svg","fontawesome-solid-person-circle-xmark":"fontawesome/solid/person-circle-xmark.svg","fontawesome-solid-person-digging":"fontawesome/solid/person-digging.svg","fontawesome-solid-person-dots-from-line":"fontawesome/solid/person-dots-from-line.svg","fontawesome-solid-person-dress-burst":"fontawesome/solid/person-dress-burst.svg","fontawesome-solid-person-dress":"fontawesome/solid/person-dress.svg","fontawesome-solid-person-drowning":"fontawesome/solid/person-drowning.svg","fontawesome-solid-person-falling-burst":"fontawesome/solid/person-falling-burst.svg","fontawesome-solid-person-falling":"fontawesome/solid/person-falling.svg","fontawesome-solid-person-half-dress":"fontawesome/solid/person-half-dress.svg","fontawesome-solid-person-harassing":"fontawesome/solid/person-harassing.svg","fontawesome-solid-person-hiking":"fontawesome/solid/person-hiking.svg","fontawesome-solid-person-military-pointing":"fontawesome/solid/person-military-pointing.svg","fontawesome-solid-person-military-rifle":"fontawesome/solid/person-military-rifle.svg","fontawesome-solid-person-military-to-person":"fontawesome/solid/person-military-to-person.svg","fontawesome-solid-person-praying":"fontawesome/solid/person-praying.svg","fontawesome-solid-person-pregnant":"fontawesome/solid/person-pregnant.svg","fontawesome-solid-person-rays":"fontawesome/solid/person-rays.svg","fontawesome-solid-person-rifle":"fontawesome/solid/person-rifle.svg","fontawesome-solid-person-running":"fontawesome/solid/person-running.svg","fontawesome-solid-person-shelter":"fontawesome/solid/person-shelter.svg","fontawesome-solid-person-skating":"fontawesome/solid/person-skating.svg","fontawesome-solid-person-skiing-nordic":"fontawesome/solid/person-skiing-nordic.svg","fontawesome-solid-person-skiing":"fontawesome/solid/person-skiing.svg","fontawesome-solid-person-snowboarding":"fontawesome/solid/person-snowboarding.svg","fontawesome-solid-person-swimming":"fontawesome/solid/person-swimming.svg","fontawesome-solid-person-through-window":"fontawesome/solid/person-through-window.svg","fontawesome-solid-person-walking-arrow-loop-left":"fontawesome/solid/person-walking-arrow-loop-left.svg","fontawesome-solid-person-walking-arrow-right":"fontawesome/solid/person-walking-arrow-right.svg","fontawesome-solid-person-walking-dashed-line-arrow-right":"fontawesome/solid/person-walking-dashed-line-arrow-right.svg","fontawesome-solid-person-walking-luggage":"fontawesome/solid/person-walking-luggage.svg","fontawesome-solid-person-walking-with-cane":"fontawesome/solid/person-walking-with-cane.svg","fontawesome-solid-person-walking":"fontawesome/solid/person-walking.svg","fontawesome-solid-person":"fontawesome/solid/person.svg","fontawesome-solid-peseta-sign":"fontawesome/solid/peseta-sign.svg","fontawesome-solid-peso-sign":"fontawesome/solid/peso-sign.svg","fontawesome-solid-phone-flip":"fontawesome/solid/phone-flip.svg","fontawesome-solid-phone-slash":"fontawesome/solid/phone-slash.svg","fontawesome-solid-phone-volume":"fontawesome/solid/phone-volume.svg","fontawesome-solid-phone":"fontawesome/solid/phone.svg","fontawesome-solid-photo-film":"fontawesome/solid/photo-film.svg","fontawesome-solid-piggy-bank":"fontawesome/solid/piggy-bank.svg","fontawesome-solid-pills":"fontawesome/solid/pills.svg","fontawesome-solid-pizza-slice":"fontawesome/solid/pizza-slice.svg","fontawesome-solid-place-of-worship":"fontawesome/solid/place-of-worship.svg","fontawesome-solid-plane-arrival":"fontawesome/solid/plane-arrival.svg","fontawesome-solid-plane-circle-check":"fontawesome/solid/plane-circle-check.svg","fontawesome-solid-plane-circle-exclamation":"fontawesome/solid/plane-circle-exclamation.svg","fontawesome-solid-plane-circle-xmark":"fontawesome/solid/plane-circle-xmark.svg","fontawesome-solid-plane-departure":"fontawesome/solid/plane-departure.svg","fontawesome-solid-plane-lock":"fontawesome/solid/plane-lock.svg","fontawesome-solid-plane-slash":"fontawesome/solid/plane-slash.svg","fontawesome-solid-plane-up":"fontawesome/solid/plane-up.svg","fontawesome-solid-plane":"fontawesome/solid/plane.svg","fontawesome-solid-plant-wilt":"fontawesome/solid/plant-wilt.svg","fontawesome-solid-plate-wheat":"fontawesome/solid/plate-wheat.svg","fontawesome-solid-play":"fontawesome/solid/play.svg","fontawesome-solid-plug-circle-bolt":"fontawesome/solid/plug-circle-bolt.svg","fontawesome-solid-plug-circle-check":"fontawesome/solid/plug-circle-check.svg","fontawesome-solid-plug-circle-exclamation":"fontawesome/solid/plug-circle-exclamation.svg","fontawesome-solid-plug-circle-minus":"fontawesome/solid/plug-circle-minus.svg","fontawesome-solid-plug-circle-plus":"fontawesome/solid/plug-circle-plus.svg","fontawesome-solid-plug-circle-xmark":"fontawesome/solid/plug-circle-xmark.svg","fontawesome-solid-plug":"fontawesome/solid/plug.svg","fontawesome-solid-plus-minus":"fontawesome/solid/plus-minus.svg","fontawesome-solid-plus":"fontawesome/solid/plus.svg","fontawesome-solid-podcast":"fontawesome/solid/podcast.svg","fontawesome-solid-poo-storm":"fontawesome/solid/poo-storm.svg","fontawesome-solid-poo":"fontawesome/solid/poo.svg","fontawesome-solid-poop":"fontawesome/solid/poop.svg","fontawesome-solid-power-off":"fontawesome/solid/power-off.svg","fontawesome-solid-prescription-bottle-medical":"fontawesome/solid/prescription-bottle-medical.svg","fontawesome-solid-prescription-bottle":"fontawesome/solid/prescription-bottle.svg","fontawesome-solid-prescription":"fontawesome/solid/prescription.svg","fontawesome-solid-print":"fontawesome/solid/print.svg","fontawesome-solid-pump-medical":"fontawesome/solid/pump-medical.svg","fontawesome-solid-pump-soap":"fontawesome/solid/pump-soap.svg","fontawesome-solid-puzzle-piece":"fontawesome/solid/puzzle-piece.svg","fontawesome-solid-q":"fontawesome/solid/q.svg","fontawesome-solid-qrcode":"fontawesome/solid/qrcode.svg","fontawesome-solid-question":"fontawesome/solid/question.svg","fontawesome-solid-quote-left":"fontawesome/solid/quote-left.svg","fontawesome-solid-quote-right":"fontawesome/solid/quote-right.svg","fontawesome-solid-r":"fontawesome/solid/r.svg","fontawesome-solid-radiation":"fontawesome/solid/radiation.svg","fontawesome-solid-radio":"fontawesome/solid/radio.svg","fontawesome-solid-rainbow":"fontawesome/solid/rainbow.svg","fontawesome-solid-ranking-star":"fontawesome/solid/ranking-star.svg","fontawesome-solid-receipt":"fontawesome/solid/receipt.svg","fontawesome-solid-record-vinyl":"fontawesome/solid/record-vinyl.svg","fontawesome-solid-rectangle-ad":"fontawesome/solid/rectangle-ad.svg","fontawesome-solid-rectangle-list":"fontawesome/solid/rectangle-list.svg","fontawesome-solid-rectangle-xmark":"fontawesome/solid/rectangle-xmark.svg","fontawesome-solid-recycle":"fontawesome/solid/recycle.svg","fontawesome-solid-registered":"fontawesome/solid/registered.svg","fontawesome-solid-repeat":"fontawesome/solid/repeat.svg","fontawesome-solid-reply-all":"fontawesome/solid/reply-all.svg","fontawesome-solid-reply":"fontawesome/solid/reply.svg","fontawesome-solid-republican":"fontawesome/solid/republican.svg","fontawesome-solid-restroom":"fontawesome/solid/restroom.svg","fontawesome-solid-retweet":"fontawesome/solid/retweet.svg","fontawesome-solid-ribbon":"fontawesome/solid/ribbon.svg","fontawesome-solid-right-from-bracket":"fontawesome/solid/right-from-bracket.svg","fontawesome-solid-right-left":"fontawesome/solid/right-left.svg","fontawesome-solid-right-long":"fontawesome/solid/right-long.svg","fontawesome-solid-right-to-bracket":"fontawesome/solid/right-to-bracket.svg","fontawesome-solid-ring":"fontawesome/solid/ring.svg","fontawesome-solid-road-barrier":"fontawesome/solid/road-barrier.svg","fontawesome-solid-road-bridge":"fontawesome/solid/road-bridge.svg","fontawesome-solid-road-circle-check":"fontawesome/solid/road-circle-check.svg","fontawesome-solid-road-circle-exclamation":"fontawesome/solid/road-circle-exclamation.svg","fontawesome-solid-road-circle-xmark":"fontawesome/solid/road-circle-xmark.svg","fontawesome-solid-road-lock":"fontawesome/solid/road-lock.svg","fontawesome-solid-road-spikes":"fontawesome/solid/road-spikes.svg","fontawesome-solid-road":"fontawesome/solid/road.svg","fontawesome-solid-robot":"fontawesome/solid/robot.svg","fontawesome-solid-rocket":"fontawesome/solid/rocket.svg","fontawesome-solid-rotate-left":"fontawesome/solid/rotate-left.svg","fontawesome-solid-rotate-right":"fontawesome/solid/rotate-right.svg","fontawesome-solid-rotate":"fontawesome/solid/rotate.svg","fontawesome-solid-route":"fontawesome/solid/route.svg","fontawesome-solid-rss":"fontawesome/solid/rss.svg","fontawesome-solid-ruble-sign":"fontawesome/solid/ruble-sign.svg","fontawesome-solid-rug":"fontawesome/solid/rug.svg","fontawesome-solid-ruler-combined":"fontawesome/solid/ruler-combined.svg","fontawesome-solid-ruler-horizontal":"fontawesome/solid/ruler-horizontal.svg","fontawesome-solid-ruler-vertical":"fontawesome/solid/ruler-vertical.svg","fontawesome-solid-ruler":"fontawesome/solid/ruler.svg","fontawesome-solid-rupee-sign":"fontawesome/solid/rupee-sign.svg","fontawesome-solid-rupiah-sign":"fontawesome/solid/rupiah-sign.svg","fontawesome-solid-s":"fontawesome/solid/s.svg","fontawesome-solid-sack-dollar":"fontawesome/solid/sack-dollar.svg","fontawesome-solid-sack-xmark":"fontawesome/solid/sack-xmark.svg","fontawesome-solid-sailboat":"fontawesome/solid/sailboat.svg","fontawesome-solid-satellite-dish":"fontawesome/solid/satellite-dish.svg","fontawesome-solid-satellite":"fontawesome/solid/satellite.svg","fontawesome-solid-scale-balanced":"fontawesome/solid/scale-balanced.svg","fontawesome-solid-scale-unbalanced-flip":"fontawesome/solid/scale-unbalanced-flip.svg","fontawesome-solid-scale-unbalanced":"fontawesome/solid/scale-unbalanced.svg","fontawesome-solid-school-circle-check":"fontawesome/solid/school-circle-check.svg","fontawesome-solid-school-circle-exclamation":"fontawesome/solid/school-circle-exclamation.svg","fontawesome-solid-school-circle-xmark":"fontawesome/solid/school-circle-xmark.svg","fontawesome-solid-school-flag":"fontawesome/solid/school-flag.svg","fontawesome-solid-school-lock":"fontawesome/solid/school-lock.svg","fontawesome-solid-school":"fontawesome/solid/school.svg","fontawesome-solid-scissors":"fontawesome/solid/scissors.svg","fontawesome-solid-screwdriver-wrench":"fontawesome/solid/screwdriver-wrench.svg","fontawesome-solid-screwdriver":"fontawesome/solid/screwdriver.svg","fontawesome-solid-scroll-torah":"fontawesome/solid/scroll-torah.svg","fontawesome-solid-scroll":"fontawesome/solid/scroll.svg","fontawesome-solid-sd-card":"fontawesome/solid/sd-card.svg","fontawesome-solid-section":"fontawesome/solid/section.svg","fontawesome-solid-seedling":"fontawesome/solid/seedling.svg","fontawesome-solid-server":"fontawesome/solid/server.svg","fontawesome-solid-shapes":"fontawesome/solid/shapes.svg","fontawesome-solid-share-from-square":"fontawesome/solid/share-from-square.svg","fontawesome-solid-share-nodes":"fontawesome/solid/share-nodes.svg","fontawesome-solid-share":"fontawesome/solid/share.svg","fontawesome-solid-sheet-plastic":"fontawesome/solid/sheet-plastic.svg","fontawesome-solid-shekel-sign":"fontawesome/solid/shekel-sign.svg","fontawesome-solid-shield-cat":"fontawesome/solid/shield-cat.svg","fontawesome-solid-shield-dog":"fontawesome/solid/shield-dog.svg","fontawesome-solid-shield-halved":"fontawesome/solid/shield-halved.svg","fontawesome-solid-shield-heart":"fontawesome/solid/shield-heart.svg","fontawesome-solid-shield-virus":"fontawesome/solid/shield-virus.svg","fontawesome-solid-shield":"fontawesome/solid/shield.svg","fontawesome-solid-ship":"fontawesome/solid/ship.svg","fontawesome-solid-shirt":"fontawesome/solid/shirt.svg","fontawesome-solid-shoe-prints":"fontawesome/solid/shoe-prints.svg","fontawesome-solid-shop-lock":"fontawesome/solid/shop-lock.svg","fontawesome-solid-shop-slash":"fontawesome/solid/shop-slash.svg","fontawesome-solid-shop":"fontawesome/solid/shop.svg","fontawesome-solid-shower":"fontawesome/solid/shower.svg","fontawesome-solid-shrimp":"fontawesome/solid/shrimp.svg","fontawesome-solid-shuffle":"fontawesome/solid/shuffle.svg","fontawesome-solid-shuttle-space":"fontawesome/solid/shuttle-space.svg","fontawesome-solid-sign-hanging":"fontawesome/solid/sign-hanging.svg","fontawesome-solid-signal":"fontawesome/solid/signal.svg","fontawesome-solid-signature":"fontawesome/solid/signature.svg","fontawesome-solid-signs-post":"fontawesome/solid/signs-post.svg","fontawesome-solid-sim-card":"fontawesome/solid/sim-card.svg","fontawesome-solid-sink":"fontawesome/solid/sink.svg","fontawesome-solid-sitemap":"fontawesome/solid/sitemap.svg","fontawesome-solid-skull-crossbones":"fontawesome/solid/skull-crossbones.svg","fontawesome-solid-skull":"fontawesome/solid/skull.svg","fontawesome-solid-slash":"fontawesome/solid/slash.svg","fontawesome-solid-sleigh":"fontawesome/solid/sleigh.svg","fontawesome-solid-sliders":"fontawesome/solid/sliders.svg","fontawesome-solid-smog":"fontawesome/solid/smog.svg","fontawesome-solid-smoking":"fontawesome/solid/smoking.svg","fontawesome-solid-snowflake":"fontawesome/solid/snowflake.svg","fontawesome-solid-snowman":"fontawesome/solid/snowman.svg","fontawesome-solid-snowplow":"fontawesome/solid/snowplow.svg","fontawesome-solid-soap":"fontawesome/solid/soap.svg","fontawesome-solid-socks":"fontawesome/solid/socks.svg","fontawesome-solid-solar-panel":"fontawesome/solid/solar-panel.svg","fontawesome-solid-sort-down":"fontawesome/solid/sort-down.svg","fontawesome-solid-sort-up":"fontawesome/solid/sort-up.svg","fontawesome-solid-sort":"fontawesome/solid/sort.svg","fontawesome-solid-spa":"fontawesome/solid/spa.svg","fontawesome-solid-spaghetti-monster-flying":"fontawesome/solid/spaghetti-monster-flying.svg","fontawesome-solid-spell-check":"fontawesome/solid/spell-check.svg","fontawesome-solid-spider":"fontawesome/solid/spider.svg","fontawesome-solid-spinner":"fontawesome/solid/spinner.svg","fontawesome-solid-splotch":"fontawesome/solid/splotch.svg","fontawesome-solid-spoon":"fontawesome/solid/spoon.svg","fontawesome-solid-spray-can-sparkles":"fontawesome/solid/spray-can-sparkles.svg","fontawesome-solid-spray-can":"fontawesome/solid/spray-can.svg","fontawesome-solid-square-arrow-up-right":"fontawesome/solid/square-arrow-up-right.svg","fontawesome-solid-square-caret-down":"fontawesome/solid/square-caret-down.svg","fontawesome-solid-square-caret-left":"fontawesome/solid/square-caret-left.svg","fontawesome-solid-square-caret-right":"fontawesome/solid/square-caret-right.svg","fontawesome-solid-square-caret-up":"fontawesome/solid/square-caret-up.svg","fontawesome-solid-square-check":"fontawesome/solid/square-check.svg","fontawesome-solid-square-envelope":"fontawesome/solid/square-envelope.svg","fontawesome-solid-square-full":"fontawesome/solid/square-full.svg","fontawesome-solid-square-h":"fontawesome/solid/square-h.svg","fontawesome-solid-square-minus":"fontawesome/solid/square-minus.svg","fontawesome-solid-square-nfi":"fontawesome/solid/square-nfi.svg","fontawesome-solid-square-parking":"fontawesome/solid/square-parking.svg","fontawesome-solid-square-pen":"fontawesome/solid/square-pen.svg","fontawesome-solid-square-person-confined":"fontawesome/solid/square-person-confined.svg","fontawesome-solid-square-phone-flip":"fontawesome/solid/square-phone-flip.svg","fontawesome-solid-square-phone":"fontawesome/solid/square-phone.svg","fontawesome-solid-square-plus":"fontawesome/solid/square-plus.svg","fontawesome-solid-square-poll-horizontal":"fontawesome/solid/square-poll-horizontal.svg","fontawesome-solid-square-poll-vertical":"fontawesome/solid/square-poll-vertical.svg","fontawesome-solid-square-root-variable":"fontawesome/solid/square-root-variable.svg","fontawesome-solid-square-rss":"fontawesome/solid/square-rss.svg","fontawesome-solid-square-share-nodes":"fontawesome/solid/square-share-nodes.svg","fontawesome-solid-square-up-right":"fontawesome/solid/square-up-right.svg","fontawesome-solid-square-virus":"fontawesome/solid/square-virus.svg","fontawesome-solid-square-xmark":"fontawesome/solid/square-xmark.svg","fontawesome-solid-square":"fontawesome/solid/square.svg","fontawesome-solid-staff-snake":"fontawesome/solid/staff-snake.svg","fontawesome-solid-stairs":"fontawesome/solid/stairs.svg","fontawesome-solid-stamp":"fontawesome/solid/stamp.svg","fontawesome-solid-stapler":"fontawesome/solid/stapler.svg","fontawesome-solid-star-and-crescent":"fontawesome/solid/star-and-crescent.svg","fontawesome-solid-star-half-stroke":"fontawesome/solid/star-half-stroke.svg","fontawesome-solid-star-half":"fontawesome/solid/star-half.svg","fontawesome-solid-star-of-david":"fontawesome/solid/star-of-david.svg","fontawesome-solid-star-of-life":"fontawesome/solid/star-of-life.svg","fontawesome-solid-star":"fontawesome/solid/star.svg","fontawesome-solid-sterling-sign":"fontawesome/solid/sterling-sign.svg","fontawesome-solid-stethoscope":"fontawesome/solid/stethoscope.svg","fontawesome-solid-stop":"fontawesome/solid/stop.svg","fontawesome-solid-stopwatch-20":"fontawesome/solid/stopwatch-20.svg","fontawesome-solid-stopwatch":"fontawesome/solid/stopwatch.svg","fontawesome-solid-store-slash":"fontawesome/solid/store-slash.svg","fontawesome-solid-store":"fontawesome/solid/store.svg","fontawesome-solid-street-view":"fontawesome/solid/street-view.svg","fontawesome-solid-strikethrough":"fontawesome/solid/strikethrough.svg","fontawesome-solid-stroopwafel":"fontawesome/solid/stroopwafel.svg","fontawesome-solid-subscript":"fontawesome/solid/subscript.svg","fontawesome-solid-suitcase-medical":"fontawesome/solid/suitcase-medical.svg","fontawesome-solid-suitcase-rolling":"fontawesome/solid/suitcase-rolling.svg","fontawesome-solid-suitcase":"fontawesome/solid/suitcase.svg","fontawesome-solid-sun-plant-wilt":"fontawesome/solid/sun-plant-wilt.svg","fontawesome-solid-sun":"fontawesome/solid/sun.svg","fontawesome-solid-superscript":"fontawesome/solid/superscript.svg","fontawesome-solid-swatchbook":"fontawesome/solid/swatchbook.svg","fontawesome-solid-synagogue":"fontawesome/solid/synagogue.svg","fontawesome-solid-syringe":"fontawesome/solid/syringe.svg","fontawesome-solid-t":"fontawesome/solid/t.svg","fontawesome-solid-table-cells-large":"fontawesome/solid/table-cells-large.svg","fontawesome-solid-table-cells":"fontawesome/solid/table-cells.svg","fontawesome-solid-table-columns":"fontawesome/solid/table-columns.svg","fontawesome-solid-table-list":"fontawesome/solid/table-list.svg","fontawesome-solid-table-tennis-paddle-ball":"fontawesome/solid/table-tennis-paddle-ball.svg","fontawesome-solid-table":"fontawesome/solid/table.svg","fontawesome-solid-tablet-button":"fontawesome/solid/tablet-button.svg","fontawesome-solid-tablet-screen-button":"fontawesome/solid/tablet-screen-button.svg","fontawesome-solid-tablet":"fontawesome/solid/tablet.svg","fontawesome-solid-tablets":"fontawesome/solid/tablets.svg","fontawesome-solid-tachograph-digital":"fontawesome/solid/tachograph-digital.svg","fontawesome-solid-tag":"fontawesome/solid/tag.svg","fontawesome-solid-tags":"fontawesome/solid/tags.svg","fontawesome-solid-tape":"fontawesome/solid/tape.svg","fontawesome-solid-tarp-droplet":"fontawesome/solid/tarp-droplet.svg","fontawesome-solid-tarp":"fontawesome/solid/tarp.svg","fontawesome-solid-taxi":"fontawesome/solid/taxi.svg","fontawesome-solid-teeth-open":"fontawesome/solid/teeth-open.svg","fontawesome-solid-teeth":"fontawesome/solid/teeth.svg","fontawesome-solid-temperature-arrow-down":"fontawesome/solid/temperature-arrow-down.svg","fontawesome-solid-temperature-arrow-up":"fontawesome/solid/temperature-arrow-up.svg","fontawesome-solid-temperature-empty":"fontawesome/solid/temperature-empty.svg","fontawesome-solid-temperature-full":"fontawesome/solid/temperature-full.svg","fontawesome-solid-temperature-half":"fontawesome/solid/temperature-half.svg","fontawesome-solid-temperature-high":"fontawesome/solid/temperature-high.svg","fontawesome-solid-temperature-low":"fontawesome/solid/temperature-low.svg","fontawesome-solid-temperature-quarter":"fontawesome/solid/temperature-quarter.svg","fontawesome-solid-temperature-three-quarters":"fontawesome/solid/temperature-three-quarters.svg","fontawesome-solid-tenge-sign":"fontawesome/solid/tenge-sign.svg","fontawesome-solid-tent-arrow-down-to-line":"fontawesome/solid/tent-arrow-down-to-line.svg","fontawesome-solid-tent-arrow-left-right":"fontawesome/solid/tent-arrow-left-right.svg","fontawesome-solid-tent-arrow-turn-left":"fontawesome/solid/tent-arrow-turn-left.svg","fontawesome-solid-tent-arrows-down":"fontawesome/solid/tent-arrows-down.svg","fontawesome-solid-tent":"fontawesome/solid/tent.svg","fontawesome-solid-tents":"fontawesome/solid/tents.svg","fontawesome-solid-terminal":"fontawesome/solid/terminal.svg","fontawesome-solid-text-height":"fontawesome/solid/text-height.svg","fontawesome-solid-text-slash":"fontawesome/solid/text-slash.svg","fontawesome-solid-text-width":"fontawesome/solid/text-width.svg","fontawesome-solid-thermometer":"fontawesome/solid/thermometer.svg","fontawesome-solid-thumbs-down":"fontawesome/solid/thumbs-down.svg","fontawesome-solid-thumbs-up":"fontawesome/solid/thumbs-up.svg","fontawesome-solid-thumbtack":"fontawesome/solid/thumbtack.svg","fontawesome-solid-ticket-simple":"fontawesome/solid/ticket-simple.svg","fontawesome-solid-ticket":"fontawesome/solid/ticket.svg","fontawesome-solid-timeline":"fontawesome/solid/timeline.svg","fontawesome-solid-toggle-off":"fontawesome/solid/toggle-off.svg","fontawesome-solid-toggle-on":"fontawesome/solid/toggle-on.svg","fontawesome-solid-toilet-paper-slash":"fontawesome/solid/toilet-paper-slash.svg","fontawesome-solid-toilet-paper":"fontawesome/solid/toilet-paper.svg","fontawesome-solid-toilet-portable":"fontawesome/solid/toilet-portable.svg","fontawesome-solid-toilet":"fontawesome/solid/toilet.svg","fontawesome-solid-toilets-portable":"fontawesome/solid/toilets-portable.svg","fontawesome-solid-toolbox":"fontawesome/solid/toolbox.svg","fontawesome-solid-tooth":"fontawesome/solid/tooth.svg","fontawesome-solid-torii-gate":"fontawesome/solid/torii-gate.svg","fontawesome-solid-tornado":"fontawesome/solid/tornado.svg","fontawesome-solid-tower-broadcast":"fontawesome/solid/tower-broadcast.svg","fontawesome-solid-tower-cell":"fontawesome/solid/tower-cell.svg","fontawesome-solid-tower-observation":"fontawesome/solid/tower-observation.svg","fontawesome-solid-tractor":"fontawesome/solid/tractor.svg","fontawesome-solid-trademark":"fontawesome/solid/trademark.svg","fontawesome-solid-traffic-light":"fontawesome/solid/traffic-light.svg","fontawesome-solid-trailer":"fontawesome/solid/trailer.svg","fontawesome-solid-train-subway":"fontawesome/solid/train-subway.svg","fontawesome-solid-train-tram":"fontawesome/solid/train-tram.svg","fontawesome-solid-train":"fontawesome/solid/train.svg","fontawesome-solid-transgender":"fontawesome/solid/transgender.svg","fontawesome-solid-trash-arrow-up":"fontawesome/solid/trash-arrow-up.svg","fontawesome-solid-trash-can-arrow-up":"fontawesome/solid/trash-can-arrow-up.svg","fontawesome-solid-trash-can":"fontawesome/solid/trash-can.svg","fontawesome-solid-trash":"fontawesome/solid/trash.svg","fontawesome-solid-tree-city":"fontawesome/solid/tree-city.svg","fontawesome-solid-tree":"fontawesome/solid/tree.svg","fontawesome-solid-triangle-exclamation":"fontawesome/solid/triangle-exclamation.svg","fontawesome-solid-trophy":"fontawesome/solid/trophy.svg","fontawesome-solid-trowel-bricks":"fontawesome/solid/trowel-bricks.svg","fontawesome-solid-trowel":"fontawesome/solid/trowel.svg","fontawesome-solid-truck-arrow-right":"fontawesome/solid/truck-arrow-right.svg","fontawesome-solid-truck-droplet":"fontawesome/solid/truck-droplet.svg","fontawesome-solid-truck-fast":"fontawesome/solid/truck-fast.svg","fontawesome-solid-truck-field-un":"fontawesome/solid/truck-field-un.svg","fontawesome-solid-truck-field":"fontawesome/solid/truck-field.svg","fontawesome-solid-truck-front":"fontawesome/solid/truck-front.svg","fontawesome-solid-truck-medical":"fontawesome/solid/truck-medical.svg","fontawesome-solid-truck-monster":"fontawesome/solid/truck-monster.svg","fontawesome-solid-truck-moving":"fontawesome/solid/truck-moving.svg","fontawesome-solid-truck-pickup":"fontawesome/solid/truck-pickup.svg","fontawesome-solid-truck-plane":"fontawesome/solid/truck-plane.svg","fontawesome-solid-truck-ramp-box":"fontawesome/solid/truck-ramp-box.svg","fontawesome-solid-truck":"fontawesome/solid/truck.svg","fontawesome-solid-tty":"fontawesome/solid/tty.svg","fontawesome-solid-turkish-lira-sign":"fontawesome/solid/turkish-lira-sign.svg","fontawesome-solid-turn-down":"fontawesome/solid/turn-down.svg","fontawesome-solid-turn-up":"fontawesome/solid/turn-up.svg","fontawesome-solid-tv":"fontawesome/solid/tv.svg","fontawesome-solid-u":"fontawesome/solid/u.svg","fontawesome-solid-umbrella-beach":"fontawesome/solid/umbrella-beach.svg","fontawesome-solid-umbrella":"fontawesome/solid/umbrella.svg","fontawesome-solid-underline":"fontawesome/solid/underline.svg","fontawesome-solid-universal-access":"fontawesome/solid/universal-access.svg","fontawesome-solid-unlock-keyhole":"fontawesome/solid/unlock-keyhole.svg","fontawesome-solid-unlock":"fontawesome/solid/unlock.svg","fontawesome-solid-up-down-left-right":"fontawesome/solid/up-down-left-right.svg","fontawesome-solid-up-down":"fontawesome/solid/up-down.svg","fontawesome-solid-up-long":"fontawesome/solid/up-long.svg","fontawesome-solid-up-right-and-down-left-from-center":"fontawesome/solid/up-right-and-down-left-from-center.svg","fontawesome-solid-up-right-from-square":"fontawesome/solid/up-right-from-square.svg","fontawesome-solid-upload":"fontawesome/solid/upload.svg","fontawesome-solid-user-astronaut":"fontawesome/solid/user-astronaut.svg","fontawesome-solid-user-check":"fontawesome/solid/user-check.svg","fontawesome-solid-user-clock":"fontawesome/solid/user-clock.svg","fontawesome-solid-user-doctor":"fontawesome/solid/user-doctor.svg","fontawesome-solid-user-gear":"fontawesome/solid/user-gear.svg","fontawesome-solid-user-graduate":"fontawesome/solid/user-graduate.svg","fontawesome-solid-user-group":"fontawesome/solid/user-group.svg","fontawesome-solid-user-injured":"fontawesome/solid/user-injured.svg","fontawesome-solid-user-large-slash":"fontawesome/solid/user-large-slash.svg","fontawesome-solid-user-large":"fontawesome/solid/user-large.svg","fontawesome-solid-user-lock":"fontawesome/solid/user-lock.svg","fontawesome-solid-user-minus":"fontawesome/solid/user-minus.svg","fontawesome-solid-user-ninja":"fontawesome/solid/user-ninja.svg","fontawesome-solid-user-nurse":"fontawesome/solid/user-nurse.svg","fontawesome-solid-user-pen":"fontawesome/solid/user-pen.svg","fontawesome-solid-user-plus":"fontawesome/solid/user-plus.svg","fontawesome-solid-user-secret":"fontawesome/solid/user-secret.svg","fontawesome-solid-user-shield":"fontawesome/solid/user-shield.svg","fontawesome-solid-user-slash":"fontawesome/solid/user-slash.svg","fontawesome-solid-user-tag":"fontawesome/solid/user-tag.svg","fontawesome-solid-user-tie":"fontawesome/solid/user-tie.svg","fontawesome-solid-user-xmark":"fontawesome/solid/user-xmark.svg","fontawesome-solid-user":"fontawesome/solid/user.svg","fontawesome-solid-users-between-lines":"fontawesome/solid/users-between-lines.svg","fontawesome-solid-users-gear":"fontawesome/solid/users-gear.svg","fontawesome-solid-users-line":"fontawesome/solid/users-line.svg","fontawesome-solid-users-rays":"fontawesome/solid/users-rays.svg","fontawesome-solid-users-rectangle":"fontawesome/solid/users-rectangle.svg","fontawesome-solid-users-slash":"fontawesome/solid/users-slash.svg","fontawesome-solid-users-viewfinder":"fontawesome/solid/users-viewfinder.svg","fontawesome-solid-users":"fontawesome/solid/users.svg","fontawesome-solid-utensils":"fontawesome/solid/utensils.svg","fontawesome-solid-v":"fontawesome/solid/v.svg","fontawesome-solid-van-shuttle":"fontawesome/solid/van-shuttle.svg","fontawesome-solid-vault":"fontawesome/solid/vault.svg","fontawesome-solid-vector-square":"fontawesome/solid/vector-square.svg","fontawesome-solid-venus-double":"fontawesome/solid/venus-double.svg","fontawesome-solid-venus-mars":"fontawesome/solid/venus-mars.svg","fontawesome-solid-venus":"fontawesome/solid/venus.svg","fontawesome-solid-vest-patches":"fontawesome/solid/vest-patches.svg","fontawesome-solid-vest":"fontawesome/solid/vest.svg","fontawesome-solid-vial-circle-check":"fontawesome/solid/vial-circle-check.svg","fontawesome-solid-vial-virus":"fontawesome/solid/vial-virus.svg","fontawesome-solid-vial":"fontawesome/solid/vial.svg","fontawesome-solid-vials":"fontawesome/solid/vials.svg","fontawesome-solid-video-slash":"fontawesome/solid/video-slash.svg","fontawesome-solid-video":"fontawesome/solid/video.svg","fontawesome-solid-vihara":"fontawesome/solid/vihara.svg","fontawesome-solid-virus-covid-slash":"fontawesome/solid/virus-covid-slash.svg","fontawesome-solid-virus-covid":"fontawesome/solid/virus-covid.svg","fontawesome-solid-virus-slash":"fontawesome/solid/virus-slash.svg","fontawesome-solid-virus":"fontawesome/solid/virus.svg","fontawesome-solid-viruses":"fontawesome/solid/viruses.svg","fontawesome-solid-voicemail":"fontawesome/solid/voicemail.svg","fontawesome-solid-volcano":"fontawesome/solid/volcano.svg","fontawesome-solid-volleyball":"fontawesome/solid/volleyball.svg","fontawesome-solid-volume-high":"fontawesome/solid/volume-high.svg","fontawesome-solid-volume-low":"fontawesome/solid/volume-low.svg","fontawesome-solid-volume-off":"fontawesome/solid/volume-off.svg","fontawesome-solid-volume-xmark":"fontawesome/solid/volume-xmark.svg","fontawesome-solid-vr-cardboard":"fontawesome/solid/vr-cardboard.svg","fontawesome-solid-w":"fontawesome/solid/w.svg","fontawesome-solid-walkie-talkie":"fontawesome/solid/walkie-talkie.svg","fontawesome-solid-wallet":"fontawesome/solid/wallet.svg","fontawesome-solid-wand-magic-sparkles":"fontawesome/solid/wand-magic-sparkles.svg","fontawesome-solid-wand-magic":"fontawesome/solid/wand-magic.svg","fontawesome-solid-wand-sparkles":"fontawesome/solid/wand-sparkles.svg","fontawesome-solid-warehouse":"fontawesome/solid/warehouse.svg","fontawesome-solid-water-ladder":"fontawesome/solid/water-ladder.svg","fontawesome-solid-water":"fontawesome/solid/water.svg","fontawesome-solid-wave-square":"fontawesome/solid/wave-square.svg","fontawesome-solid-weight-hanging":"fontawesome/solid/weight-hanging.svg","fontawesome-solid-weight-scale":"fontawesome/solid/weight-scale.svg","fontawesome-solid-wheat-awn-circle-exclamation":"fontawesome/solid/wheat-awn-circle-exclamation.svg","fontawesome-solid-wheat-awn":"fontawesome/solid/wheat-awn.svg","fontawesome-solid-wheelchair-move":"fontawesome/solid/wheelchair-move.svg","fontawesome-solid-wheelchair":"fontawesome/solid/wheelchair.svg","fontawesome-solid-whiskey-glass":"fontawesome/solid/whiskey-glass.svg","fontawesome-solid-wifi":"fontawesome/solid/wifi.svg","fontawesome-solid-wind":"fontawesome/solid/wind.svg","fontawesome-solid-window-maximize":"fontawesome/solid/window-maximize.svg","fontawesome-solid-window-minimize":"fontawesome/solid/window-minimize.svg","fontawesome-solid-window-restore":"fontawesome/solid/window-restore.svg","fontawesome-solid-wine-bottle":"fontawesome/solid/wine-bottle.svg","fontawesome-solid-wine-glass-empty":"fontawesome/solid/wine-glass-empty.svg","fontawesome-solid-wine-glass":"fontawesome/solid/wine-glass.svg","fontawesome-solid-won-sign":"fontawesome/solid/won-sign.svg","fontawesome-solid-worm":"fontawesome/solid/worm.svg","fontawesome-solid-wrench":"fontawesome/solid/wrench.svg","fontawesome-solid-x-ray":"fontawesome/solid/x-ray.svg","fontawesome-solid-x":"fontawesome/solid/x.svg","fontawesome-solid-xmark":"fontawesome/solid/xmark.svg","fontawesome-solid-xmarks-lines":"fontawesome/solid/xmarks-lines.svg","fontawesome-solid-y":"fontawesome/solid/y.svg","fontawesome-solid-yen-sign":"fontawesome/solid/yen-sign.svg","fontawesome-solid-yin-yang":"fontawesome/solid/yin-yang.svg","fontawesome-solid-z":"fontawesome/solid/z.svg","logo":"logo.svg","material-ab-testing":"material/ab-testing.svg","material-abacus":"material/abacus.svg","material-abjad-arabic":"material/abjad-arabic.svg","material-abjad-hebrew":"material/abjad-hebrew.svg","material-abugida-devanagari":"material/abugida-devanagari.svg","material-abugida-thai":"material/abugida-thai.svg","material-access-point-check":"material/access-point-check.svg","material-access-point-minus":"material/access-point-minus.svg","material-access-point-network-off":"material/access-point-network-off.svg","material-access-point-network":"material/access-point-network.svg","material-access-point-off":"material/access-point-off.svg","material-access-point-plus":"material/access-point-plus.svg","material-access-point-remove":"material/access-point-remove.svg","material-access-point":"material/access-point.svg","material-account-alert-outline":"material/account-alert-outline.svg","material-account-alert":"material/account-alert.svg","material-account-arrow-down-outline":"material/account-arrow-down-outline.svg","material-account-arrow-down":"material/account-arrow-down.svg","material-account-arrow-left-outline":"material/account-arrow-left-outline.svg","material-account-arrow-left":"material/account-arrow-left.svg","material-account-arrow-right-outline":"material/account-arrow-right-outline.svg","material-account-arrow-right":"material/account-arrow-right.svg","material-account-arrow-up-outline":"material/account-arrow-up-outline.svg","material-account-arrow-up":"material/account-arrow-up.svg","material-account-badge-outline":"material/account-badge-outline.svg","material-account-badge":"material/account-badge.svg","material-account-box-multiple-outline":"material/account-box-multiple-outline.svg","material-account-box-multiple":"material/account-box-multiple.svg","material-account-box-outline":"material/account-box-outline.svg","material-account-box":"material/account-box.svg","material-account-cancel-outline":"material/account-cancel-outline.svg","material-account-cancel":"material/account-cancel.svg","material-account-card-outline":"material/account-card-outline.svg","material-account-card":"material/account-card.svg","material-account-cash-outline":"material/account-cash-outline.svg","material-account-cash":"material/account-cash.svg","material-account-check-outline":"material/account-check-outline.svg","material-account-check":"material/account-check.svg","material-account-child-circle":"material/account-child-circle.svg","material-account-child-outline":"material/account-child-outline.svg","material-account-child":"material/account-child.svg","material-account-circle-outline":"material/account-circle-outline.svg","material-account-circle":"material/account-circle.svg","material-account-clock-outline":"material/account-clock-outline.svg","material-account-clock":"material/account-clock.svg","material-account-cog-outline":"material/account-cog-outline.svg","material-account-cog":"material/account-cog.svg","material-account-convert-outline":"material/account-convert-outline.svg","material-account-convert":"material/account-convert.svg","material-account-cowboy-hat-outline":"material/account-cowboy-hat-outline.svg","material-account-cowboy-hat":"material/account-cowboy-hat.svg","material-account-credit-card-outline":"material/account-credit-card-outline.svg","material-account-credit-card":"material/account-credit-card.svg","material-account-details-outline":"material/account-details-outline.svg","material-account-details":"material/account-details.svg","material-account-edit-outline":"material/account-edit-outline.svg","material-account-edit":"material/account-edit.svg","material-account-eye-outline":"material/account-eye-outline.svg","material-account-eye":"material/account-eye.svg","material-account-filter-outline":"material/account-filter-outline.svg","material-account-filter":"material/account-filter.svg","material-account-group-outline":"material/account-group-outline.svg","material-account-group":"material/account-group.svg","material-account-hard-hat-outline":"material/account-hard-hat-outline.svg","material-account-hard-hat":"material/account-hard-hat.svg","material-account-heart-outline":"material/account-heart-outline.svg","material-account-heart":"material/account-heart.svg","material-account-injury-outline":"material/account-injury-outline.svg","material-account-injury":"material/account-injury.svg","material-account-key-outline":"material/account-key-outline.svg","material-account-key":"material/account-key.svg","material-account-lock-open-outline":"material/account-lock-open-outline.svg","material-account-lock-open":"material/account-lock-open.svg","material-account-lock-outline":"material/account-lock-outline.svg","material-account-lock":"material/account-lock.svg","material-account-minus-outline":"material/account-minus-outline.svg","material-account-minus":"material/account-minus.svg","material-account-multiple-check-outline":"material/account-multiple-check-outline.svg","material-account-multiple-check":"material/account-multiple-check.svg","material-account-multiple-minus-outline":"material/account-multiple-minus-outline.svg","material-account-multiple-minus":"material/account-multiple-minus.svg","material-account-multiple-outline":"material/account-multiple-outline.svg","material-account-multiple-plus-outline":"material/account-multiple-plus-outline.svg","material-account-multiple-plus":"material/account-multiple-plus.svg","material-account-multiple-remove-outline":"material/account-multiple-remove-outline.svg","material-account-multiple-remove":"material/account-multiple-remove.svg","material-account-multiple":"material/account-multiple.svg","material-account-music-outline":"material/account-music-outline.svg","material-account-music":"material/account-music.svg","material-account-network-off-outline":"material/account-network-off-outline.svg","material-account-network-off":"material/account-network-off.svg","material-account-network-outline":"material/account-network-outline.svg","material-account-network":"material/account-network.svg","material-account-off-outline":"material/account-off-outline.svg","material-account-off":"material/account-off.svg","material-account-outline":"material/account-outline.svg","material-account-plus-outline":"material/account-plus-outline.svg","material-account-plus":"material/account-plus.svg","material-account-question-outline":"material/account-question-outline.svg","material-account-question":"material/account-question.svg","material-account-reactivate-outline":"material/account-reactivate-outline.svg","material-account-reactivate":"material/account-reactivate.svg","material-account-remove-outline":"material/account-remove-outline.svg","material-account-remove":"material/account-remove.svg","material-account-school-outline":"material/account-school-outline.svg","material-account-school":"material/account-school.svg","material-account-search-outline":"material/account-search-outline.svg","material-account-search":"material/account-search.svg","material-account-settings-outline":"material/account-settings-outline.svg","material-account-settings":"material/account-settings.svg","material-account-star-outline":"material/account-star-outline.svg","material-account-star":"material/account-star.svg","material-account-supervisor-circle-outline":"material/account-supervisor-circle-outline.svg","material-account-supervisor-circle":"material/account-supervisor-circle.svg","material-account-supervisor-outline":"material/account-supervisor-outline.svg","material-account-supervisor":"material/account-supervisor.svg","material-account-switch-outline":"material/account-switch-outline.svg","material-account-switch":"material/account-switch.svg","material-account-sync-outline":"material/account-sync-outline.svg","material-account-sync":"material/account-sync.svg","material-account-tag-outline":"material/account-tag-outline.svg","material-account-tag":"material/account-tag.svg","material-account-tie-hat-outline":"material/account-tie-hat-outline.svg","material-account-tie-hat":"material/account-tie-hat.svg","material-account-tie-outline":"material/account-tie-outline.svg","material-account-tie-voice-off-outline":"material/account-tie-voice-off-outline.svg","material-account-tie-voice-off":"material/account-tie-voice-off.svg","material-account-tie-voice-outline":"material/account-tie-voice-outline.svg","material-account-tie-voice":"material/account-tie-voice.svg","material-account-tie-woman":"material/account-tie-woman.svg","material-account-tie":"material/account-tie.svg","material-account-voice-off":"material/account-voice-off.svg","material-account-voice":"material/account-voice.svg","material-account-wrench-outline":"material/account-wrench-outline.svg","material-account-wrench":"material/account-wrench.svg","material-account":"material/account.svg","material-adjust":"material/adjust.svg","material-advertisements-off":"material/advertisements-off.svg","material-advertisements":"material/advertisements.svg","material-air-conditioner":"material/air-conditioner.svg","material-air-filter":"material/air-filter.svg","material-air-horn":"material/air-horn.svg","material-air-humidifier-off":"material/air-humidifier-off.svg","material-air-humidifier":"material/air-humidifier.svg","material-air-purifier-off":"material/air-purifier-off.svg","material-air-purifier":"material/air-purifier.svg","material-airbag":"material/airbag.svg","material-airballoon-outline":"material/airballoon-outline.svg","material-airballoon":"material/airballoon.svg","material-airplane-alert":"material/airplane-alert.svg","material-airplane-check":"material/airplane-check.svg","material-airplane-clock":"material/airplane-clock.svg","material-airplane-cog":"material/airplane-cog.svg","material-airplane-edit":"material/airplane-edit.svg","material-airplane-landing":"material/airplane-landing.svg","material-airplane-marker":"material/airplane-marker.svg","material-airplane-minus":"material/airplane-minus.svg","material-airplane-off":"material/airplane-off.svg","material-airplane-plus":"material/airplane-plus.svg","material-airplane-remove":"material/airplane-remove.svg","material-airplane-search":"material/airplane-search.svg","material-airplane-settings":"material/airplane-settings.svg","material-airplane-takeoff":"material/airplane-takeoff.svg","material-airplane":"material/airplane.svg","material-airport":"material/airport.svg","material-alarm-bell":"material/alarm-bell.svg","material-alarm-check":"material/alarm-check.svg","material-alarm-light-off-outline":"material/alarm-light-off-outline.svg","material-alarm-light-off":"material/alarm-light-off.svg","material-alarm-light-outline":"material/alarm-light-outline.svg","material-alarm-light":"material/alarm-light.svg","material-alarm-multiple":"material/alarm-multiple.svg","material-alarm-note-off":"material/alarm-note-off.svg","material-alarm-note":"material/alarm-note.svg","material-alarm-off":"material/alarm-off.svg","material-alarm-panel-outline":"material/alarm-panel-outline.svg","material-alarm-panel":"material/alarm-panel.svg","material-alarm-plus":"material/alarm-plus.svg","material-alarm-snooze":"material/alarm-snooze.svg","material-alarm":"material/alarm.svg","material-album":"material/album.svg","material-alert-box-outline":"material/alert-box-outline.svg","material-alert-box":"material/alert-box.svg","material-alert-circle-check-outline":"material/alert-circle-check-outline.svg","material-alert-circle-check":"material/alert-circle-check.svg","material-alert-circle-outline":"material/alert-circle-outline.svg","material-alert-circle":"material/alert-circle.svg","material-alert-decagram-outline":"material/alert-decagram-outline.svg","material-alert-decagram":"material/alert-decagram.svg","material-alert-minus-outline":"material/alert-minus-outline.svg","material-alert-minus":"material/alert-minus.svg","material-alert-octagon-outline":"material/alert-octagon-outline.svg","material-alert-octagon":"material/alert-octagon.svg","material-alert-octagram-outline":"material/alert-octagram-outline.svg","material-alert-octagram":"material/alert-octagram.svg","material-alert-outline":"material/alert-outline.svg","material-alert-plus-outline":"material/alert-plus-outline.svg","material-alert-plus":"material/alert-plus.svg","material-alert-remove-outline":"material/alert-remove-outline.svg","material-alert-remove":"material/alert-remove.svg","material-alert-rhombus-outline":"material/alert-rhombus-outline.svg","material-alert-rhombus":"material/alert-rhombus.svg","material-alert":"material/alert.svg","material-alien-outline":"material/alien-outline.svg","material-alien":"material/alien.svg","material-align-horizontal-center":"material/align-horizontal-center.svg","material-align-horizontal-distribute":"material/align-horizontal-distribute.svg","material-align-horizontal-left":"material/align-horizontal-left.svg","material-align-horizontal-right":"material/align-horizontal-right.svg","material-align-vertical-bottom":"material/align-vertical-bottom.svg","material-align-vertical-center":"material/align-vertical-center.svg","material-align-vertical-distribute":"material/align-vertical-distribute.svg","material-align-vertical-top":"material/align-vertical-top.svg","material-all-inclusive-box-outline":"material/all-inclusive-box-outline.svg","material-all-inclusive-box":"material/all-inclusive-box.svg","material-all-inclusive":"material/all-inclusive.svg","material-allergy":"material/allergy.svg","material-alpha-a-box-outline":"material/alpha-a-box-outline.svg","material-alpha-a-box":"material/alpha-a-box.svg","material-alpha-a-circle-outline":"material/alpha-a-circle-outline.svg","material-alpha-a-circle":"material/alpha-a-circle.svg","material-alpha-a":"material/alpha-a.svg","material-alpha-b-box-outline":"material/alpha-b-box-outline.svg","material-alpha-b-box":"material/alpha-b-box.svg","material-alpha-b-circle-outline":"material/alpha-b-circle-outline.svg","material-alpha-b-circle":"material/alpha-b-circle.svg","material-alpha-b":"material/alpha-b.svg","material-alpha-c-box-outline":"material/alpha-c-box-outline.svg","material-alpha-c-box":"material/alpha-c-box.svg","material-alpha-c-circle-outline":"material/alpha-c-circle-outline.svg","material-alpha-c-circle":"material/alpha-c-circle.svg","material-alpha-c":"material/alpha-c.svg","material-alpha-d-box-outline":"material/alpha-d-box-outline.svg","material-alpha-d-box":"material/alpha-d-box.svg","material-alpha-d-circle-outline":"material/alpha-d-circle-outline.svg","material-alpha-d-circle":"material/alpha-d-circle.svg","material-alpha-d":"material/alpha-d.svg","material-alpha-e-box-outline":"material/alpha-e-box-outline.svg","material-alpha-e-box":"material/alpha-e-box.svg","material-alpha-e-circle-outline":"material/alpha-e-circle-outline.svg","material-alpha-e-circle":"material/alpha-e-circle.svg","material-alpha-e":"material/alpha-e.svg","material-alpha-f-box-outline":"material/alpha-f-box-outline.svg","material-alpha-f-box":"material/alpha-f-box.svg","material-alpha-f-circle-outline":"material/alpha-f-circle-outline.svg","material-alpha-f-circle":"material/alpha-f-circle.svg","material-alpha-f":"material/alpha-f.svg","material-alpha-g-box-outline":"material/alpha-g-box-outline.svg","material-alpha-g-box":"material/alpha-g-box.svg","material-alpha-g-circle-outline":"material/alpha-g-circle-outline.svg","material-alpha-g-circle":"material/alpha-g-circle.svg","material-alpha-g":"material/alpha-g.svg","material-alpha-h-box-outline":"material/alpha-h-box-outline.svg","material-alpha-h-box":"material/alpha-h-box.svg","material-alpha-h-circle-outline":"material/alpha-h-circle-outline.svg","material-alpha-h-circle":"material/alpha-h-circle.svg","material-alpha-h":"material/alpha-h.svg","material-alpha-i-box-outline":"material/alpha-i-box-outline.svg","material-alpha-i-box":"material/alpha-i-box.svg","material-alpha-i-circle-outline":"material/alpha-i-circle-outline.svg","material-alpha-i-circle":"material/alpha-i-circle.svg","material-alpha-i":"material/alpha-i.svg","material-alpha-j-box-outline":"material/alpha-j-box-outline.svg","material-alpha-j-box":"material/alpha-j-box.svg","material-alpha-j-circle-outline":"material/alpha-j-circle-outline.svg","material-alpha-j-circle":"material/alpha-j-circle.svg","material-alpha-j":"material/alpha-j.svg","material-alpha-k-box-outline":"material/alpha-k-box-outline.svg","material-alpha-k-box":"material/alpha-k-box.svg","material-alpha-k-circle-outline":"material/alpha-k-circle-outline.svg","material-alpha-k-circle":"material/alpha-k-circle.svg","material-alpha-k":"material/alpha-k.svg","material-alpha-l-box-outline":"material/alpha-l-box-outline.svg","material-alpha-l-box":"material/alpha-l-box.svg","material-alpha-l-circle-outline":"material/alpha-l-circle-outline.svg","material-alpha-l-circle":"material/alpha-l-circle.svg","material-alpha-l":"material/alpha-l.svg","material-alpha-m-box-outline":"material/alpha-m-box-outline.svg","material-alpha-m-box":"material/alpha-m-box.svg","material-alpha-m-circle-outline":"material/alpha-m-circle-outline.svg","material-alpha-m-circle":"material/alpha-m-circle.svg","material-alpha-m":"material/alpha-m.svg","material-alpha-n-box-outline":"material/alpha-n-box-outline.svg","material-alpha-n-box":"material/alpha-n-box.svg","material-alpha-n-circle-outline":"material/alpha-n-circle-outline.svg","material-alpha-n-circle":"material/alpha-n-circle.svg","material-alpha-n":"material/alpha-n.svg","material-alpha-o-box-outline":"material/alpha-o-box-outline.svg","material-alpha-o-box":"material/alpha-o-box.svg","material-alpha-o-circle-outline":"material/alpha-o-circle-outline.svg","material-alpha-o-circle":"material/alpha-o-circle.svg","material-alpha-o":"material/alpha-o.svg","material-alpha-p-box-outline":"material/alpha-p-box-outline.svg","material-alpha-p-box":"material/alpha-p-box.svg","material-alpha-p-circle-outline":"material/alpha-p-circle-outline.svg","material-alpha-p-circle":"material/alpha-p-circle.svg","material-alpha-p":"material/alpha-p.svg","material-alpha-q-box-outline":"material/alpha-q-box-outline.svg","material-alpha-q-box":"material/alpha-q-box.svg","material-alpha-q-circle-outline":"material/alpha-q-circle-outline.svg","material-alpha-q-circle":"material/alpha-q-circle.svg","material-alpha-q":"material/alpha-q.svg","material-alpha-r-box-outline":"material/alpha-r-box-outline.svg","material-alpha-r-box":"material/alpha-r-box.svg","material-alpha-r-circle-outline":"material/alpha-r-circle-outline.svg","material-alpha-r-circle":"material/alpha-r-circle.svg","material-alpha-r":"material/alpha-r.svg","material-alpha-s-box-outline":"material/alpha-s-box-outline.svg","material-alpha-s-box":"material/alpha-s-box.svg","material-alpha-s-circle-outline":"material/alpha-s-circle-outline.svg","material-alpha-s-circle":"material/alpha-s-circle.svg","material-alpha-s":"material/alpha-s.svg","material-alpha-t-box-outline":"material/alpha-t-box-outline.svg","material-alpha-t-box":"material/alpha-t-box.svg","material-alpha-t-circle-outline":"material/alpha-t-circle-outline.svg","material-alpha-t-circle":"material/alpha-t-circle.svg","material-alpha-t":"material/alpha-t.svg","material-alpha-u-box-outline":"material/alpha-u-box-outline.svg","material-alpha-u-box":"material/alpha-u-box.svg","material-alpha-u-circle-outline":"material/alpha-u-circle-outline.svg","material-alpha-u-circle":"material/alpha-u-circle.svg","material-alpha-u":"material/alpha-u.svg","material-alpha-v-box-outline":"material/alpha-v-box-outline.svg","material-alpha-v-box":"material/alpha-v-box.svg","material-alpha-v-circle-outline":"material/alpha-v-circle-outline.svg","material-alpha-v-circle":"material/alpha-v-circle.svg","material-alpha-v":"material/alpha-v.svg","material-alpha-w-box-outline":"material/alpha-w-box-outline.svg","material-alpha-w-box":"material/alpha-w-box.svg","material-alpha-w-circle-outline":"material/alpha-w-circle-outline.svg","material-alpha-w-circle":"material/alpha-w-circle.svg","material-alpha-w":"material/alpha-w.svg","material-alpha-x-box-outline":"material/alpha-x-box-outline.svg","material-alpha-x-box":"material/alpha-x-box.svg","material-alpha-x-circle-outline":"material/alpha-x-circle-outline.svg","material-alpha-x-circle":"material/alpha-x-circle.svg","material-alpha-x":"material/alpha-x.svg","material-alpha-y-box-outline":"material/alpha-y-box-outline.svg","material-alpha-y-box":"material/alpha-y-box.svg","material-alpha-y-circle-outline":"material/alpha-y-circle-outline.svg","material-alpha-y-circle":"material/alpha-y-circle.svg","material-alpha-y":"material/alpha-y.svg","material-alpha-z-box-outline":"material/alpha-z-box-outline.svg","material-alpha-z-box":"material/alpha-z-box.svg","material-alpha-z-circle-outline":"material/alpha-z-circle-outline.svg","material-alpha-z-circle":"material/alpha-z-circle.svg","material-alpha-z":"material/alpha-z.svg","material-alpha":"material/alpha.svg","material-alphabet-aurebesh":"material/alphabet-aurebesh.svg","material-alphabet-cyrillic":"material/alphabet-cyrillic.svg","material-alphabet-greek":"material/alphabet-greek.svg","material-alphabet-latin":"material/alphabet-latin.svg","material-alphabet-piqad":"material/alphabet-piqad.svg","material-alphabet-tengwar":"material/alphabet-tengwar.svg","material-alphabetical-off":"material/alphabetical-off.svg","material-alphabetical-variant-off":"material/alphabetical-variant-off.svg","material-alphabetical-variant":"material/alphabetical-variant.svg","material-alphabetical":"material/alphabetical.svg","material-altimeter":"material/altimeter.svg","material-ambulance":"material/ambulance.svg","material-ammunition":"material/ammunition.svg","material-ampersand":"material/ampersand.svg","material-amplifier-off":"material/amplifier-off.svg","material-amplifier":"material/amplifier.svg","material-anchor":"material/anchor.svg","material-android-studio":"material/android-studio.svg","material-android":"material/android.svg","material-angle-acute":"material/angle-acute.svg","material-angle-obtuse":"material/angle-obtuse.svg","material-angle-right":"material/angle-right.svg","material-angular":"material/angular.svg","material-angularjs":"material/angularjs.svg","material-animation-outline":"material/animation-outline.svg","material-animation-play-outline":"material/animation-play-outline.svg","material-animation-play":"material/animation-play.svg","material-animation":"material/animation.svg","material-ansible":"material/ansible.svg","material-antenna":"material/antenna.svg","material-anvil":"material/anvil.svg","material-apache-kafka":"material/apache-kafka.svg","material-api-off":"material/api-off.svg","material-api":"material/api.svg","material-apple-finder":"material/apple-finder.svg","material-apple-icloud":"material/apple-icloud.svg","material-apple-ios":"material/apple-ios.svg","material-apple-keyboard-caps":"material/apple-keyboard-caps.svg","material-apple-keyboard-command":"material/apple-keyboard-command.svg","material-apple-keyboard-control":"material/apple-keyboard-control.svg","material-apple-keyboard-option":"material/apple-keyboard-option.svg","material-apple-keyboard-shift":"material/apple-keyboard-shift.svg","material-apple-safari":"material/apple-safari.svg","material-apple":"material/apple.svg","material-application-array-outline":"material/application-array-outline.svg","material-application-array":"material/application-array.svg","material-application-braces-outline":"material/application-braces-outline.svg","material-application-braces":"material/application-braces.svg","material-application-brackets-outline":"material/application-brackets-outline.svg","material-application-brackets":"material/application-brackets.svg","material-application-cog-outline":"material/application-cog-outline.svg","material-application-cog":"material/application-cog.svg","material-application-edit-outline":"material/application-edit-outline.svg","material-application-edit":"material/application-edit.svg","material-application-export":"material/application-export.svg","material-application-import":"material/application-import.svg","material-application-outline":"material/application-outline.svg","material-application-parentheses-outline":"material/application-parentheses-outline.svg","material-application-parentheses":"material/application-parentheses.svg","material-application-settings-outline":"material/application-settings-outline.svg","material-application-settings":"material/application-settings.svg","material-application-variable-outline":"material/application-variable-outline.svg","material-application-variable":"material/application-variable.svg","material-application":"material/application.svg","material-approximately-equal-box":"material/approximately-equal-box.svg","material-approximately-equal":"material/approximately-equal.svg","material-apps-box":"material/apps-box.svg","material-apps":"material/apps.svg","material-arch":"material/arch.svg","material-archive-alert-outline":"material/archive-alert-outline.svg","material-archive-alert":"material/archive-alert.svg","material-archive-arrow-down-outline":"material/archive-arrow-down-outline.svg","material-archive-arrow-down":"material/archive-arrow-down.svg","material-archive-arrow-up-outline":"material/archive-arrow-up-outline.svg","material-archive-arrow-up":"material/archive-arrow-up.svg","material-archive-cancel-outline":"material/archive-cancel-outline.svg","material-archive-cancel":"material/archive-cancel.svg","material-archive-check-outline":"material/archive-check-outline.svg","material-archive-check":"material/archive-check.svg","material-archive-clock-outline":"material/archive-clock-outline.svg","material-archive-clock":"material/archive-clock.svg","material-archive-cog-outline":"material/archive-cog-outline.svg","material-archive-cog":"material/archive-cog.svg","material-archive-edit-outline":"material/archive-edit-outline.svg","material-archive-edit":"material/archive-edit.svg","material-archive-eye-outline":"material/archive-eye-outline.svg","material-archive-eye":"material/archive-eye.svg","material-archive-lock-open-outline":"material/archive-lock-open-outline.svg","material-archive-lock-open":"material/archive-lock-open.svg","material-archive-lock-outline":"material/archive-lock-outline.svg","material-archive-lock":"material/archive-lock.svg","material-archive-marker-outline":"material/archive-marker-outline.svg","material-archive-marker":"material/archive-marker.svg","material-archive-minus-outline":"material/archive-minus-outline.svg","material-archive-minus":"material/archive-minus.svg","material-archive-music-outline":"material/archive-music-outline.svg","material-archive-music":"material/archive-music.svg","material-archive-off-outline":"material/archive-off-outline.svg","material-archive-off":"material/archive-off.svg","material-archive-outline":"material/archive-outline.svg","material-archive-plus-outline":"material/archive-plus-outline.svg","material-archive-plus":"material/archive-plus.svg","material-archive-refresh-outline":"material/archive-refresh-outline.svg","material-archive-refresh":"material/archive-refresh.svg","material-archive-remove-outline":"material/archive-remove-outline.svg","material-archive-remove":"material/archive-remove.svg","material-archive-search-outline":"material/archive-search-outline.svg","material-archive-search":"material/archive-search.svg","material-archive-settings-outline":"material/archive-settings-outline.svg","material-archive-settings":"material/archive-settings.svg","material-archive-star-outline":"material/archive-star-outline.svg","material-archive-star":"material/archive-star.svg","material-archive-sync-outline":"material/archive-sync-outline.svg","material-archive-sync":"material/archive-sync.svg","material-archive":"material/archive.svg","material-arm-flex-outline":"material/arm-flex-outline.svg","material-arm-flex":"material/arm-flex.svg","material-arrange-bring-forward":"material/arrange-bring-forward.svg","material-arrange-bring-to-front":"material/arrange-bring-to-front.svg","material-arrange-send-backward":"material/arrange-send-backward.svg","material-arrange-send-to-back":"material/arrange-send-to-back.svg","material-arrow-all":"material/arrow-all.svg","material-arrow-bottom-left-bold-box-outline":"material/arrow-bottom-left-bold-box-outline.svg","material-arrow-bottom-left-bold-box":"material/arrow-bottom-left-bold-box.svg","material-arrow-bottom-left-bold-outline":"material/arrow-bottom-left-bold-outline.svg","material-arrow-bottom-left-thick":"material/arrow-bottom-left-thick.svg","material-arrow-bottom-left-thin-circle-outline":"material/arrow-bottom-left-thin-circle-outline.svg","material-arrow-bottom-left-thin":"material/arrow-bottom-left-thin.svg","material-arrow-bottom-left":"material/arrow-bottom-left.svg","material-arrow-bottom-right-bold-box-outline":"material/arrow-bottom-right-bold-box-outline.svg","material-arrow-bottom-right-bold-box":"material/arrow-bottom-right-bold-box.svg","material-arrow-bottom-right-bold-outline":"material/arrow-bottom-right-bold-outline.svg","material-arrow-bottom-right-thick":"material/arrow-bottom-right-thick.svg","material-arrow-bottom-right-thin-circle-outline":"material/arrow-bottom-right-thin-circle-outline.svg","material-arrow-bottom-right-thin":"material/arrow-bottom-right-thin.svg","material-arrow-bottom-right":"material/arrow-bottom-right.svg","material-arrow-collapse-all":"material/arrow-collapse-all.svg","material-arrow-collapse-down":"material/arrow-collapse-down.svg","material-arrow-collapse-horizontal":"material/arrow-collapse-horizontal.svg","material-arrow-collapse-left":"material/arrow-collapse-left.svg","material-arrow-collapse-right":"material/arrow-collapse-right.svg","material-arrow-collapse-up":"material/arrow-collapse-up.svg","material-arrow-collapse-vertical":"material/arrow-collapse-vertical.svg","material-arrow-collapse":"material/arrow-collapse.svg","material-arrow-decision-auto-outline":"material/arrow-decision-auto-outline.svg","material-arrow-decision-auto":"material/arrow-decision-auto.svg","material-arrow-decision-outline":"material/arrow-decision-outline.svg","material-arrow-decision":"material/arrow-decision.svg","material-arrow-down-bold-box-outline":"material/arrow-down-bold-box-outline.svg","material-arrow-down-bold-box":"material/arrow-down-bold-box.svg","material-arrow-down-bold-circle-outline":"material/arrow-down-bold-circle-outline.svg","material-arrow-down-bold-circle":"material/arrow-down-bold-circle.svg","material-arrow-down-bold-hexagon-outline":"material/arrow-down-bold-hexagon-outline.svg","material-arrow-down-bold-outline":"material/arrow-down-bold-outline.svg","material-arrow-down-bold":"material/arrow-down-bold.svg","material-arrow-down-box":"material/arrow-down-box.svg","material-arrow-down-circle-outline":"material/arrow-down-circle-outline.svg","material-arrow-down-circle":"material/arrow-down-circle.svg","material-arrow-down-drop-circle-outline":"material/arrow-down-drop-circle-outline.svg","material-arrow-down-drop-circle":"material/arrow-down-drop-circle.svg","material-arrow-down-left-bold":"material/arrow-down-left-bold.svg","material-arrow-down-left":"material/arrow-down-left.svg","material-arrow-down-right-bold":"material/arrow-down-right-bold.svg","material-arrow-down-right":"material/arrow-down-right.svg","material-arrow-down-thick":"material/arrow-down-thick.svg","material-arrow-down-thin-circle-outline":"material/arrow-down-thin-circle-outline.svg","material-arrow-down-thin":"material/arrow-down-thin.svg","material-arrow-down":"material/arrow-down.svg","material-arrow-expand-all":"material/arrow-expand-all.svg","material-arrow-expand-down":"material/arrow-expand-down.svg","material-arrow-expand-horizontal":"material/arrow-expand-horizontal.svg","material-arrow-expand-left":"material/arrow-expand-left.svg","material-arrow-expand-right":"material/arrow-expand-right.svg","material-arrow-expand-up":"material/arrow-expand-up.svg","material-arrow-expand-vertical":"material/arrow-expand-vertical.svg","material-arrow-expand":"material/arrow-expand.svg","material-arrow-horizontal-lock":"material/arrow-horizontal-lock.svg","material-arrow-left-bold-box-outline":"material/arrow-left-bold-box-outline.svg","material-arrow-left-bold-box":"material/arrow-left-bold-box.svg","material-arrow-left-bold-circle-outline":"material/arrow-left-bold-circle-outline.svg","material-arrow-left-bold-circle":"material/arrow-left-bold-circle.svg","material-arrow-left-bold-hexagon-outline":"material/arrow-left-bold-hexagon-outline.svg","material-arrow-left-bold-outline":"material/arrow-left-bold-outline.svg","material-arrow-left-bold":"material/arrow-left-bold.svg","material-arrow-left-bottom-bold":"material/arrow-left-bottom-bold.svg","material-arrow-left-bottom":"material/arrow-left-bottom.svg","material-arrow-left-box":"material/arrow-left-box.svg","material-arrow-left-circle-outline":"material/arrow-left-circle-outline.svg","material-arrow-left-circle":"material/arrow-left-circle.svg","material-arrow-left-drop-circle-outline":"material/arrow-left-drop-circle-outline.svg","material-arrow-left-drop-circle":"material/arrow-left-drop-circle.svg","material-arrow-left-right-bold-outline":"material/arrow-left-right-bold-outline.svg","material-arrow-left-right-bold":"material/arrow-left-right-bold.svg","material-arrow-left-right":"material/arrow-left-right.svg","material-arrow-left-thick":"material/arrow-left-thick.svg","material-arrow-left-thin-circle-outline":"material/arrow-left-thin-circle-outline.svg","material-arrow-left-thin":"material/arrow-left-thin.svg","material-arrow-left-top-bold":"material/arrow-left-top-bold.svg","material-arrow-left-top":"material/arrow-left-top.svg","material-arrow-left":"material/arrow-left.svg","material-arrow-projectile-multiple":"material/arrow-projectile-multiple.svg","material-arrow-projectile":"material/arrow-projectile.svg","material-arrow-right-bold-box-outline":"material/arrow-right-bold-box-outline.svg","material-arrow-right-bold-box":"material/arrow-right-bold-box.svg","material-arrow-right-bold-circle-outline":"material/arrow-right-bold-circle-outline.svg","material-arrow-right-bold-circle":"material/arrow-right-bold-circle.svg","material-arrow-right-bold-hexagon-outline":"material/arrow-right-bold-hexagon-outline.svg","material-arrow-right-bold-outline":"material/arrow-right-bold-outline.svg","material-arrow-right-bold":"material/arrow-right-bold.svg","material-arrow-right-bottom-bold":"material/arrow-right-bottom-bold.svg","material-arrow-right-bottom":"material/arrow-right-bottom.svg","material-arrow-right-box":"material/arrow-right-box.svg","material-arrow-right-circle-outline":"material/arrow-right-circle-outline.svg","material-arrow-right-circle":"material/arrow-right-circle.svg","material-arrow-right-drop-circle-outline":"material/arrow-right-drop-circle-outline.svg","material-arrow-right-drop-circle":"material/arrow-right-drop-circle.svg","material-arrow-right-thick":"material/arrow-right-thick.svg","material-arrow-right-thin-circle-outline":"material/arrow-right-thin-circle-outline.svg","material-arrow-right-thin":"material/arrow-right-thin.svg","material-arrow-right-top-bold":"material/arrow-right-top-bold.svg","material-arrow-right-top":"material/arrow-right-top.svg","material-arrow-right":"material/arrow-right.svg","material-arrow-split-horizontal":"material/arrow-split-horizontal.svg","material-arrow-split-vertical":"material/arrow-split-vertical.svg","material-arrow-top-left-bold-box-outline":"material/arrow-top-left-bold-box-outline.svg","material-arrow-top-left-bold-box":"material/arrow-top-left-bold-box.svg","material-arrow-top-left-bold-outline":"material/arrow-top-left-bold-outline.svg","material-arrow-top-left-bottom-right-bold":"material/arrow-top-left-bottom-right-bold.svg","material-arrow-top-left-bottom-right":"material/arrow-top-left-bottom-right.svg","material-arrow-top-left-thick":"material/arrow-top-left-thick.svg","material-arrow-top-left-thin-circle-outline":"material/arrow-top-left-thin-circle-outline.svg","material-arrow-top-left-thin":"material/arrow-top-left-thin.svg","material-arrow-top-left":"material/arrow-top-left.svg","material-arrow-top-right-bold-box-outline":"material/arrow-top-right-bold-box-outline.svg","material-arrow-top-right-bold-box":"material/arrow-top-right-bold-box.svg","material-arrow-top-right-bold-outline":"material/arrow-top-right-bold-outline.svg","material-arrow-top-right-bottom-left-bold":"material/arrow-top-right-bottom-left-bold.svg","material-arrow-top-right-bottom-left":"material/arrow-top-right-bottom-left.svg","material-arrow-top-right-thick":"material/arrow-top-right-thick.svg","material-arrow-top-right-thin-circle-outline":"material/arrow-top-right-thin-circle-outline.svg","material-arrow-top-right-thin":"material/arrow-top-right-thin.svg","material-arrow-top-right":"material/arrow-top-right.svg","material-arrow-u-down-left-bold":"material/arrow-u-down-left-bold.svg","material-arrow-u-down-left":"material/arrow-u-down-left.svg","material-arrow-u-down-right-bold":"material/arrow-u-down-right-bold.svg","material-arrow-u-down-right":"material/arrow-u-down-right.svg","material-arrow-u-left-bottom-bold":"material/arrow-u-left-bottom-bold.svg","material-arrow-u-left-bottom":"material/arrow-u-left-bottom.svg","material-arrow-u-left-top-bold":"material/arrow-u-left-top-bold.svg","material-arrow-u-left-top":"material/arrow-u-left-top.svg","material-arrow-u-right-bottom-bold":"material/arrow-u-right-bottom-bold.svg","material-arrow-u-right-bottom":"material/arrow-u-right-bottom.svg","material-arrow-u-right-top-bold":"material/arrow-u-right-top-bold.svg","material-arrow-u-right-top":"material/arrow-u-right-top.svg","material-arrow-u-up-left-bold":"material/arrow-u-up-left-bold.svg","material-arrow-u-up-left":"material/arrow-u-up-left.svg","material-arrow-u-up-right-bold":"material/arrow-u-up-right-bold.svg","material-arrow-u-up-right":"material/arrow-u-up-right.svg","material-arrow-up-bold-box-outline":"material/arrow-up-bold-box-outline.svg","material-arrow-up-bold-box":"material/arrow-up-bold-box.svg","material-arrow-up-bold-circle-outline":"material/arrow-up-bold-circle-outline.svg","material-arrow-up-bold-circle":"material/arrow-up-bold-circle.svg","material-arrow-up-bold-hexagon-outline":"material/arrow-up-bold-hexagon-outline.svg","material-arrow-up-bold-outline":"material/arrow-up-bold-outline.svg","material-arrow-up-bold":"material/arrow-up-bold.svg","material-arrow-up-box":"material/arrow-up-box.svg","material-arrow-up-circle-outline":"material/arrow-up-circle-outline.svg","material-arrow-up-circle":"material/arrow-up-circle.svg","material-arrow-up-down-bold-outline":"material/arrow-up-down-bold-outline.svg","material-arrow-up-down-bold":"material/arrow-up-down-bold.svg","material-arrow-up-down":"material/arrow-up-down.svg","material-arrow-up-drop-circle-outline":"material/arrow-up-drop-circle-outline.svg","material-arrow-up-drop-circle":"material/arrow-up-drop-circle.svg","material-arrow-up-left-bold":"material/arrow-up-left-bold.svg","material-arrow-up-left":"material/arrow-up-left.svg","material-arrow-up-right-bold":"material/arrow-up-right-bold.svg","material-arrow-up-right":"material/arrow-up-right.svg","material-arrow-up-thick":"material/arrow-up-thick.svg","material-arrow-up-thin-circle-outline":"material/arrow-up-thin-circle-outline.svg","material-arrow-up-thin":"material/arrow-up-thin.svg","material-arrow-up":"material/arrow-up.svg","material-arrow-vertical-lock":"material/arrow-vertical-lock.svg","material-artboard":"material/artboard.svg","material-artstation":"material/artstation.svg","material-aspect-ratio":"material/aspect-ratio.svg","material-assistant":"material/assistant.svg","material-asterisk-circle-outline":"material/asterisk-circle-outline.svg","material-asterisk":"material/asterisk.svg","material-at":"material/at.svg","material-atlassian":"material/atlassian.svg","material-atm":"material/atm.svg","material-atom-variant":"material/atom-variant.svg","material-atom":"material/atom.svg","material-attachment-check":"material/attachment-check.svg","material-attachment-lock":"material/attachment-lock.svg","material-attachment-minus":"material/attachment-minus.svg","material-attachment-off":"material/attachment-off.svg","material-attachment-plus":"material/attachment-plus.svg","material-attachment-remove":"material/attachment-remove.svg","material-attachment":"material/attachment.svg","material-atv":"material/atv.svg","material-audio-input-rca":"material/audio-input-rca.svg","material-audio-input-stereo-minijack":"material/audio-input-stereo-minijack.svg","material-audio-input-xlr":"material/audio-input-xlr.svg","material-audio-video-off":"material/audio-video-off.svg","material-audio-video":"material/audio-video.svg","material-augmented-reality":"material/augmented-reality.svg","material-aurora":"material/aurora.svg","material-auto-download":"material/auto-download.svg","material-auto-fix":"material/auto-fix.svg","material-auto-mode":"material/auto-mode.svg","material-auto-upload":"material/auto-upload.svg","material-autorenew-off":"material/autorenew-off.svg","material-autorenew":"material/autorenew.svg","material-av-timer":"material/av-timer.svg","material-awning-outline":"material/awning-outline.svg","material-awning":"material/awning.svg","material-aws":"material/aws.svg","material-axe-battle":"material/axe-battle.svg","material-axe":"material/axe.svg","material-axis-arrow-info":"material/axis-arrow-info.svg","material-axis-arrow-lock":"material/axis-arrow-lock.svg","material-axis-arrow":"material/axis-arrow.svg","material-axis-lock":"material/axis-lock.svg","material-axis-x-arrow-lock":"material/axis-x-arrow-lock.svg","material-axis-x-arrow":"material/axis-x-arrow.svg","material-axis-x-rotate-clockwise":"material/axis-x-rotate-clockwise.svg","material-axis-x-rotate-counterclockwise":"material/axis-x-rotate-counterclockwise.svg","material-axis-x-y-arrow-lock":"material/axis-x-y-arrow-lock.svg","material-axis-y-arrow-lock":"material/axis-y-arrow-lock.svg","material-axis-y-arrow":"material/axis-y-arrow.svg","material-axis-y-rotate-clockwise":"material/axis-y-rotate-clockwise.svg","material-axis-y-rotate-counterclockwise":"material/axis-y-rotate-counterclockwise.svg","material-axis-z-arrow-lock":"material/axis-z-arrow-lock.svg","material-axis-z-arrow":"material/axis-z-arrow.svg","material-axis-z-rotate-clockwise":"material/axis-z-rotate-clockwise.svg","material-axis-z-rotate-counterclockwise":"material/axis-z-rotate-counterclockwise.svg","material-axis":"material/axis.svg","material-babel":"material/babel.svg","material-baby-bottle-outline":"material/baby-bottle-outline.svg","material-baby-bottle":"material/baby-bottle.svg","material-baby-buggy-off":"material/baby-buggy-off.svg","material-baby-buggy":"material/baby-buggy.svg","material-baby-carriage-off":"material/baby-carriage-off.svg","material-baby-carriage":"material/baby-carriage.svg","material-baby-face-outline":"material/baby-face-outline.svg","material-baby-face":"material/baby-face.svg","material-baby":"material/baby.svg","material-backburger":"material/backburger.svg","material-backspace-outline":"material/backspace-outline.svg","material-backspace-reverse-outline":"material/backspace-reverse-outline.svg","material-backspace-reverse":"material/backspace-reverse.svg","material-backspace":"material/backspace.svg","material-backup-restore":"material/backup-restore.svg","material-bacteria-outline":"material/bacteria-outline.svg","material-bacteria":"material/bacteria.svg","material-badge-account-alert-outline":"material/badge-account-alert-outline.svg","material-badge-account-alert":"material/badge-account-alert.svg","material-badge-account-horizontal-outline":"material/badge-account-horizontal-outline.svg","material-badge-account-horizontal":"material/badge-account-horizontal.svg","material-badge-account-outline":"material/badge-account-outline.svg","material-badge-account":"material/badge-account.svg","material-badminton":"material/badminton.svg","material-bag-carry-on-check":"material/bag-carry-on-check.svg","material-bag-carry-on-off":"material/bag-carry-on-off.svg","material-bag-carry-on":"material/bag-carry-on.svg","material-bag-checked":"material/bag-checked.svg","material-bag-personal-off-outline":"material/bag-personal-off-outline.svg","material-bag-personal-off":"material/bag-personal-off.svg","material-bag-personal-outline":"material/bag-personal-outline.svg","material-bag-personal-tag-outline":"material/bag-personal-tag-outline.svg","material-bag-personal-tag":"material/bag-personal-tag.svg","material-bag-personal":"material/bag-personal.svg","material-bag-suitcase-off-outline":"material/bag-suitcase-off-outline.svg","material-bag-suitcase-off":"material/bag-suitcase-off.svg","material-bag-suitcase-outline":"material/bag-suitcase-outline.svg","material-bag-suitcase":"material/bag-suitcase.svg","material-baguette":"material/baguette.svg","material-balcony":"material/balcony.svg","material-balloon":"material/balloon.svg","material-ballot-outline":"material/ballot-outline.svg","material-ballot-recount-outline":"material/ballot-recount-outline.svg","material-ballot-recount":"material/ballot-recount.svg","material-ballot":"material/ballot.svg","material-bandage":"material/bandage.svg","material-bank-check":"material/bank-check.svg","material-bank-circle-outline":"material/bank-circle-outline.svg","material-bank-circle":"material/bank-circle.svg","material-bank-minus":"material/bank-minus.svg","material-bank-off-outline":"material/bank-off-outline.svg","material-bank-off":"material/bank-off.svg","material-bank-outline":"material/bank-outline.svg","material-bank-plus":"material/bank-plus.svg","material-bank-remove":"material/bank-remove.svg","material-bank-transfer-in":"material/bank-transfer-in.svg","material-bank-transfer-out":"material/bank-transfer-out.svg","material-bank-transfer":"material/bank-transfer.svg","material-bank":"material/bank.svg","material-barcode-off":"material/barcode-off.svg","material-barcode-scan":"material/barcode-scan.svg","material-barcode":"material/barcode.svg","material-barley-off":"material/barley-off.svg","material-barley":"material/barley.svg","material-barn":"material/barn.svg","material-barrel-outline":"material/barrel-outline.svg","material-barrel":"material/barrel.svg","material-baseball-bat":"material/baseball-bat.svg","material-baseball-diamond-outline":"material/baseball-diamond-outline.svg","material-baseball-diamond":"material/baseball-diamond.svg","material-baseball-outline":"material/baseball-outline.svg","material-baseball":"material/baseball.svg","material-bash":"material/bash.svg","material-basket-check-outline":"material/basket-check-outline.svg","material-basket-check":"material/basket-check.svg","material-basket-fill":"material/basket-fill.svg","material-basket-minus-outline":"material/basket-minus-outline.svg","material-basket-minus":"material/basket-minus.svg","material-basket-off-outline":"material/basket-off-outline.svg","material-basket-off":"material/basket-off.svg","material-basket-outline":"material/basket-outline.svg","material-basket-plus-outline":"material/basket-plus-outline.svg","material-basket-plus":"material/basket-plus.svg","material-basket-remove-outline":"material/basket-remove-outline.svg","material-basket-remove":"material/basket-remove.svg","material-basket-unfill":"material/basket-unfill.svg","material-basket":"material/basket.svg","material-basketball-hoop-outline":"material/basketball-hoop-outline.svg","material-basketball-hoop":"material/basketball-hoop.svg","material-basketball":"material/basketball.svg","material-bat":"material/bat.svg","material-bathtub-outline":"material/bathtub-outline.svg","material-bathtub":"material/bathtub.svg","material-battery-10-bluetooth":"material/battery-10-bluetooth.svg","material-battery-10":"material/battery-10.svg","material-battery-20-bluetooth":"material/battery-20-bluetooth.svg","material-battery-20":"material/battery-20.svg","material-battery-30-bluetooth":"material/battery-30-bluetooth.svg","material-battery-30":"material/battery-30.svg","material-battery-40-bluetooth":"material/battery-40-bluetooth.svg","material-battery-40":"material/battery-40.svg","material-battery-50-bluetooth":"material/battery-50-bluetooth.svg","material-battery-50":"material/battery-50.svg","material-battery-60-bluetooth":"material/battery-60-bluetooth.svg","material-battery-60":"material/battery-60.svg","material-battery-70-bluetooth":"material/battery-70-bluetooth.svg","material-battery-70":"material/battery-70.svg","material-battery-80-bluetooth":"material/battery-80-bluetooth.svg","material-battery-80":"material/battery-80.svg","material-battery-90-bluetooth":"material/battery-90-bluetooth.svg","material-battery-90":"material/battery-90.svg","material-battery-alert-bluetooth":"material/battery-alert-bluetooth.svg","material-battery-alert-variant-outline":"material/battery-alert-variant-outline.svg","material-battery-alert-variant":"material/battery-alert-variant.svg","material-battery-alert":"material/battery-alert.svg","material-battery-arrow-down-outline":"material/battery-arrow-down-outline.svg","material-battery-arrow-down":"material/battery-arrow-down.svg","material-battery-arrow-up-outline":"material/battery-arrow-up-outline.svg","material-battery-arrow-up":"material/battery-arrow-up.svg","material-battery-bluetooth-variant":"material/battery-bluetooth-variant.svg","material-battery-bluetooth":"material/battery-bluetooth.svg","material-battery-charging-10":"material/battery-charging-10.svg","material-battery-charging-100":"material/battery-charging-100.svg","material-battery-charging-20":"material/battery-charging-20.svg","material-battery-charging-30":"material/battery-charging-30.svg","material-battery-charging-40":"material/battery-charging-40.svg","material-battery-charging-50":"material/battery-charging-50.svg","material-battery-charging-60":"material/battery-charging-60.svg","material-battery-charging-70":"material/battery-charging-70.svg","material-battery-charging-80":"material/battery-charging-80.svg","material-battery-charging-90":"material/battery-charging-90.svg","material-battery-charging-high":"material/battery-charging-high.svg","material-battery-charging-low":"material/battery-charging-low.svg","material-battery-charging-medium":"material/battery-charging-medium.svg","material-battery-charging-outline":"material/battery-charging-outline.svg","material-battery-charging-wireless-10":"material/battery-charging-wireless-10.svg","material-battery-charging-wireless-20":"material/battery-charging-wireless-20.svg","material-battery-charging-wireless-30":"material/battery-charging-wireless-30.svg","material-battery-charging-wireless-40":"material/battery-charging-wireless-40.svg","material-battery-charging-wireless-50":"material/battery-charging-wireless-50.svg","material-battery-charging-wireless-60":"material/battery-charging-wireless-60.svg","material-battery-charging-wireless-70":"material/battery-charging-wireless-70.svg","material-battery-charging-wireless-80":"material/battery-charging-wireless-80.svg","material-battery-charging-wireless-90":"material/battery-charging-wireless-90.svg","material-battery-charging-wireless-alert":"material/battery-charging-wireless-alert.svg","material-battery-charging-wireless-outline":"material/battery-charging-wireless-outline.svg","material-battery-charging-wireless":"material/battery-charging-wireless.svg","material-battery-charging":"material/battery-charging.svg","material-battery-check-outline":"material/battery-check-outline.svg","material-battery-check":"material/battery-check.svg","material-battery-clock-outline":"material/battery-clock-outline.svg","material-battery-clock":"material/battery-clock.svg","material-battery-heart-outline":"material/battery-heart-outline.svg","material-battery-heart-variant":"material/battery-heart-variant.svg","material-battery-heart":"material/battery-heart.svg","material-battery-high":"material/battery-high.svg","material-battery-lock-open":"material/battery-lock-open.svg","material-battery-lock":"material/battery-lock.svg","material-battery-low":"material/battery-low.svg","material-battery-medium":"material/battery-medium.svg","material-battery-minus-outline":"material/battery-minus-outline.svg","material-battery-minus-variant":"material/battery-minus-variant.svg","material-battery-minus":"material/battery-minus.svg","material-battery-negative":"material/battery-negative.svg","material-battery-off-outline":"material/battery-off-outline.svg","material-battery-off":"material/battery-off.svg","material-battery-outline":"material/battery-outline.svg","material-battery-plus-outline":"material/battery-plus-outline.svg","material-battery-plus-variant":"material/battery-plus-variant.svg","material-battery-plus":"material/battery-plus.svg","material-battery-positive":"material/battery-positive.svg","material-battery-remove-outline":"material/battery-remove-outline.svg","material-battery-remove":"material/battery-remove.svg","material-battery-sync-outline":"material/battery-sync-outline.svg","material-battery-sync":"material/battery-sync.svg","material-battery-unknown-bluetooth":"material/battery-unknown-bluetooth.svg","material-battery-unknown":"material/battery-unknown.svg","material-battery":"material/battery.svg","material-beach":"material/beach.svg","material-beaker-alert-outline":"material/beaker-alert-outline.svg","material-beaker-alert":"material/beaker-alert.svg","material-beaker-check-outline":"material/beaker-check-outline.svg","material-beaker-check":"material/beaker-check.svg","material-beaker-minus-outline":"material/beaker-minus-outline.svg","material-beaker-minus":"material/beaker-minus.svg","material-beaker-outline":"material/beaker-outline.svg","material-beaker-plus-outline":"material/beaker-plus-outline.svg","material-beaker-plus":"material/beaker-plus.svg","material-beaker-question-outline":"material/beaker-question-outline.svg","material-beaker-question":"material/beaker-question.svg","material-beaker-remove-outline":"material/beaker-remove-outline.svg","material-beaker-remove":"material/beaker-remove.svg","material-beaker":"material/beaker.svg","material-bed-clock":"material/bed-clock.svg","material-bed-double-outline":"material/bed-double-outline.svg","material-bed-double":"material/bed-double.svg","material-bed-empty":"material/bed-empty.svg","material-bed-king-outline":"material/bed-king-outline.svg","material-bed-king":"material/bed-king.svg","material-bed-outline":"material/bed-outline.svg","material-bed-queen-outline":"material/bed-queen-outline.svg","material-bed-queen":"material/bed-queen.svg","material-bed-single-outline":"material/bed-single-outline.svg","material-bed-single":"material/bed-single.svg","material-bed":"material/bed.svg","material-bee-flower":"material/bee-flower.svg","material-bee":"material/bee.svg","material-beehive-off-outline":"material/beehive-off-outline.svg","material-beehive-outline":"material/beehive-outline.svg","material-beekeeper":"material/beekeeper.svg","material-beer-outline":"material/beer-outline.svg","material-beer":"material/beer.svg","material-bell-alert-outline":"material/bell-alert-outline.svg","material-bell-alert":"material/bell-alert.svg","material-bell-badge-outline":"material/bell-badge-outline.svg","material-bell-badge":"material/bell-badge.svg","material-bell-cancel-outline":"material/bell-cancel-outline.svg","material-bell-cancel":"material/bell-cancel.svg","material-bell-check-outline":"material/bell-check-outline.svg","material-bell-check":"material/bell-check.svg","material-bell-circle-outline":"material/bell-circle-outline.svg","material-bell-circle":"material/bell-circle.svg","material-bell-cog-outline":"material/bell-cog-outline.svg","material-bell-cog":"material/bell-cog.svg","material-bell-minus-outline":"material/bell-minus-outline.svg","material-bell-minus":"material/bell-minus.svg","material-bell-off-outline":"material/bell-off-outline.svg","material-bell-off":"material/bell-off.svg","material-bell-outline":"material/bell-outline.svg","material-bell-plus-outline":"material/bell-plus-outline.svg","material-bell-plus":"material/bell-plus.svg","material-bell-remove-outline":"material/bell-remove-outline.svg","material-bell-remove":"material/bell-remove.svg","material-bell-ring-outline":"material/bell-ring-outline.svg","material-bell-ring":"material/bell-ring.svg","material-bell-sleep-outline":"material/bell-sleep-outline.svg","material-bell-sleep":"material/bell-sleep.svg","material-bell":"material/bell.svg","material-bench-back":"material/bench-back.svg","material-bench":"material/bench.svg","material-beta":"material/beta.svg","material-betamax":"material/betamax.svg","material-biathlon":"material/biathlon.svg","material-bicycle-basket":"material/bicycle-basket.svg","material-bicycle-cargo":"material/bicycle-cargo.svg","material-bicycle-electric":"material/bicycle-electric.svg","material-bicycle-penny-farthing":"material/bicycle-penny-farthing.svg","material-bicycle":"material/bicycle.svg","material-bike-fast":"material/bike-fast.svg","material-bike-pedal-clipless":"material/bike-pedal-clipless.svg","material-bike-pedal-mountain":"material/bike-pedal-mountain.svg","material-bike-pedal":"material/bike-pedal.svg","material-bike":"material/bike.svg","material-billboard":"material/billboard.svg","material-billiards-rack":"material/billiards-rack.svg","material-billiards":"material/billiards.svg","material-binoculars":"material/binoculars.svg","material-bio":"material/bio.svg","material-biohazard":"material/biohazard.svg","material-bird":"material/bird.svg","material-bitbucket":"material/bitbucket.svg","material-bitcoin":"material/bitcoin.svg","material-black-mesa":"material/black-mesa.svg","material-blender-outline":"material/blender-outline.svg","material-blender-software":"material/blender-software.svg","material-blender":"material/blender.svg","material-blinds-horizontal-closed":"material/blinds-horizontal-closed.svg","material-blinds-horizontal":"material/blinds-horizontal.svg","material-blinds-open":"material/blinds-open.svg","material-blinds-vertical-closed":"material/blinds-vertical-closed.svg","material-blinds-vertical":"material/blinds-vertical.svg","material-blinds":"material/blinds.svg","material-block-helper":"material/block-helper.svg","material-blood-bag":"material/blood-bag.svg","material-bluetooth-audio":"material/bluetooth-audio.svg","material-bluetooth-connect":"material/bluetooth-connect.svg","material-bluetooth-off":"material/bluetooth-off.svg","material-bluetooth-settings":"material/bluetooth-settings.svg","material-bluetooth-transfer":"material/bluetooth-transfer.svg","material-bluetooth":"material/bluetooth.svg","material-blur-linear":"material/blur-linear.svg","material-blur-off":"material/blur-off.svg","material-blur-radial":"material/blur-radial.svg","material-blur":"material/blur.svg","material-bolt":"material/bolt.svg","material-bomb-off":"material/bomb-off.svg","material-bomb":"material/bomb.svg","material-bone-off":"material/bone-off.svg","material-bone":"material/bone.svg","material-book-account-outline":"material/book-account-outline.svg","material-book-account":"material/book-account.svg","material-book-alert-outline":"material/book-alert-outline.svg","material-book-alert":"material/book-alert.svg","material-book-alphabet":"material/book-alphabet.svg","material-book-arrow-down-outline":"material/book-arrow-down-outline.svg","material-book-arrow-down":"material/book-arrow-down.svg","material-book-arrow-left-outline":"material/book-arrow-left-outline.svg","material-book-arrow-left":"material/book-arrow-left.svg","material-book-arrow-right-outline":"material/book-arrow-right-outline.svg","material-book-arrow-right":"material/book-arrow-right.svg","material-book-arrow-up-outline":"material/book-arrow-up-outline.svg","material-book-arrow-up":"material/book-arrow-up.svg","material-book-cancel-outline":"material/book-cancel-outline.svg","material-book-cancel":"material/book-cancel.svg","material-book-check-outline":"material/book-check-outline.svg","material-book-check":"material/book-check.svg","material-book-clock-outline":"material/book-clock-outline.svg","material-book-clock":"material/book-clock.svg","material-book-cog-outline":"material/book-cog-outline.svg","material-book-cog":"material/book-cog.svg","material-book-cross":"material/book-cross.svg","material-book-edit-outline":"material/book-edit-outline.svg","material-book-edit":"material/book-edit.svg","material-book-education-outline":"material/book-education-outline.svg","material-book-education":"material/book-education.svg","material-book-heart-outline":"material/book-heart-outline.svg","material-book-heart":"material/book-heart.svg","material-book-information-variant":"material/book-information-variant.svg","material-book-lock-open-outline":"material/book-lock-open-outline.svg","material-book-lock-open":"material/book-lock-open.svg","material-book-lock-outline":"material/book-lock-outline.svg","material-book-lock":"material/book-lock.svg","material-book-marker-outline":"material/book-marker-outline.svg","material-book-marker":"material/book-marker.svg","material-book-minus-multiple-outline":"material/book-minus-multiple-outline.svg","material-book-minus-multiple":"material/book-minus-multiple.svg","material-book-minus-outline":"material/book-minus-outline.svg","material-book-minus":"material/book-minus.svg","material-book-multiple-outline":"material/book-multiple-outline.svg","material-book-multiple":"material/book-multiple.svg","material-book-music-outline":"material/book-music-outline.svg","material-book-music":"material/book-music.svg","material-book-off-outline":"material/book-off-outline.svg","material-book-off":"material/book-off.svg","material-book-open-blank-variant":"material/book-open-blank-variant.svg","material-book-open-outline":"material/book-open-outline.svg","material-book-open-page-variant-outline":"material/book-open-page-variant-outline.svg","material-book-open-page-variant":"material/book-open-page-variant.svg","material-book-open-variant":"material/book-open-variant.svg","material-book-open":"material/book-open.svg","material-book-outline":"material/book-outline.svg","material-book-play-outline":"material/book-play-outline.svg","material-book-play":"material/book-play.svg","material-book-plus-multiple-outline":"material/book-plus-multiple-outline.svg","material-book-plus-multiple":"material/book-plus-multiple.svg","material-book-plus-outline":"material/book-plus-outline.svg","material-book-plus":"material/book-plus.svg","material-book-refresh-outline":"material/book-refresh-outline.svg","material-book-refresh":"material/book-refresh.svg","material-book-remove-multiple-outline":"material/book-remove-multiple-outline.svg","material-book-remove-multiple":"material/book-remove-multiple.svg","material-book-remove-outline":"material/book-remove-outline.svg","material-book-remove":"material/book-remove.svg","material-book-search-outline":"material/book-search-outline.svg","material-book-search":"material/book-search.svg","material-book-settings-outline":"material/book-settings-outline.svg","material-book-settings":"material/book-settings.svg","material-book-sync-outline":"material/book-sync-outline.svg","material-book-sync":"material/book-sync.svg","material-book-variant":"material/book-variant.svg","material-book":"material/book.svg","material-bookmark-box-multiple-outline":"material/bookmark-box-multiple-outline.svg","material-bookmark-box-multiple":"material/bookmark-box-multiple.svg","material-bookmark-box-outline":"material/bookmark-box-outline.svg","material-bookmark-box":"material/bookmark-box.svg","material-bookmark-check-outline":"material/bookmark-check-outline.svg","material-bookmark-check":"material/bookmark-check.svg","material-bookmark-minus-outline":"material/bookmark-minus-outline.svg","material-bookmark-minus":"material/bookmark-minus.svg","material-bookmark-multiple-outline":"material/bookmark-multiple-outline.svg","material-bookmark-multiple":"material/bookmark-multiple.svg","material-bookmark-music-outline":"material/bookmark-music-outline.svg","material-bookmark-music":"material/bookmark-music.svg","material-bookmark-off-outline":"material/bookmark-off-outline.svg","material-bookmark-off":"material/bookmark-off.svg","material-bookmark-outline":"material/bookmark-outline.svg","material-bookmark-plus-outline":"material/bookmark-plus-outline.svg","material-bookmark-plus":"material/bookmark-plus.svg","material-bookmark-remove-outline":"material/bookmark-remove-outline.svg","material-bookmark-remove":"material/bookmark-remove.svg","material-bookmark":"material/bookmark.svg","material-bookshelf":"material/bookshelf.svg","material-boom-gate-alert-outline":"material/boom-gate-alert-outline.svg","material-boom-gate-alert":"material/boom-gate-alert.svg","material-boom-gate-arrow-down-outline":"material/boom-gate-arrow-down-outline.svg","material-boom-gate-arrow-down":"material/boom-gate-arrow-down.svg","material-boom-gate-arrow-up-outline":"material/boom-gate-arrow-up-outline.svg","material-boom-gate-arrow-up":"material/boom-gate-arrow-up.svg","material-boom-gate-outline":"material/boom-gate-outline.svg","material-boom-gate-up-outline":"material/boom-gate-up-outline.svg","material-boom-gate-up":"material/boom-gate-up.svg","material-boom-gate":"material/boom-gate.svg","material-boombox":"material/boombox.svg","material-boomerang":"material/boomerang.svg","material-bootstrap":"material/bootstrap.svg","material-border-all-variant":"material/border-all-variant.svg","material-border-all":"material/border-all.svg","material-border-bottom-variant":"material/border-bottom-variant.svg","material-border-bottom":"material/border-bottom.svg","material-border-color":"material/border-color.svg","material-border-horizontal":"material/border-horizontal.svg","material-border-inside":"material/border-inside.svg","material-border-left-variant":"material/border-left-variant.svg","material-border-left":"material/border-left.svg","material-border-none-variant":"material/border-none-variant.svg","material-border-none":"material/border-none.svg","material-border-outside":"material/border-outside.svg","material-border-radius":"material/border-radius.svg","material-border-right-variant":"material/border-right-variant.svg","material-border-right":"material/border-right.svg","material-border-style":"material/border-style.svg","material-border-top-variant":"material/border-top-variant.svg","material-border-top":"material/border-top.svg","material-border-vertical":"material/border-vertical.svg","material-bottle-soda-classic-outline":"material/bottle-soda-classic-outline.svg","material-bottle-soda-classic":"material/bottle-soda-classic.svg","material-bottle-soda-outline":"material/bottle-soda-outline.svg","material-bottle-soda":"material/bottle-soda.svg","material-bottle-tonic-outline":"material/bottle-tonic-outline.svg","material-bottle-tonic-plus-outline":"material/bottle-tonic-plus-outline.svg","material-bottle-tonic-plus":"material/bottle-tonic-plus.svg","material-bottle-tonic-skull-outline":"material/bottle-tonic-skull-outline.svg","material-bottle-tonic-skull":"material/bottle-tonic-skull.svg","material-bottle-tonic":"material/bottle-tonic.svg","material-bottle-wine-outline":"material/bottle-wine-outline.svg","material-bottle-wine":"material/bottle-wine.svg","material-bow-arrow":"material/bow-arrow.svg","material-bow-tie":"material/bow-tie.svg","material-bowl-mix-outline":"material/bowl-mix-outline.svg","material-bowl-mix":"material/bowl-mix.svg","material-bowl-outline":"material/bowl-outline.svg","material-bowl":"material/bowl.svg","material-bowling":"material/bowling.svg","material-box-cutter-off":"material/box-cutter-off.svg","material-box-cutter":"material/box-cutter.svg","material-box-shadow":"material/box-shadow.svg","material-box":"material/box.svg","material-boxing-glove":"material/boxing-glove.svg","material-braille":"material/braille.svg","material-brain":"material/brain.svg","material-bread-slice-outline":"material/bread-slice-outline.svg","material-bread-slice":"material/bread-slice.svg","material-bridge":"material/bridge.svg","material-briefcase-account-outline":"material/briefcase-account-outline.svg","material-briefcase-account":"material/briefcase-account.svg","material-briefcase-arrow-left-right-outline":"material/briefcase-arrow-left-right-outline.svg","material-briefcase-arrow-left-right":"material/briefcase-arrow-left-right.svg","material-briefcase-arrow-up-down-outline":"material/briefcase-arrow-up-down-outline.svg","material-briefcase-arrow-up-down":"material/briefcase-arrow-up-down.svg","material-briefcase-check-outline":"material/briefcase-check-outline.svg","material-briefcase-check":"material/briefcase-check.svg","material-briefcase-clock-outline":"material/briefcase-clock-outline.svg","material-briefcase-clock":"material/briefcase-clock.svg","material-briefcase-download-outline":"material/briefcase-download-outline.svg","material-briefcase-download":"material/briefcase-download.svg","material-briefcase-edit-outline":"material/briefcase-edit-outline.svg","material-briefcase-edit":"material/briefcase-edit.svg","material-briefcase-eye-outline":"material/briefcase-eye-outline.svg","material-briefcase-eye":"material/briefcase-eye.svg","material-briefcase-minus-outline":"material/briefcase-minus-outline.svg","material-briefcase-minus":"material/briefcase-minus.svg","material-briefcase-off-outline":"material/briefcase-off-outline.svg","material-briefcase-off":"material/briefcase-off.svg","material-briefcase-outline":"material/briefcase-outline.svg","material-briefcase-plus-outline":"material/briefcase-plus-outline.svg","material-briefcase-plus":"material/briefcase-plus.svg","material-briefcase-remove-outline":"material/briefcase-remove-outline.svg","material-briefcase-remove":"material/briefcase-remove.svg","material-briefcase-search-outline":"material/briefcase-search-outline.svg","material-briefcase-search":"material/briefcase-search.svg","material-briefcase-upload-outline":"material/briefcase-upload-outline.svg","material-briefcase-upload":"material/briefcase-upload.svg","material-briefcase-variant-off-outline":"material/briefcase-variant-off-outline.svg","material-briefcase-variant-off":"material/briefcase-variant-off.svg","material-briefcase-variant-outline":"material/briefcase-variant-outline.svg","material-briefcase-variant":"material/briefcase-variant.svg","material-briefcase":"material/briefcase.svg","material-brightness-1":"material/brightness-1.svg","material-brightness-2":"material/brightness-2.svg","material-brightness-3":"material/brightness-3.svg","material-brightness-4":"material/brightness-4.svg","material-brightness-5":"material/brightness-5.svg","material-brightness-6":"material/brightness-6.svg","material-brightness-7":"material/brightness-7.svg","material-brightness-auto":"material/brightness-auto.svg","material-brightness-percent":"material/brightness-percent.svg","material-broadcast-off":"material/broadcast-off.svg","material-broadcast":"material/broadcast.svg","material-broom":"material/broom.svg","material-brush-off":"material/brush-off.svg","material-brush-outline":"material/brush-outline.svg","material-brush-variant":"material/brush-variant.svg","material-brush":"material/brush.svg","material-bucket-outline":"material/bucket-outline.svg","material-bucket":"material/bucket.svg","material-buffet":"material/buffet.svg","material-bug-check-outline":"material/bug-check-outline.svg","material-bug-check":"material/bug-check.svg","material-bug-outline":"material/bug-outline.svg","material-bug-pause-outline":"material/bug-pause-outline.svg","material-bug-pause":"material/bug-pause.svg","material-bug-play-outline":"material/bug-play-outline.svg","material-bug-play":"material/bug-play.svg","material-bug-stop-outline":"material/bug-stop-outline.svg","material-bug-stop":"material/bug-stop.svg","material-bug":"material/bug.svg","material-bugle":"material/bugle.svg","material-bulkhead-light":"material/bulkhead-light.svg","material-bulldozer":"material/bulldozer.svg","material-bullet":"material/bullet.svg","material-bulletin-board":"material/bulletin-board.svg","material-bullhorn-outline":"material/bullhorn-outline.svg","material-bullhorn-variant-outline":"material/bullhorn-variant-outline.svg","material-bullhorn-variant":"material/bullhorn-variant.svg","material-bullhorn":"material/bullhorn.svg","material-bullseye-arrow":"material/bullseye-arrow.svg","material-bullseye":"material/bullseye.svg","material-bulma":"material/bulma.svg","material-bunk-bed-outline":"material/bunk-bed-outline.svg","material-bunk-bed":"material/bunk-bed.svg","material-bus-alert":"material/bus-alert.svg","material-bus-articulated-end":"material/bus-articulated-end.svg","material-bus-articulated-front":"material/bus-articulated-front.svg","material-bus-clock":"material/bus-clock.svg","material-bus-double-decker":"material/bus-double-decker.svg","material-bus-electric":"material/bus-electric.svg","material-bus-marker":"material/bus-marker.svg","material-bus-multiple":"material/bus-multiple.svg","material-bus-school":"material/bus-school.svg","material-bus-side":"material/bus-side.svg","material-bus-stop-covered":"material/bus-stop-covered.svg","material-bus-stop-uncovered":"material/bus-stop-uncovered.svg","material-bus-stop":"material/bus-stop.svg","material-bus":"material/bus.svg","material-butterfly-outline":"material/butterfly-outline.svg","material-butterfly":"material/butterfly.svg","material-button-cursor":"material/button-cursor.svg","material-button-pointer":"material/button-pointer.svg","material-cabin-a-frame":"material/cabin-a-frame.svg","material-cable-data":"material/cable-data.svg","material-cached":"material/cached.svg","material-cactus":"material/cactus.svg","material-cake-layered":"material/cake-layered.svg","material-cake-variant-outline":"material/cake-variant-outline.svg","material-cake-variant":"material/cake-variant.svg","material-cake":"material/cake.svg","material-calculator-variant-outline":"material/calculator-variant-outline.svg","material-calculator-variant":"material/calculator-variant.svg","material-calculator":"material/calculator.svg","material-calendar-account-outline":"material/calendar-account-outline.svg","material-calendar-account":"material/calendar-account.svg","material-calendar-alert-outline":"material/calendar-alert-outline.svg","material-calendar-alert":"material/calendar-alert.svg","material-calendar-arrow-left":"material/calendar-arrow-left.svg","material-calendar-arrow-right":"material/calendar-arrow-right.svg","material-calendar-badge-outline":"material/calendar-badge-outline.svg","material-calendar-badge":"material/calendar-badge.svg","material-calendar-blank-multiple":"material/calendar-blank-multiple.svg","material-calendar-blank-outline":"material/calendar-blank-outline.svg","material-calendar-blank":"material/calendar-blank.svg","material-calendar-check-outline":"material/calendar-check-outline.svg","material-calendar-check":"material/calendar-check.svg","material-calendar-clock-outline":"material/calendar-clock-outline.svg","material-calendar-clock":"material/calendar-clock.svg","material-calendar-collapse-horizontal-outline":"material/calendar-collapse-horizontal-outline.svg","material-calendar-collapse-horizontal":"material/calendar-collapse-horizontal.svg","material-calendar-cursor-outline":"material/calendar-cursor-outline.svg","material-calendar-cursor":"material/calendar-cursor.svg","material-calendar-edit-outline":"material/calendar-edit-outline.svg","material-calendar-edit":"material/calendar-edit.svg","material-calendar-end-outline":"material/calendar-end-outline.svg","material-calendar-end":"material/calendar-end.svg","material-calendar-expand-horizontal-outline":"material/calendar-expand-horizontal-outline.svg","material-calendar-expand-horizontal":"material/calendar-expand-horizontal.svg","material-calendar-export-outline":"material/calendar-export-outline.svg","material-calendar-export":"material/calendar-export.svg","material-calendar-filter-outline":"material/calendar-filter-outline.svg","material-calendar-filter":"material/calendar-filter.svg","material-calendar-heart-outline":"material/calendar-heart-outline.svg","material-calendar-heart":"material/calendar-heart.svg","material-calendar-import-outline":"material/calendar-import-outline.svg","material-calendar-import":"material/calendar-import.svg","material-calendar-lock-open-outline":"material/calendar-lock-open-outline.svg","material-calendar-lock-open":"material/calendar-lock-open.svg","material-calendar-lock-outline":"material/calendar-lock-outline.svg","material-calendar-lock":"material/calendar-lock.svg","material-calendar-minus-outline":"material/calendar-minus-outline.svg","material-calendar-minus":"material/calendar-minus.svg","material-calendar-month-outline":"material/calendar-month-outline.svg","material-calendar-month":"material/calendar-month.svg","material-calendar-multiple-check":"material/calendar-multiple-check.svg","material-calendar-multiple":"material/calendar-multiple.svg","material-calendar-multiselect-outline":"material/calendar-multiselect-outline.svg","material-calendar-multiselect":"material/calendar-multiselect.svg","material-calendar-outline":"material/calendar-outline.svg","material-calendar-plus-outline":"material/calendar-plus-outline.svg","material-calendar-plus":"material/calendar-plus.svg","material-calendar-question-outline":"material/calendar-question-outline.svg","material-calendar-question":"material/calendar-question.svg","material-calendar-range-outline":"material/calendar-range-outline.svg","material-calendar-range":"material/calendar-range.svg","material-calendar-refresh-outline":"material/calendar-refresh-outline.svg","material-calendar-refresh":"material/calendar-refresh.svg","material-calendar-remove-outline":"material/calendar-remove-outline.svg","material-calendar-remove":"material/calendar-remove.svg","material-calendar-search-outline":"material/calendar-search-outline.svg","material-calendar-search":"material/calendar-search.svg","material-calendar-star-four-points":"material/calendar-star-four-points.svg","material-calendar-star-outline":"material/calendar-star-outline.svg","material-calendar-star":"material/calendar-star.svg","material-calendar-start-outline":"material/calendar-start-outline.svg","material-calendar-start":"material/calendar-start.svg","material-calendar-sync-outline":"material/calendar-sync-outline.svg","material-calendar-sync":"material/calendar-sync.svg","material-calendar-text-outline":"material/calendar-text-outline.svg","material-calendar-text":"material/calendar-text.svg","material-calendar-today-outline":"material/calendar-today-outline.svg","material-calendar-today":"material/calendar-today.svg","material-calendar-week-begin-outline":"material/calendar-week-begin-outline.svg","material-calendar-week-begin":"material/calendar-week-begin.svg","material-calendar-week-outline":"material/calendar-week-outline.svg","material-calendar-week":"material/calendar-week.svg","material-calendar-weekend-outline":"material/calendar-weekend-outline.svg","material-calendar-weekend":"material/calendar-weekend.svg","material-calendar":"material/calendar.svg","material-call-made":"material/call-made.svg","material-call-merge":"material/call-merge.svg","material-call-missed":"material/call-missed.svg","material-call-received":"material/call-received.svg","material-call-split":"material/call-split.svg","material-camcorder-off":"material/camcorder-off.svg","material-camcorder":"material/camcorder.svg","material-camera-account":"material/camera-account.svg","material-camera-burst":"material/camera-burst.svg","material-camera-control":"material/camera-control.svg","material-camera-document-off":"material/camera-document-off.svg","material-camera-document":"material/camera-document.svg","material-camera-enhance-outline":"material/camera-enhance-outline.svg","material-camera-enhance":"material/camera-enhance.svg","material-camera-flip-outline":"material/camera-flip-outline.svg","material-camera-flip":"material/camera-flip.svg","material-camera-front-variant":"material/camera-front-variant.svg","material-camera-front":"material/camera-front.svg","material-camera-gopro":"material/camera-gopro.svg","material-camera-image":"material/camera-image.svg","material-camera-iris":"material/camera-iris.svg","material-camera-lock-open-outline":"material/camera-lock-open-outline.svg","material-camera-lock-open":"material/camera-lock-open.svg","material-camera-lock-outline":"material/camera-lock-outline.svg","material-camera-lock":"material/camera-lock.svg","material-camera-marker-outline":"material/camera-marker-outline.svg","material-camera-marker":"material/camera-marker.svg","material-camera-metering-center":"material/camera-metering-center.svg","material-camera-metering-matrix":"material/camera-metering-matrix.svg","material-camera-metering-partial":"material/camera-metering-partial.svg","material-camera-metering-spot":"material/camera-metering-spot.svg","material-camera-off-outline":"material/camera-off-outline.svg","material-camera-off":"material/camera-off.svg","material-camera-outline":"material/camera-outline.svg","material-camera-party-mode":"material/camera-party-mode.svg","material-camera-plus-outline":"material/camera-plus-outline.svg","material-camera-plus":"material/camera-plus.svg","material-camera-rear-variant":"material/camera-rear-variant.svg","material-camera-rear":"material/camera-rear.svg","material-camera-retake-outline":"material/camera-retake-outline.svg","material-camera-retake":"material/camera-retake.svg","material-camera-switch-outline":"material/camera-switch-outline.svg","material-camera-switch":"material/camera-switch.svg","material-camera-timer":"material/camera-timer.svg","material-camera-wireless-outline":"material/camera-wireless-outline.svg","material-camera-wireless":"material/camera-wireless.svg","material-camera":"material/camera.svg","material-campfire":"material/campfire.svg","material-cancel":"material/cancel.svg","material-candelabra-fire":"material/candelabra-fire.svg","material-candelabra":"material/candelabra.svg","material-candle":"material/candle.svg","material-candy-off-outline":"material/candy-off-outline.svg","material-candy-off":"material/candy-off.svg","material-candy-outline":"material/candy-outline.svg","material-candy":"material/candy.svg","material-candycane":"material/candycane.svg","material-cannabis-off":"material/cannabis-off.svg","material-cannabis":"material/cannabis.svg","material-caps-lock":"material/caps-lock.svg","material-car-2-plus":"material/car-2-plus.svg","material-car-3-plus":"material/car-3-plus.svg","material-car-arrow-left":"material/car-arrow-left.svg","material-car-arrow-right":"material/car-arrow-right.svg","material-car-back":"material/car-back.svg","material-car-battery":"material/car-battery.svg","material-car-brake-abs":"material/car-brake-abs.svg","material-car-brake-alert":"material/car-brake-alert.svg","material-car-brake-fluid-level":"material/car-brake-fluid-level.svg","material-car-brake-hold":"material/car-brake-hold.svg","material-car-brake-low-pressure":"material/car-brake-low-pressure.svg","material-car-brake-parking":"material/car-brake-parking.svg","material-car-brake-retarder":"material/car-brake-retarder.svg","material-car-brake-temperature":"material/car-brake-temperature.svg","material-car-brake-worn-linings":"material/car-brake-worn-linings.svg","material-car-child-seat":"material/car-child-seat.svg","material-car-clock":"material/car-clock.svg","material-car-clutch":"material/car-clutch.svg","material-car-cog":"material/car-cog.svg","material-car-connected":"material/car-connected.svg","material-car-convertible":"material/car-convertible.svg","material-car-coolant-level":"material/car-coolant-level.svg","material-car-cruise-control":"material/car-cruise-control.svg","material-car-defrost-front":"material/car-defrost-front.svg","material-car-defrost-rear":"material/car-defrost-rear.svg","material-car-door-lock":"material/car-door-lock.svg","material-car-door":"material/car-door.svg","material-car-electric-outline":"material/car-electric-outline.svg","material-car-electric":"material/car-electric.svg","material-car-emergency":"material/car-emergency.svg","material-car-esp":"material/car-esp.svg","material-car-estate":"material/car-estate.svg","material-car-hatchback":"material/car-hatchback.svg","material-car-info":"material/car-info.svg","material-car-key":"material/car-key.svg","material-car-lifted-pickup":"material/car-lifted-pickup.svg","material-car-light-alert":"material/car-light-alert.svg","material-car-light-dimmed":"material/car-light-dimmed.svg","material-car-light-fog":"material/car-light-fog.svg","material-car-light-high":"material/car-light-high.svg","material-car-limousine":"material/car-limousine.svg","material-car-multiple":"material/car-multiple.svg","material-car-off":"material/car-off.svg","material-car-outline":"material/car-outline.svg","material-car-parking-lights":"material/car-parking-lights.svg","material-car-pickup":"material/car-pickup.svg","material-car-search-outline":"material/car-search-outline.svg","material-car-search":"material/car-search.svg","material-car-seat-cooler":"material/car-seat-cooler.svg","material-car-seat-heater":"material/car-seat-heater.svg","material-car-seat":"material/car-seat.svg","material-car-select":"material/car-select.svg","material-car-settings":"material/car-settings.svg","material-car-shift-pattern":"material/car-shift-pattern.svg","material-car-side":"material/car-side.svg","material-car-speed-limiter":"material/car-speed-limiter.svg","material-car-sports":"material/car-sports.svg","material-car-tire-alert":"material/car-tire-alert.svg","material-car-traction-control":"material/car-traction-control.svg","material-car-turbocharger":"material/car-turbocharger.svg","material-car-wash":"material/car-wash.svg","material-car-windshield-outline":"material/car-windshield-outline.svg","material-car-windshield":"material/car-windshield.svg","material-car-wireless":"material/car-wireless.svg","material-car-wrench":"material/car-wrench.svg","material-car":"material/car.svg","material-carabiner":"material/carabiner.svg","material-caravan":"material/caravan.svg","material-card-account-details-outline":"material/card-account-details-outline.svg","material-card-account-details-star-outline":"material/card-account-details-star-outline.svg","material-card-account-details-star":"material/card-account-details-star.svg","material-card-account-details":"material/card-account-details.svg","material-card-account-mail-outline":"material/card-account-mail-outline.svg","material-card-account-mail":"material/card-account-mail.svg","material-card-account-phone-outline":"material/card-account-phone-outline.svg","material-card-account-phone":"material/card-account-phone.svg","material-card-bulleted-off-outline":"material/card-bulleted-off-outline.svg","material-card-bulleted-off":"material/card-bulleted-off.svg","material-card-bulleted-outline":"material/card-bulleted-outline.svg","material-card-bulleted-settings-outline":"material/card-bulleted-settings-outline.svg","material-card-bulleted-settings":"material/card-bulleted-settings.svg","material-card-bulleted":"material/card-bulleted.svg","material-card-minus-outline":"material/card-minus-outline.svg","material-card-minus":"material/card-minus.svg","material-card-multiple-outline":"material/card-multiple-outline.svg","material-card-multiple":"material/card-multiple.svg","material-card-off-outline":"material/card-off-outline.svg","material-card-off":"material/card-off.svg","material-card-outline":"material/card-outline.svg","material-card-plus-outline":"material/card-plus-outline.svg","material-card-plus":"material/card-plus.svg","material-card-remove-outline":"material/card-remove-outline.svg","material-card-remove":"material/card-remove.svg","material-card-search-outline":"material/card-search-outline.svg","material-card-search":"material/card-search.svg","material-card-text-outline":"material/card-text-outline.svg","material-card-text":"material/card-text.svg","material-card":"material/card.svg","material-cards-club-outline":"material/cards-club-outline.svg","material-cards-club":"material/cards-club.svg","material-cards-diamond-outline":"material/cards-diamond-outline.svg","material-cards-diamond":"material/cards-diamond.svg","material-cards-heart-outline":"material/cards-heart-outline.svg","material-cards-heart":"material/cards-heart.svg","material-cards-outline":"material/cards-outline.svg","material-cards-playing-club-multiple-outline":"material/cards-playing-club-multiple-outline.svg","material-cards-playing-club-multiple":"material/cards-playing-club-multiple.svg","material-cards-playing-club-outline":"material/cards-playing-club-outline.svg","material-cards-playing-club":"material/cards-playing-club.svg","material-cards-playing-diamond-multiple-outline":"material/cards-playing-diamond-multiple-outline.svg","material-cards-playing-diamond-multiple":"material/cards-playing-diamond-multiple.svg","material-cards-playing-diamond-outline":"material/cards-playing-diamond-outline.svg","material-cards-playing-diamond":"material/cards-playing-diamond.svg","material-cards-playing-heart-multiple-outline":"material/cards-playing-heart-multiple-outline.svg","material-cards-playing-heart-multiple":"material/cards-playing-heart-multiple.svg","material-cards-playing-heart-outline":"material/cards-playing-heart-outline.svg","material-cards-playing-heart":"material/cards-playing-heart.svg","material-cards-playing-outline":"material/cards-playing-outline.svg","material-cards-playing-spade-multiple-outline":"material/cards-playing-spade-multiple-outline.svg","material-cards-playing-spade-multiple":"material/cards-playing-spade-multiple.svg","material-cards-playing-spade-outline":"material/cards-playing-spade-outline.svg","material-cards-playing-spade":"material/cards-playing-spade.svg","material-cards-playing":"material/cards-playing.svg","material-cards-spade-outline":"material/cards-spade-outline.svg","material-cards-spade":"material/cards-spade.svg","material-cards-variant":"material/cards-variant.svg","material-cards":"material/cards.svg","material-carrot":"material/carrot.svg","material-cart-arrow-down":"material/cart-arrow-down.svg","material-cart-arrow-right":"material/cart-arrow-right.svg","material-cart-arrow-up":"material/cart-arrow-up.svg","material-cart-check":"material/cart-check.svg","material-cart-heart":"material/cart-heart.svg","material-cart-minus":"material/cart-minus.svg","material-cart-off":"material/cart-off.svg","material-cart-outline":"material/cart-outline.svg","material-cart-percent":"material/cart-percent.svg","material-cart-plus":"material/cart-plus.svg","material-cart-remove":"material/cart-remove.svg","material-cart-variant":"material/cart-variant.svg","material-cart":"material/cart.svg","material-case-sensitive-alt":"material/case-sensitive-alt.svg","material-cash-100":"material/cash-100.svg","material-cash-check":"material/cash-check.svg","material-cash-clock":"material/cash-clock.svg","material-cash-fast":"material/cash-fast.svg","material-cash-lock-open":"material/cash-lock-open.svg","material-cash-lock":"material/cash-lock.svg","material-cash-marker":"material/cash-marker.svg","material-cash-minus":"material/cash-minus.svg","material-cash-multiple":"material/cash-multiple.svg","material-cash-off":"material/cash-off.svg","material-cash-plus":"material/cash-plus.svg","material-cash-refund":"material/cash-refund.svg","material-cash-register":"material/cash-register.svg","material-cash-remove":"material/cash-remove.svg","material-cash-sync":"material/cash-sync.svg","material-cash":"material/cash.svg","material-cassette":"material/cassette.svg","material-cast-audio-variant":"material/cast-audio-variant.svg","material-cast-audio":"material/cast-audio.svg","material-cast-connected":"material/cast-connected.svg","material-cast-education":"material/cast-education.svg","material-cast-off":"material/cast-off.svg","material-cast-variant":"material/cast-variant.svg","material-cast":"material/cast.svg","material-castle":"material/castle.svg","material-cat":"material/cat.svg","material-cctv-off":"material/cctv-off.svg","material-cctv":"material/cctv.svg","material-ceiling-fan-light":"material/ceiling-fan-light.svg","material-ceiling-fan":"material/ceiling-fan.svg","material-ceiling-light-multiple-outline":"material/ceiling-light-multiple-outline.svg","material-ceiling-light-multiple":"material/ceiling-light-multiple.svg","material-ceiling-light-outline":"material/ceiling-light-outline.svg","material-ceiling-light":"material/ceiling-light.svg","material-cellphone-arrow-down-variant":"material/cellphone-arrow-down-variant.svg","material-cellphone-arrow-down":"material/cellphone-arrow-down.svg","material-cellphone-basic":"material/cellphone-basic.svg","material-cellphone-charging":"material/cellphone-charging.svg","material-cellphone-check":"material/cellphone-check.svg","material-cellphone-cog":"material/cellphone-cog.svg","material-cellphone-dock":"material/cellphone-dock.svg","material-cellphone-information":"material/cellphone-information.svg","material-cellphone-key":"material/cellphone-key.svg","material-cellphone-link-off":"material/cellphone-link-off.svg","material-cellphone-link":"material/cellphone-link.svg","material-cellphone-lock":"material/cellphone-lock.svg","material-cellphone-marker":"material/cellphone-marker.svg","material-cellphone-message-off":"material/cellphone-message-off.svg","material-cellphone-message":"material/cellphone-message.svg","material-cellphone-nfc-off":"material/cellphone-nfc-off.svg","material-cellphone-nfc":"material/cellphone-nfc.svg","material-cellphone-off":"material/cellphone-off.svg","material-cellphone-play":"material/cellphone-play.svg","material-cellphone-remove":"material/cellphone-remove.svg","material-cellphone-screenshot":"material/cellphone-screenshot.svg","material-cellphone-settings":"material/cellphone-settings.svg","material-cellphone-sound":"material/cellphone-sound.svg","material-cellphone-text":"material/cellphone-text.svg","material-cellphone-wireless":"material/cellphone-wireless.svg","material-cellphone":"material/cellphone.svg","material-centos":"material/centos.svg","material-certificate-outline":"material/certificate-outline.svg","material-certificate":"material/certificate.svg","material-chair-rolling":"material/chair-rolling.svg","material-chair-school":"material/chair-school.svg","material-chandelier":"material/chandelier.svg","material-charity":"material/charity.svg","material-chart-arc":"material/chart-arc.svg","material-chart-areaspline-variant":"material/chart-areaspline-variant.svg","material-chart-areaspline":"material/chart-areaspline.svg","material-chart-bar-stacked":"material/chart-bar-stacked.svg","material-chart-bar":"material/chart-bar.svg","material-chart-bell-curve-cumulative":"material/chart-bell-curve-cumulative.svg","material-chart-bell-curve":"material/chart-bell-curve.svg","material-chart-box-outline":"material/chart-box-outline.svg","material-chart-box-plus-outline":"material/chart-box-plus-outline.svg","material-chart-box":"material/chart-box.svg","material-chart-bubble":"material/chart-bubble.svg","material-chart-donut-variant":"material/chart-donut-variant.svg","material-chart-donut":"material/chart-donut.svg","material-chart-gantt":"material/chart-gantt.svg","material-chart-histogram":"material/chart-histogram.svg","material-chart-line-stacked":"material/chart-line-stacked.svg","material-chart-line-variant":"material/chart-line-variant.svg","material-chart-line":"material/chart-line.svg","material-chart-multiline":"material/chart-multiline.svg","material-chart-multiple":"material/chart-multiple.svg","material-chart-pie-outline":"material/chart-pie-outline.svg","material-chart-pie":"material/chart-pie.svg","material-chart-ppf":"material/chart-ppf.svg","material-chart-sankey-variant":"material/chart-sankey-variant.svg","material-chart-sankey":"material/chart-sankey.svg","material-chart-scatter-plot-hexbin":"material/chart-scatter-plot-hexbin.svg","material-chart-scatter-plot":"material/chart-scatter-plot.svg","material-chart-timeline-variant-shimmer":"material/chart-timeline-variant-shimmer.svg","material-chart-timeline-variant":"material/chart-timeline-variant.svg","material-chart-timeline":"material/chart-timeline.svg","material-chart-tree":"material/chart-tree.svg","material-chart-waterfall":"material/chart-waterfall.svg","material-chat-alert-outline":"material/chat-alert-outline.svg","material-chat-alert":"material/chat-alert.svg","material-chat-minus-outline":"material/chat-minus-outline.svg","material-chat-minus":"material/chat-minus.svg","material-chat-outline":"material/chat-outline.svg","material-chat-plus-outline":"material/chat-plus-outline.svg","material-chat-plus":"material/chat-plus.svg","material-chat-processing-outline":"material/chat-processing-outline.svg","material-chat-processing":"material/chat-processing.svg","material-chat-question-outline":"material/chat-question-outline.svg","material-chat-question":"material/chat-question.svg","material-chat-remove-outline":"material/chat-remove-outline.svg","material-chat-remove":"material/chat-remove.svg","material-chat-sleep-outline":"material/chat-sleep-outline.svg","material-chat-sleep":"material/chat-sleep.svg","material-chat":"material/chat.svg","material-check-all":"material/check-all.svg","material-check-bold":"material/check-bold.svg","material-check-circle-outline":"material/check-circle-outline.svg","material-check-circle":"material/check-circle.svg","material-check-decagram-outline":"material/check-decagram-outline.svg","material-check-decagram":"material/check-decagram.svg","material-check-network-outline":"material/check-network-outline.svg","material-check-network":"material/check-network.svg","material-check-outline":"material/check-outline.svg","material-check-underline-circle-outline":"material/check-underline-circle-outline.svg","material-check-underline-circle":"material/check-underline-circle.svg","material-check-underline":"material/check-underline.svg","material-check":"material/check.svg","material-checkbook-arrow-left":"material/checkbook-arrow-left.svg","material-checkbook-arrow-right":"material/checkbook-arrow-right.svg","material-checkbook":"material/checkbook.svg","material-checkbox-blank-badge-outline":"material/checkbox-blank-badge-outline.svg","material-checkbox-blank-badge":"material/checkbox-blank-badge.svg","material-checkbox-blank-circle-outline":"material/checkbox-blank-circle-outline.svg","material-checkbox-blank-circle":"material/checkbox-blank-circle.svg","material-checkbox-blank-off-outline":"material/checkbox-blank-off-outline.svg","material-checkbox-blank-off":"material/checkbox-blank-off.svg","material-checkbox-blank-outline":"material/checkbox-blank-outline.svg","material-checkbox-blank":"material/checkbox-blank.svg","material-checkbox-intermediate-variant":"material/checkbox-intermediate-variant.svg","material-checkbox-intermediate":"material/checkbox-intermediate.svg","material-checkbox-marked-circle-auto-outline":"material/checkbox-marked-circle-auto-outline.svg","material-checkbox-marked-circle-minus-outline":"material/checkbox-marked-circle-minus-outline.svg","material-checkbox-marked-circle-outline":"material/checkbox-marked-circle-outline.svg","material-checkbox-marked-circle-plus-outline":"material/checkbox-marked-circle-plus-outline.svg","material-checkbox-marked-circle":"material/checkbox-marked-circle.svg","material-checkbox-marked-outline":"material/checkbox-marked-outline.svg","material-checkbox-marked":"material/checkbox-marked.svg","material-checkbox-multiple-blank-circle-outline":"material/checkbox-multiple-blank-circle-outline.svg","material-checkbox-multiple-blank-circle":"material/checkbox-multiple-blank-circle.svg","material-checkbox-multiple-blank-outline":"material/checkbox-multiple-blank-outline.svg","material-checkbox-multiple-blank":"material/checkbox-multiple-blank.svg","material-checkbox-multiple-marked-circle-outline":"material/checkbox-multiple-marked-circle-outline.svg","material-checkbox-multiple-marked-circle":"material/checkbox-multiple-marked-circle.svg","material-checkbox-multiple-marked-outline":"material/checkbox-multiple-marked-outline.svg","material-checkbox-multiple-marked":"material/checkbox-multiple-marked.svg","material-checkbox-multiple-outline":"material/checkbox-multiple-outline.svg","material-checkbox-outline":"material/checkbox-outline.svg","material-checkerboard-minus":"material/checkerboard-minus.svg","material-checkerboard-plus":"material/checkerboard-plus.svg","material-checkerboard-remove":"material/checkerboard-remove.svg","material-checkerboard":"material/checkerboard.svg","material-cheese-off":"material/cheese-off.svg","material-cheese":"material/cheese.svg","material-chef-hat":"material/chef-hat.svg","material-chemical-weapon":"material/chemical-weapon.svg","material-chess-bishop":"material/chess-bishop.svg","material-chess-king":"material/chess-king.svg","material-chess-knight":"material/chess-knight.svg","material-chess-pawn":"material/chess-pawn.svg","material-chess-queen":"material/chess-queen.svg","material-chess-rook":"material/chess-rook.svg","material-chevron-double-down":"material/chevron-double-down.svg","material-chevron-double-left":"material/chevron-double-left.svg","material-chevron-double-right":"material/chevron-double-right.svg","material-chevron-double-up":"material/chevron-double-up.svg","material-chevron-down-box-outline":"material/chevron-down-box-outline.svg","material-chevron-down-box":"material/chevron-down-box.svg","material-chevron-down-circle-outline":"material/chevron-down-circle-outline.svg","material-chevron-down-circle":"material/chevron-down-circle.svg","material-chevron-down":"material/chevron-down.svg","material-chevron-left-box-outline":"material/chevron-left-box-outline.svg","material-chevron-left-box":"material/chevron-left-box.svg","material-chevron-left-circle-outline":"material/chevron-left-circle-outline.svg","material-chevron-left-circle":"material/chevron-left-circle.svg","material-chevron-left":"material/chevron-left.svg","material-chevron-right-box-outline":"material/chevron-right-box-outline.svg","material-chevron-right-box":"material/chevron-right-box.svg","material-chevron-right-circle-outline":"material/chevron-right-circle-outline.svg","material-chevron-right-circle":"material/chevron-right-circle.svg","material-chevron-right":"material/chevron-right.svg","material-chevron-triple-down":"material/chevron-triple-down.svg","material-chevron-triple-left":"material/chevron-triple-left.svg","material-chevron-triple-right":"material/chevron-triple-right.svg","material-chevron-triple-up":"material/chevron-triple-up.svg","material-chevron-up-box-outline":"material/chevron-up-box-outline.svg","material-chevron-up-box":"material/chevron-up-box.svg","material-chevron-up-circle-outline":"material/chevron-up-circle-outline.svg","material-chevron-up-circle":"material/chevron-up-circle.svg","material-chevron-up":"material/chevron-up.svg","material-chili-alert-outline":"material/chili-alert-outline.svg","material-chili-alert":"material/chili-alert.svg","material-chili-hot-outline":"material/chili-hot-outline.svg","material-chili-hot":"material/chili-hot.svg","material-chili-medium-outline":"material/chili-medium-outline.svg","material-chili-medium":"material/chili-medium.svg","material-chili-mild-outline":"material/chili-mild-outline.svg","material-chili-mild":"material/chili-mild.svg","material-chili-off-outline":"material/chili-off-outline.svg","material-chili-off":"material/chili-off.svg","material-chip":"material/chip.svg","material-church-outline":"material/church-outline.svg","material-church":"material/church.svg","material-cigar-off":"material/cigar-off.svg","material-cigar":"material/cigar.svg","material-circle-box-outline":"material/circle-box-outline.svg","material-circle-box":"material/circle-box.svg","material-circle-double":"material/circle-double.svg","material-circle-edit-outline":"material/circle-edit-outline.svg","material-circle-expand":"material/circle-expand.svg","material-circle-half-full":"material/circle-half-full.svg","material-circle-half":"material/circle-half.svg","material-circle-medium":"material/circle-medium.svg","material-circle-multiple-outline":"material/circle-multiple-outline.svg","material-circle-multiple":"material/circle-multiple.svg","material-circle-off-outline":"material/circle-off-outline.svg","material-circle-opacity":"material/circle-opacity.svg","material-circle-outline":"material/circle-outline.svg","material-circle-slice-1":"material/circle-slice-1.svg","material-circle-slice-2":"material/circle-slice-2.svg","material-circle-slice-3":"material/circle-slice-3.svg","material-circle-slice-4":"material/circle-slice-4.svg","material-circle-slice-5":"material/circle-slice-5.svg","material-circle-slice-6":"material/circle-slice-6.svg","material-circle-slice-7":"material/circle-slice-7.svg","material-circle-slice-8":"material/circle-slice-8.svg","material-circle-small":"material/circle-small.svg","material-circle":"material/circle.svg","material-circular-saw":"material/circular-saw.svg","material-city-switch":"material/city-switch.svg","material-city-variant-outline":"material/city-variant-outline.svg","material-city-variant":"material/city-variant.svg","material-city":"material/city.svg","material-clipboard-account-outline":"material/clipboard-account-outline.svg","material-clipboard-account":"material/clipboard-account.svg","material-clipboard-alert-outline":"material/clipboard-alert-outline.svg","material-clipboard-alert":"material/clipboard-alert.svg","material-clipboard-arrow-down-outline":"material/clipboard-arrow-down-outline.svg","material-clipboard-arrow-down":"material/clipboard-arrow-down.svg","material-clipboard-arrow-left-outline":"material/clipboard-arrow-left-outline.svg","material-clipboard-arrow-left":"material/clipboard-arrow-left.svg","material-clipboard-arrow-right-outline":"material/clipboard-arrow-right-outline.svg","material-clipboard-arrow-right":"material/clipboard-arrow-right.svg","material-clipboard-arrow-up-outline":"material/clipboard-arrow-up-outline.svg","material-clipboard-arrow-up":"material/clipboard-arrow-up.svg","material-clipboard-check-multiple-outline":"material/clipboard-check-multiple-outline.svg","material-clipboard-check-multiple":"material/clipboard-check-multiple.svg","material-clipboard-check-outline":"material/clipboard-check-outline.svg","material-clipboard-check":"material/clipboard-check.svg","material-clipboard-clock-outline":"material/clipboard-clock-outline.svg","material-clipboard-clock":"material/clipboard-clock.svg","material-clipboard-edit-outline":"material/clipboard-edit-outline.svg","material-clipboard-edit":"material/clipboard-edit.svg","material-clipboard-file-outline":"material/clipboard-file-outline.svg","material-clipboard-file":"material/clipboard-file.svg","material-clipboard-flow-outline":"material/clipboard-flow-outline.svg","material-clipboard-flow":"material/clipboard-flow.svg","material-clipboard-list-outline":"material/clipboard-list-outline.svg","material-clipboard-list":"material/clipboard-list.svg","material-clipboard-minus-outline":"material/clipboard-minus-outline.svg","material-clipboard-minus":"material/clipboard-minus.svg","material-clipboard-multiple-outline":"material/clipboard-multiple-outline.svg","material-clipboard-multiple":"material/clipboard-multiple.svg","material-clipboard-off-outline":"material/clipboard-off-outline.svg","material-clipboard-off":"material/clipboard-off.svg","material-clipboard-outline":"material/clipboard-outline.svg","material-clipboard-play-multiple-outline":"material/clipboard-play-multiple-outline.svg","material-clipboard-play-multiple":"material/clipboard-play-multiple.svg","material-clipboard-play-outline":"material/clipboard-play-outline.svg","material-clipboard-play":"material/clipboard-play.svg","material-clipboard-plus-outline":"material/clipboard-plus-outline.svg","material-clipboard-plus":"material/clipboard-plus.svg","material-clipboard-pulse-outline":"material/clipboard-pulse-outline.svg","material-clipboard-pulse":"material/clipboard-pulse.svg","material-clipboard-remove-outline":"material/clipboard-remove-outline.svg","material-clipboard-remove":"material/clipboard-remove.svg","material-clipboard-search-outline":"material/clipboard-search-outline.svg","material-clipboard-search":"material/clipboard-search.svg","material-clipboard-text-clock-outline":"material/clipboard-text-clock-outline.svg","material-clipboard-text-clock":"material/clipboard-text-clock.svg","material-clipboard-text-multiple-outline":"material/clipboard-text-multiple-outline.svg","material-clipboard-text-multiple":"material/clipboard-text-multiple.svg","material-clipboard-text-off-outline":"material/clipboard-text-off-outline.svg","material-clipboard-text-off":"material/clipboard-text-off.svg","material-clipboard-text-outline":"material/clipboard-text-outline.svg","material-clipboard-text-play-outline":"material/clipboard-text-play-outline.svg","material-clipboard-text-play":"material/clipboard-text-play.svg","material-clipboard-text-search-outline":"material/clipboard-text-search-outline.svg","material-clipboard-text-search":"material/clipboard-text-search.svg","material-clipboard-text":"material/clipboard-text.svg","material-clipboard":"material/clipboard.svg","material-clippy":"material/clippy.svg","material-clock-alert-outline":"material/clock-alert-outline.svg","material-clock-alert":"material/clock-alert.svg","material-clock-check-outline":"material/clock-check-outline.svg","material-clock-check":"material/clock-check.svg","material-clock-digital":"material/clock-digital.svg","material-clock-edit-outline":"material/clock-edit-outline.svg","material-clock-edit":"material/clock-edit.svg","material-clock-end":"material/clock-end.svg","material-clock-fast":"material/clock-fast.svg","material-clock-in":"material/clock-in.svg","material-clock-minus-outline":"material/clock-minus-outline.svg","material-clock-minus":"material/clock-minus.svg","material-clock-out":"material/clock-out.svg","material-clock-outline":"material/clock-outline.svg","material-clock-plus-outline":"material/clock-plus-outline.svg","material-clock-plus":"material/clock-plus.svg","material-clock-remove-outline":"material/clock-remove-outline.svg","material-clock-remove":"material/clock-remove.svg","material-clock-star-four-points-outline":"material/clock-star-four-points-outline.svg","material-clock-star-four-points":"material/clock-star-four-points.svg","material-clock-start":"material/clock-start.svg","material-clock-time-eight-outline":"material/clock-time-eight-outline.svg","material-clock-time-eight":"material/clock-time-eight.svg","material-clock-time-eleven-outline":"material/clock-time-eleven-outline.svg","material-clock-time-eleven":"material/clock-time-eleven.svg","material-clock-time-five-outline":"material/clock-time-five-outline.svg","material-clock-time-five":"material/clock-time-five.svg","material-clock-time-four-outline":"material/clock-time-four-outline.svg","material-clock-time-four":"material/clock-time-four.svg","material-clock-time-nine-outline":"material/clock-time-nine-outline.svg","material-clock-time-nine":"material/clock-time-nine.svg","material-clock-time-one-outline":"material/clock-time-one-outline.svg","material-clock-time-one":"material/clock-time-one.svg","material-clock-time-seven-outline":"material/clock-time-seven-outline.svg","material-clock-time-seven":"material/clock-time-seven.svg","material-clock-time-six-outline":"material/clock-time-six-outline.svg","material-clock-time-six":"material/clock-time-six.svg","material-clock-time-ten-outline":"material/clock-time-ten-outline.svg","material-clock-time-ten":"material/clock-time-ten.svg","material-clock-time-three-outline":"material/clock-time-three-outline.svg","material-clock-time-three":"material/clock-time-three.svg","material-clock-time-twelve-outline":"material/clock-time-twelve-outline.svg","material-clock-time-twelve":"material/clock-time-twelve.svg","material-clock-time-two-outline":"material/clock-time-two-outline.svg","material-clock-time-two":"material/clock-time-two.svg","material-clock":"material/clock.svg","material-close-box-multiple-outline":"material/close-box-multiple-outline.svg","material-close-box-multiple":"material/close-box-multiple.svg","material-close-box-outline":"material/close-box-outline.svg","material-close-box":"material/close-box.svg","material-close-circle-multiple-outline":"material/close-circle-multiple-outline.svg","material-close-circle-multiple":"material/close-circle-multiple.svg","material-close-circle-outline":"material/close-circle-outline.svg","material-close-circle":"material/close-circle.svg","material-close-network-outline":"material/close-network-outline.svg","material-close-network":"material/close-network.svg","material-close-octagon-outline":"material/close-octagon-outline.svg","material-close-octagon":"material/close-octagon.svg","material-close-outline":"material/close-outline.svg","material-close-thick":"material/close-thick.svg","material-close":"material/close.svg","material-closed-caption-outline":"material/closed-caption-outline.svg","material-closed-caption":"material/closed-caption.svg","material-cloud-alert-outline":"material/cloud-alert-outline.svg","material-cloud-alert":"material/cloud-alert.svg","material-cloud-arrow-down-outline":"material/cloud-arrow-down-outline.svg","material-cloud-arrow-down":"material/cloud-arrow-down.svg","material-cloud-arrow-left-outline":"material/cloud-arrow-left-outline.svg","material-cloud-arrow-left":"material/cloud-arrow-left.svg","material-cloud-arrow-right-outline":"material/cloud-arrow-right-outline.svg","material-cloud-arrow-right":"material/cloud-arrow-right.svg","material-cloud-arrow-up-outline":"material/cloud-arrow-up-outline.svg","material-cloud-arrow-up":"material/cloud-arrow-up.svg","material-cloud-braces":"material/cloud-braces.svg","material-cloud-cancel-outline":"material/cloud-cancel-outline.svg","material-cloud-cancel":"material/cloud-cancel.svg","material-cloud-check-outline":"material/cloud-check-outline.svg","material-cloud-check-variant-outline":"material/cloud-check-variant-outline.svg","material-cloud-check-variant":"material/cloud-check-variant.svg","material-cloud-check":"material/cloud-check.svg","material-cloud-circle-outline":"material/cloud-circle-outline.svg","material-cloud-circle":"material/cloud-circle.svg","material-cloud-clock-outline":"material/cloud-clock-outline.svg","material-cloud-clock":"material/cloud-clock.svg","material-cloud-cog-outline":"material/cloud-cog-outline.svg","material-cloud-cog":"material/cloud-cog.svg","material-cloud-download-outline":"material/cloud-download-outline.svg","material-cloud-download":"material/cloud-download.svg","material-cloud-lock-open-outline":"material/cloud-lock-open-outline.svg","material-cloud-lock-open":"material/cloud-lock-open.svg","material-cloud-lock-outline":"material/cloud-lock-outline.svg","material-cloud-lock":"material/cloud-lock.svg","material-cloud-minus-outline":"material/cloud-minus-outline.svg","material-cloud-minus":"material/cloud-minus.svg","material-cloud-off-outline":"material/cloud-off-outline.svg","material-cloud-off":"material/cloud-off.svg","material-cloud-outline":"material/cloud-outline.svg","material-cloud-percent-outline":"material/cloud-percent-outline.svg","material-cloud-percent":"material/cloud-percent.svg","material-cloud-plus-outline":"material/cloud-plus-outline.svg","material-cloud-plus":"material/cloud-plus.svg","material-cloud-print-outline":"material/cloud-print-outline.svg","material-cloud-print":"material/cloud-print.svg","material-cloud-question-outline":"material/cloud-question-outline.svg","material-cloud-question":"material/cloud-question.svg","material-cloud-refresh-outline":"material/cloud-refresh-outline.svg","material-cloud-refresh-variant-outline":"material/cloud-refresh-variant-outline.svg","material-cloud-refresh-variant":"material/cloud-refresh-variant.svg","material-cloud-refresh":"material/cloud-refresh.svg","material-cloud-remove-outline":"material/cloud-remove-outline.svg","material-cloud-remove":"material/cloud-remove.svg","material-cloud-search-outline":"material/cloud-search-outline.svg","material-cloud-search":"material/cloud-search.svg","material-cloud-sync-outline":"material/cloud-sync-outline.svg","material-cloud-sync":"material/cloud-sync.svg","material-cloud-tags":"material/cloud-tags.svg","material-cloud-upload-outline":"material/cloud-upload-outline.svg","material-cloud-upload":"material/cloud-upload.svg","material-cloud":"material/cloud.svg","material-clouds":"material/clouds.svg","material-clover-outline":"material/clover-outline.svg","material-clover":"material/clover.svg","material-coach-lamp-variant":"material/coach-lamp-variant.svg","material-coach-lamp":"material/coach-lamp.svg","material-coat-rack":"material/coat-rack.svg","material-code-array":"material/code-array.svg","material-code-braces-box":"material/code-braces-box.svg","material-code-braces":"material/code-braces.svg","material-code-brackets":"material/code-brackets.svg","material-code-equal":"material/code-equal.svg","material-code-greater-than-or-equal":"material/code-greater-than-or-equal.svg","material-code-greater-than":"material/code-greater-than.svg","material-code-json":"material/code-json.svg","material-code-less-than-or-equal":"material/code-less-than-or-equal.svg","material-code-less-than":"material/code-less-than.svg","material-code-not-equal-variant":"material/code-not-equal-variant.svg","material-code-not-equal":"material/code-not-equal.svg","material-code-parentheses-box":"material/code-parentheses-box.svg","material-code-parentheses":"material/code-parentheses.svg","material-code-string":"material/code-string.svg","material-code-tags-check":"material/code-tags-check.svg","material-code-tags":"material/code-tags.svg","material-codepen":"material/codepen.svg","material-coffee-maker-check-outline":"material/coffee-maker-check-outline.svg","material-coffee-maker-check":"material/coffee-maker-check.svg","material-coffee-maker-outline":"material/coffee-maker-outline.svg","material-coffee-maker":"material/coffee-maker.svg","material-coffee-off-outline":"material/coffee-off-outline.svg","material-coffee-off":"material/coffee-off.svg","material-coffee-outline":"material/coffee-outline.svg","material-coffee-to-go-outline":"material/coffee-to-go-outline.svg","material-coffee-to-go":"material/coffee-to-go.svg","material-coffee":"material/coffee.svg","material-coffin":"material/coffin.svg","material-cog-box":"material/cog-box.svg","material-cog-clockwise":"material/cog-clockwise.svg","material-cog-counterclockwise":"material/cog-counterclockwise.svg","material-cog-off-outline":"material/cog-off-outline.svg","material-cog-off":"material/cog-off.svg","material-cog-outline":"material/cog-outline.svg","material-cog-pause-outline":"material/cog-pause-outline.svg","material-cog-pause":"material/cog-pause.svg","material-cog-play-outline":"material/cog-play-outline.svg","material-cog-play":"material/cog-play.svg","material-cog-refresh-outline":"material/cog-refresh-outline.svg","material-cog-refresh":"material/cog-refresh.svg","material-cog-stop-outline":"material/cog-stop-outline.svg","material-cog-stop":"material/cog-stop.svg","material-cog-sync-outline":"material/cog-sync-outline.svg","material-cog-sync":"material/cog-sync.svg","material-cog-transfer-outline":"material/cog-transfer-outline.svg","material-cog-transfer":"material/cog-transfer.svg","material-cog":"material/cog.svg","material-cogs":"material/cogs.svg","material-collage":"material/collage.svg","material-collapse-all-outline":"material/collapse-all-outline.svg","material-collapse-all":"material/collapse-all.svg","material-color-helper":"material/color-helper.svg","material-comma-box-outline":"material/comma-box-outline.svg","material-comma-box":"material/comma-box.svg","material-comma-circle-outline":"material/comma-circle-outline.svg","material-comma-circle":"material/comma-circle.svg","material-comma":"material/comma.svg","material-comment-account-outline":"material/comment-account-outline.svg","material-comment-account":"material/comment-account.svg","material-comment-alert-outline":"material/comment-alert-outline.svg","material-comment-alert":"material/comment-alert.svg","material-comment-arrow-left-outline":"material/comment-arrow-left-outline.svg","material-comment-arrow-left":"material/comment-arrow-left.svg","material-comment-arrow-right-outline":"material/comment-arrow-right-outline.svg","material-comment-arrow-right":"material/comment-arrow-right.svg","material-comment-bookmark-outline":"material/comment-bookmark-outline.svg","material-comment-bookmark":"material/comment-bookmark.svg","material-comment-check-outline":"material/comment-check-outline.svg","material-comment-check":"material/comment-check.svg","material-comment-edit-outline":"material/comment-edit-outline.svg","material-comment-edit":"material/comment-edit.svg","material-comment-eye-outline":"material/comment-eye-outline.svg","material-comment-eye":"material/comment-eye.svg","material-comment-flash-outline":"material/comment-flash-outline.svg","material-comment-flash":"material/comment-flash.svg","material-comment-minus-outline":"material/comment-minus-outline.svg","material-comment-minus":"material/comment-minus.svg","material-comment-multiple-outline":"material/comment-multiple-outline.svg","material-comment-multiple":"material/comment-multiple.svg","material-comment-off-outline":"material/comment-off-outline.svg","material-comment-off":"material/comment-off.svg","material-comment-outline":"material/comment-outline.svg","material-comment-plus-outline":"material/comment-plus-outline.svg","material-comment-plus":"material/comment-plus.svg","material-comment-processing-outline":"material/comment-processing-outline.svg","material-comment-processing":"material/comment-processing.svg","material-comment-question-outline":"material/comment-question-outline.svg","material-comment-question":"material/comment-question.svg","material-comment-quote-outline":"material/comment-quote-outline.svg","material-comment-quote":"material/comment-quote.svg","material-comment-remove-outline":"material/comment-remove-outline.svg","material-comment-remove":"material/comment-remove.svg","material-comment-search-outline":"material/comment-search-outline.svg","material-comment-search":"material/comment-search.svg","material-comment-text-multiple-outline":"material/comment-text-multiple-outline.svg","material-comment-text-multiple":"material/comment-text-multiple.svg","material-comment-text-outline":"material/comment-text-outline.svg","material-comment-text":"material/comment-text.svg","material-comment":"material/comment.svg","material-compare-horizontal":"material/compare-horizontal.svg","material-compare-remove":"material/compare-remove.svg","material-compare-vertical":"material/compare-vertical.svg","material-compare":"material/compare.svg","material-compass-off-outline":"material/compass-off-outline.svg","material-compass-off":"material/compass-off.svg","material-compass-outline":"material/compass-outline.svg","material-compass-rose":"material/compass-rose.svg","material-compass":"material/compass.svg","material-compost":"material/compost.svg","material-cone-off":"material/cone-off.svg","material-cone":"material/cone.svg","material-connection":"material/connection.svg","material-console-line":"material/console-line.svg","material-console-network-outline":"material/console-network-outline.svg","material-console-network":"material/console-network.svg","material-console":"material/console.svg","material-consolidate":"material/consolidate.svg","material-contactless-payment-circle-outline":"material/contactless-payment-circle-outline.svg","material-contactless-payment-circle":"material/contactless-payment-circle.svg","material-contactless-payment":"material/contactless-payment.svg","material-contacts-outline":"material/contacts-outline.svg","material-contacts":"material/contacts.svg","material-contain-end":"material/contain-end.svg","material-contain-start":"material/contain-start.svg","material-contain":"material/contain.svg","material-content-copy":"material/content-copy.svg","material-content-cut":"material/content-cut.svg","material-content-duplicate":"material/content-duplicate.svg","material-content-paste":"material/content-paste.svg","material-content-save-alert-outline":"material/content-save-alert-outline.svg","material-content-save-alert":"material/content-save-alert.svg","material-content-save-all-outline":"material/content-save-all-outline.svg","material-content-save-all":"material/content-save-all.svg","material-content-save-check-outline":"material/content-save-check-outline.svg","material-content-save-check":"material/content-save-check.svg","material-content-save-cog-outline":"material/content-save-cog-outline.svg","material-content-save-cog":"material/content-save-cog.svg","material-content-save-edit-outline":"material/content-save-edit-outline.svg","material-content-save-edit":"material/content-save-edit.svg","material-content-save-minus-outline":"material/content-save-minus-outline.svg","material-content-save-minus":"material/content-save-minus.svg","material-content-save-move-outline":"material/content-save-move-outline.svg","material-content-save-move":"material/content-save-move.svg","material-content-save-off-outline":"material/content-save-off-outline.svg","material-content-save-off":"material/content-save-off.svg","material-content-save-outline":"material/content-save-outline.svg","material-content-save-plus-outline":"material/content-save-plus-outline.svg","material-content-save-plus":"material/content-save-plus.svg","material-content-save-settings-outline":"material/content-save-settings-outline.svg","material-content-save-settings":"material/content-save-settings.svg","material-content-save":"material/content-save.svg","material-contrast-box":"material/contrast-box.svg","material-contrast-circle":"material/contrast-circle.svg","material-contrast":"material/contrast.svg","material-controller-classic-outline":"material/controller-classic-outline.svg","material-controller-classic":"material/controller-classic.svg","material-controller-off":"material/controller-off.svg","material-controller":"material/controller.svg","material-cookie-alert-outline":"material/cookie-alert-outline.svg","material-cookie-alert":"material/cookie-alert.svg","material-cookie-check-outline":"material/cookie-check-outline.svg","material-cookie-check":"material/cookie-check.svg","material-cookie-clock-outline":"material/cookie-clock-outline.svg","material-cookie-clock":"material/cookie-clock.svg","material-cookie-cog-outline":"material/cookie-cog-outline.svg","material-cookie-cog":"material/cookie-cog.svg","material-cookie-edit-outline":"material/cookie-edit-outline.svg","material-cookie-edit":"material/cookie-edit.svg","material-cookie-lock-outline":"material/cookie-lock-outline.svg","material-cookie-lock":"material/cookie-lock.svg","material-cookie-minus-outline":"material/cookie-minus-outline.svg","material-cookie-minus":"material/cookie-minus.svg","material-cookie-off-outline":"material/cookie-off-outline.svg","material-cookie-off":"material/cookie-off.svg","material-cookie-outline":"material/cookie-outline.svg","material-cookie-plus-outline":"material/cookie-plus-outline.svg","material-cookie-plus":"material/cookie-plus.svg","material-cookie-refresh-outline":"material/cookie-refresh-outline.svg","material-cookie-refresh":"material/cookie-refresh.svg","material-cookie-remove-outline":"material/cookie-remove-outline.svg","material-cookie-remove":"material/cookie-remove.svg","material-cookie-settings-outline":"material/cookie-settings-outline.svg","material-cookie-settings":"material/cookie-settings.svg","material-cookie":"material/cookie.svg","material-coolant-temperature":"material/coolant-temperature.svg","material-copyleft":"material/copyleft.svg","material-copyright":"material/copyright.svg","material-cordova":"material/cordova.svg","material-corn-off":"material/corn-off.svg","material-corn":"material/corn.svg","material-cosine-wave":"material/cosine-wave.svg","material-counter":"material/counter.svg","material-countertop-outline":"material/countertop-outline.svg","material-countertop":"material/countertop.svg","material-cow-off":"material/cow-off.svg","material-cow":"material/cow.svg","material-cpu-32-bit":"material/cpu-32-bit.svg","material-cpu-64-bit":"material/cpu-64-bit.svg","material-cradle-outline":"material/cradle-outline.svg","material-cradle":"material/cradle.svg","material-crane":"material/crane.svg","material-creation-outline":"material/creation-outline.svg","material-creation":"material/creation.svg","material-creative-commons":"material/creative-commons.svg","material-credit-card-check-outline":"material/credit-card-check-outline.svg","material-credit-card-check":"material/credit-card-check.svg","material-credit-card-chip-outline":"material/credit-card-chip-outline.svg","material-credit-card-chip":"material/credit-card-chip.svg","material-credit-card-clock-outline":"material/credit-card-clock-outline.svg","material-credit-card-clock":"material/credit-card-clock.svg","material-credit-card-edit-outline":"material/credit-card-edit-outline.svg","material-credit-card-edit":"material/credit-card-edit.svg","material-credit-card-fast-outline":"material/credit-card-fast-outline.svg","material-credit-card-fast":"material/credit-card-fast.svg","material-credit-card-lock-outline":"material/credit-card-lock-outline.svg","material-credit-card-lock":"material/credit-card-lock.svg","material-credit-card-marker-outline":"material/credit-card-marker-outline.svg","material-credit-card-marker":"material/credit-card-marker.svg","material-credit-card-minus-outline":"material/credit-card-minus-outline.svg","material-credit-card-minus":"material/credit-card-minus.svg","material-credit-card-multiple-outline":"material/credit-card-multiple-outline.svg","material-credit-card-multiple":"material/credit-card-multiple.svg","material-credit-card-off-outline":"material/credit-card-off-outline.svg","material-credit-card-off":"material/credit-card-off.svg","material-credit-card-outline":"material/credit-card-outline.svg","material-credit-card-plus-outline":"material/credit-card-plus-outline.svg","material-credit-card-plus":"material/credit-card-plus.svg","material-credit-card-refresh-outline":"material/credit-card-refresh-outline.svg","material-credit-card-refresh":"material/credit-card-refresh.svg","material-credit-card-refund-outline":"material/credit-card-refund-outline.svg","material-credit-card-refund":"material/credit-card-refund.svg","material-credit-card-remove-outline":"material/credit-card-remove-outline.svg","material-credit-card-remove":"material/credit-card-remove.svg","material-credit-card-scan-outline":"material/credit-card-scan-outline.svg","material-credit-card-scan":"material/credit-card-scan.svg","material-credit-card-search-outline":"material/credit-card-search-outline.svg","material-credit-card-search":"material/credit-card-search.svg","material-credit-card-settings-outline":"material/credit-card-settings-outline.svg","material-credit-card-settings":"material/credit-card-settings.svg","material-credit-card-sync-outline":"material/credit-card-sync-outline.svg","material-credit-card-sync":"material/credit-card-sync.svg","material-credit-card-wireless-off-outline":"material/credit-card-wireless-off-outline.svg","material-credit-card-wireless-off":"material/credit-card-wireless-off.svg","material-credit-card-wireless-outline":"material/credit-card-wireless-outline.svg","material-credit-card-wireless":"material/credit-card-wireless.svg","material-credit-card":"material/credit-card.svg","material-cricket":"material/cricket.svg","material-crop-free":"material/crop-free.svg","material-crop-landscape":"material/crop-landscape.svg","material-crop-portrait":"material/crop-portrait.svg","material-crop-rotate":"material/crop-rotate.svg","material-crop-square":"material/crop-square.svg","material-crop":"material/crop.svg","material-cross-bolnisi":"material/cross-bolnisi.svg","material-cross-celtic":"material/cross-celtic.svg","material-cross-outline":"material/cross-outline.svg","material-cross":"material/cross.svg","material-crosshairs-gps":"material/crosshairs-gps.svg","material-crosshairs-off":"material/crosshairs-off.svg","material-crosshairs-question":"material/crosshairs-question.svg","material-crosshairs":"material/crosshairs.svg","material-crowd":"material/crowd.svg","material-crown-circle-outline":"material/crown-circle-outline.svg","material-crown-circle":"material/crown-circle.svg","material-crown-outline":"material/crown-outline.svg","material-crown":"material/crown.svg","material-cryengine":"material/cryengine.svg","material-crystal-ball":"material/crystal-ball.svg","material-cube-off-outline":"material/cube-off-outline.svg","material-cube-off":"material/cube-off.svg","material-cube-outline":"material/cube-outline.svg","material-cube-scan":"material/cube-scan.svg","material-cube-send":"material/cube-send.svg","material-cube-unfolded":"material/cube-unfolded.svg","material-cube":"material/cube.svg","material-cup-off-outline":"material/cup-off-outline.svg","material-cup-off":"material/cup-off.svg","material-cup-outline":"material/cup-outline.svg","material-cup-water":"material/cup-water.svg","material-cup":"material/cup.svg","material-cupboard-outline":"material/cupboard-outline.svg","material-cupboard":"material/cupboard.svg","material-cupcake":"material/cupcake.svg","material-curling":"material/curling.svg","material-currency-bdt":"material/currency-bdt.svg","material-currency-brl":"material/currency-brl.svg","material-currency-btc":"material/currency-btc.svg","material-currency-cny":"material/currency-cny.svg","material-currency-eth":"material/currency-eth.svg","material-currency-eur-off":"material/currency-eur-off.svg","material-currency-eur":"material/currency-eur.svg","material-currency-fra":"material/currency-fra.svg","material-currency-gbp":"material/currency-gbp.svg","material-currency-ils":"material/currency-ils.svg","material-currency-inr":"material/currency-inr.svg","material-currency-jpy":"material/currency-jpy.svg","material-currency-krw":"material/currency-krw.svg","material-currency-kzt":"material/currency-kzt.svg","material-currency-mnt":"material/currency-mnt.svg","material-currency-ngn":"material/currency-ngn.svg","material-currency-php":"material/currency-php.svg","material-currency-rial":"material/currency-rial.svg","material-currency-rub":"material/currency-rub.svg","material-currency-rupee":"material/currency-rupee.svg","material-currency-sign":"material/currency-sign.svg","material-currency-thb":"material/currency-thb.svg","material-currency-try":"material/currency-try.svg","material-currency-twd":"material/currency-twd.svg","material-currency-uah":"material/currency-uah.svg","material-currency-usd-off":"material/currency-usd-off.svg","material-currency-usd":"material/currency-usd.svg","material-current-ac":"material/current-ac.svg","material-current-dc":"material/current-dc.svg","material-cursor-default-click-outline":"material/cursor-default-click-outline.svg","material-cursor-default-click":"material/cursor-default-click.svg","material-cursor-default-gesture-outline":"material/cursor-default-gesture-outline.svg","material-cursor-default-gesture":"material/cursor-default-gesture.svg","material-cursor-default-outline":"material/cursor-default-outline.svg","material-cursor-default":"material/cursor-default.svg","material-cursor-move":"material/cursor-move.svg","material-cursor-pointer":"material/cursor-pointer.svg","material-cursor-text":"material/cursor-text.svg","material-curtains-closed":"material/curtains-closed.svg","material-curtains":"material/curtains.svg","material-cylinder-off":"material/cylinder-off.svg","material-cylinder":"material/cylinder.svg","material-dance-ballroom":"material/dance-ballroom.svg","material-dance-pole":"material/dance-pole.svg","material-data-matrix-edit":"material/data-matrix-edit.svg","material-data-matrix-minus":"material/data-matrix-minus.svg","material-data-matrix-plus":"material/data-matrix-plus.svg","material-data-matrix-remove":"material/data-matrix-remove.svg","material-data-matrix-scan":"material/data-matrix-scan.svg","material-data-matrix":"material/data-matrix.svg","material-database-alert-outline":"material/database-alert-outline.svg","material-database-alert":"material/database-alert.svg","material-database-arrow-down-outline":"material/database-arrow-down-outline.svg","material-database-arrow-down":"material/database-arrow-down.svg","material-database-arrow-left-outline":"material/database-arrow-left-outline.svg","material-database-arrow-left":"material/database-arrow-left.svg","material-database-arrow-right-outline":"material/database-arrow-right-outline.svg","material-database-arrow-right":"material/database-arrow-right.svg","material-database-arrow-up-outline":"material/database-arrow-up-outline.svg","material-database-arrow-up":"material/database-arrow-up.svg","material-database-check-outline":"material/database-check-outline.svg","material-database-check":"material/database-check.svg","material-database-clock-outline":"material/database-clock-outline.svg","material-database-clock":"material/database-clock.svg","material-database-cog-outline":"material/database-cog-outline.svg","material-database-cog":"material/database-cog.svg","material-database-edit-outline":"material/database-edit-outline.svg","material-database-edit":"material/database-edit.svg","material-database-export-outline":"material/database-export-outline.svg","material-database-export":"material/database-export.svg","material-database-eye-off-outline":"material/database-eye-off-outline.svg","material-database-eye-off":"material/database-eye-off.svg","material-database-eye-outline":"material/database-eye-outline.svg","material-database-eye":"material/database-eye.svg","material-database-import-outline":"material/database-import-outline.svg","material-database-import":"material/database-import.svg","material-database-lock-outline":"material/database-lock-outline.svg","material-database-lock":"material/database-lock.svg","material-database-marker-outline":"material/database-marker-outline.svg","material-database-marker":"material/database-marker.svg","material-database-minus-outline":"material/database-minus-outline.svg","material-database-minus":"material/database-minus.svg","material-database-off-outline":"material/database-off-outline.svg","material-database-off":"material/database-off.svg","material-database-outline":"material/database-outline.svg","material-database-plus-outline":"material/database-plus-outline.svg","material-database-plus":"material/database-plus.svg","material-database-refresh-outline":"material/database-refresh-outline.svg","material-database-refresh":"material/database-refresh.svg","material-database-remove-outline":"material/database-remove-outline.svg","material-database-remove":"material/database-remove.svg","material-database-search-outline":"material/database-search-outline.svg","material-database-search":"material/database-search.svg","material-database-settings-outline":"material/database-settings-outline.svg","material-database-settings":"material/database-settings.svg","material-database-sync-outline":"material/database-sync-outline.svg","material-database-sync":"material/database-sync.svg","material-database":"material/database.svg","material-death-star-variant":"material/death-star-variant.svg","material-death-star":"material/death-star.svg","material-deathly-hallows":"material/deathly-hallows.svg","material-debian":"material/debian.svg","material-debug-step-into":"material/debug-step-into.svg","material-debug-step-out":"material/debug-step-out.svg","material-debug-step-over":"material/debug-step-over.svg","material-decagram-outline":"material/decagram-outline.svg","material-decagram":"material/decagram.svg","material-decimal-comma-decrease":"material/decimal-comma-decrease.svg","material-decimal-comma-increase":"material/decimal-comma-increase.svg","material-decimal-comma":"material/decimal-comma.svg","material-decimal-decrease":"material/decimal-decrease.svg","material-decimal-increase":"material/decimal-increase.svg","material-decimal":"material/decimal.svg","material-delete-alert-outline":"material/delete-alert-outline.svg","material-delete-alert":"material/delete-alert.svg","material-delete-circle-outline":"material/delete-circle-outline.svg","material-delete-circle":"material/delete-circle.svg","material-delete-clock-outline":"material/delete-clock-outline.svg","material-delete-clock":"material/delete-clock.svg","material-delete-empty-outline":"material/delete-empty-outline.svg","material-delete-empty":"material/delete-empty.svg","material-delete-forever-outline":"material/delete-forever-outline.svg","material-delete-forever":"material/delete-forever.svg","material-delete-off-outline":"material/delete-off-outline.svg","material-delete-off":"material/delete-off.svg","material-delete-outline":"material/delete-outline.svg","material-delete-restore":"material/delete-restore.svg","material-delete-sweep-outline":"material/delete-sweep-outline.svg","material-delete-sweep":"material/delete-sweep.svg","material-delete-variant":"material/delete-variant.svg","material-delete":"material/delete.svg","material-delta":"material/delta.svg","material-desk-lamp-off":"material/desk-lamp-off.svg","material-desk-lamp-on":"material/desk-lamp-on.svg","material-desk-lamp":"material/desk-lamp.svg","material-desk":"material/desk.svg","material-deskphone":"material/deskphone.svg","material-desktop-classic":"material/desktop-classic.svg","material-desktop-tower-monitor":"material/desktop-tower-monitor.svg","material-desktop-tower":"material/desktop-tower.svg","material-details":"material/details.svg","material-dev-to":"material/dev-to.svg","material-developer-board":"material/developer-board.svg","material-deviantart":"material/deviantart.svg","material-devices":"material/devices.svg","material-dharmachakra":"material/dharmachakra.svg","material-diabetes":"material/diabetes.svg","material-dialpad":"material/dialpad.svg","material-diameter-outline":"material/diameter-outline.svg","material-diameter-variant":"material/diameter-variant.svg","material-diameter":"material/diameter.svg","material-diamond-outline":"material/diamond-outline.svg","material-diamond-stone":"material/diamond-stone.svg","material-diamond":"material/diamond.svg","material-dice-1-outline":"material/dice-1-outline.svg","material-dice-1":"material/dice-1.svg","material-dice-2-outline":"material/dice-2-outline.svg","material-dice-2":"material/dice-2.svg","material-dice-3-outline":"material/dice-3-outline.svg","material-dice-3":"material/dice-3.svg","material-dice-4-outline":"material/dice-4-outline.svg","material-dice-4":"material/dice-4.svg","material-dice-5-outline":"material/dice-5-outline.svg","material-dice-5":"material/dice-5.svg","material-dice-6-outline":"material/dice-6-outline.svg","material-dice-6":"material/dice-6.svg","material-dice-d10-outline":"material/dice-d10-outline.svg","material-dice-d10":"material/dice-d10.svg","material-dice-d12-outline":"material/dice-d12-outline.svg","material-dice-d12":"material/dice-d12.svg","material-dice-d20-outline":"material/dice-d20-outline.svg","material-dice-d20":"material/dice-d20.svg","material-dice-d4-outline":"material/dice-d4-outline.svg","material-dice-d4":"material/dice-d4.svg","material-dice-d6-outline":"material/dice-d6-outline.svg","material-dice-d6":"material/dice-d6.svg","material-dice-d8-outline":"material/dice-d8-outline.svg","material-dice-d8":"material/dice-d8.svg","material-dice-multiple-outline":"material/dice-multiple-outline.svg","material-dice-multiple":"material/dice-multiple.svg","material-digital-ocean":"material/digital-ocean.svg","material-dip-switch":"material/dip-switch.svg","material-directions-fork":"material/directions-fork.svg","material-directions":"material/directions.svg","material-disc-alert":"material/disc-alert.svg","material-disc-player":"material/disc-player.svg","material-disc":"material/disc.svg","material-dishwasher-alert":"material/dishwasher-alert.svg","material-dishwasher-off":"material/dishwasher-off.svg","material-dishwasher":"material/dishwasher.svg","material-disqus":"material/disqus.svg","material-distribute-horizontal-center":"material/distribute-horizontal-center.svg","material-distribute-horizontal-left":"material/distribute-horizontal-left.svg","material-distribute-horizontal-right":"material/distribute-horizontal-right.svg","material-distribute-vertical-bottom":"material/distribute-vertical-bottom.svg","material-distribute-vertical-center":"material/distribute-vertical-center.svg","material-distribute-vertical-top":"material/distribute-vertical-top.svg","material-diversify":"material/diversify.svg","material-diving-flippers":"material/diving-flippers.svg","material-diving-helmet":"material/diving-helmet.svg","material-diving-scuba-flag":"material/diving-scuba-flag.svg","material-diving-scuba-mask":"material/diving-scuba-mask.svg","material-diving-scuba-tank-multiple":"material/diving-scuba-tank-multiple.svg","material-diving-scuba-tank":"material/diving-scuba-tank.svg","material-diving-scuba":"material/diving-scuba.svg","material-diving-snorkel":"material/diving-snorkel.svg","material-diving":"material/diving.svg","material-division-box":"material/division-box.svg","material-division":"material/division.svg","material-dlna":"material/dlna.svg","material-dna":"material/dna.svg","material-dns-outline":"material/dns-outline.svg","material-dns":"material/dns.svg","material-dock-bottom":"material/dock-bottom.svg","material-dock-left":"material/dock-left.svg","material-dock-right":"material/dock-right.svg","material-dock-top":"material/dock-top.svg","material-dock-window":"material/dock-window.svg","material-docker":"material/docker.svg","material-doctor":"material/doctor.svg","material-dog-service":"material/dog-service.svg","material-dog-side-off":"material/dog-side-off.svg","material-dog-side":"material/dog-side.svg","material-dog":"material/dog.svg","material-dolby":"material/dolby.svg","material-dolly":"material/dolly.svg","material-dolphin":"material/dolphin.svg","material-domain-off":"material/domain-off.svg","material-domain-plus":"material/domain-plus.svg","material-domain-remove":"material/domain-remove.svg","material-domain-switch":"material/domain-switch.svg","material-domain":"material/domain.svg","material-dome-light":"material/dome-light.svg","material-domino-mask":"material/domino-mask.svg","material-donkey":"material/donkey.svg","material-door-closed-lock":"material/door-closed-lock.svg","material-door-closed":"material/door-closed.svg","material-door-open":"material/door-open.svg","material-door-sliding-lock":"material/door-sliding-lock.svg","material-door-sliding-open":"material/door-sliding-open.svg","material-door-sliding":"material/door-sliding.svg","material-door":"material/door.svg","material-doorbell-video":"material/doorbell-video.svg","material-doorbell":"material/doorbell.svg","material-dot-net":"material/dot-net.svg","material-dots-circle":"material/dots-circle.svg","material-dots-grid":"material/dots-grid.svg","material-dots-hexagon":"material/dots-hexagon.svg","material-dots-horizontal-circle-outline":"material/dots-horizontal-circle-outline.svg","material-dots-horizontal-circle":"material/dots-horizontal-circle.svg","material-dots-horizontal":"material/dots-horizontal.svg","material-dots-square":"material/dots-square.svg","material-dots-triangle":"material/dots-triangle.svg","material-dots-vertical-circle-outline":"material/dots-vertical-circle-outline.svg","material-dots-vertical-circle":"material/dots-vertical-circle.svg","material-dots-vertical":"material/dots-vertical.svg","material-download-box-outline":"material/download-box-outline.svg","material-download-box":"material/download-box.svg","material-download-circle-outline":"material/download-circle-outline.svg","material-download-circle":"material/download-circle.svg","material-download-lock-outline":"material/download-lock-outline.svg","material-download-lock":"material/download-lock.svg","material-download-multiple":"material/download-multiple.svg","material-download-network-outline":"material/download-network-outline.svg","material-download-network":"material/download-network.svg","material-download-off-outline":"material/download-off-outline.svg","material-download-off":"material/download-off.svg","material-download-outline":"material/download-outline.svg","material-download":"material/download.svg","material-drag-horizontal-variant":"material/drag-horizontal-variant.svg","material-drag-horizontal":"material/drag-horizontal.svg","material-drag-variant":"material/drag-variant.svg","material-drag-vertical-variant":"material/drag-vertical-variant.svg","material-drag-vertical":"material/drag-vertical.svg","material-drag":"material/drag.svg","material-drama-masks":"material/drama-masks.svg","material-draw-pen":"material/draw-pen.svg","material-draw":"material/draw.svg","material-drawing-box":"material/drawing-box.svg","material-drawing":"material/drawing.svg","material-dresser-outline":"material/dresser-outline.svg","material-dresser":"material/dresser.svg","material-drone":"material/drone.svg","material-dropbox":"material/dropbox.svg","material-drupal":"material/drupal.svg","material-duck":"material/duck.svg","material-dumbbell":"material/dumbbell.svg","material-dump-truck":"material/dump-truck.svg","material-ear-hearing-loop":"material/ear-hearing-loop.svg","material-ear-hearing-off":"material/ear-hearing-off.svg","material-ear-hearing":"material/ear-hearing.svg","material-earbuds-off-outline":"material/earbuds-off-outline.svg","material-earbuds-off":"material/earbuds-off.svg","material-earbuds-outline":"material/earbuds-outline.svg","material-earbuds":"material/earbuds.svg","material-earth-arrow-right":"material/earth-arrow-right.svg","material-earth-box-minus":"material/earth-box-minus.svg","material-earth-box-off":"material/earth-box-off.svg","material-earth-box-plus":"material/earth-box-plus.svg","material-earth-box-remove":"material/earth-box-remove.svg","material-earth-box":"material/earth-box.svg","material-earth-minus":"material/earth-minus.svg","material-earth-off":"material/earth-off.svg","material-earth-plus":"material/earth-plus.svg","material-earth-remove":"material/earth-remove.svg","material-earth":"material/earth.svg","material-egg-easter":"material/egg-easter.svg","material-egg-fried":"material/egg-fried.svg","material-egg-off-outline":"material/egg-off-outline.svg","material-egg-off":"material/egg-off.svg","material-egg-outline":"material/egg-outline.svg","material-egg":"material/egg.svg","material-eiffel-tower":"material/eiffel-tower.svg","material-eight-track":"material/eight-track.svg","material-eject-circle-outline":"material/eject-circle-outline.svg","material-eject-circle":"material/eject-circle.svg","material-eject-outline":"material/eject-outline.svg","material-eject":"material/eject.svg","material-electric-switch-closed":"material/electric-switch-closed.svg","material-electric-switch":"material/electric-switch.svg","material-electron-framework":"material/electron-framework.svg","material-elephant":"material/elephant.svg","material-elevation-decline":"material/elevation-decline.svg","material-elevation-rise":"material/elevation-rise.svg","material-elevator-down":"material/elevator-down.svg","material-elevator-passenger-off-outline":"material/elevator-passenger-off-outline.svg","material-elevator-passenger-off":"material/elevator-passenger-off.svg","material-elevator-passenger-outline":"material/elevator-passenger-outline.svg","material-elevator-passenger":"material/elevator-passenger.svg","material-elevator-up":"material/elevator-up.svg","material-elevator":"material/elevator.svg","material-ellipse-outline":"material/ellipse-outline.svg","material-ellipse":"material/ellipse.svg","material-email-alert-outline":"material/email-alert-outline.svg","material-email-alert":"material/email-alert.svg","material-email-arrow-left-outline":"material/email-arrow-left-outline.svg","material-email-arrow-left":"material/email-arrow-left.svg","material-email-arrow-right-outline":"material/email-arrow-right-outline.svg","material-email-arrow-right":"material/email-arrow-right.svg","material-email-box":"material/email-box.svg","material-email-check-outline":"material/email-check-outline.svg","material-email-check":"material/email-check.svg","material-email-edit-outline":"material/email-edit-outline.svg","material-email-edit":"material/email-edit.svg","material-email-fast-outline":"material/email-fast-outline.svg","material-email-fast":"material/email-fast.svg","material-email-heart-outline":"material/email-heart-outline.svg","material-email-lock-outline":"material/email-lock-outline.svg","material-email-lock":"material/email-lock.svg","material-email-mark-as-unread":"material/email-mark-as-unread.svg","material-email-minus-outline":"material/email-minus-outline.svg","material-email-minus":"material/email-minus.svg","material-email-multiple-outline":"material/email-multiple-outline.svg","material-email-multiple":"material/email-multiple.svg","material-email-newsletter":"material/email-newsletter.svg","material-email-off-outline":"material/email-off-outline.svg","material-email-off":"material/email-off.svg","material-email-open-heart-outline":"material/email-open-heart-outline.svg","material-email-open-multiple-outline":"material/email-open-multiple-outline.svg","material-email-open-multiple":"material/email-open-multiple.svg","material-email-open-outline":"material/email-open-outline.svg","material-email-open":"material/email-open.svg","material-email-outline":"material/email-outline.svg","material-email-plus-outline":"material/email-plus-outline.svg","material-email-plus":"material/email-plus.svg","material-email-remove-outline":"material/email-remove-outline.svg","material-email-remove":"material/email-remove.svg","material-email-seal-outline":"material/email-seal-outline.svg","material-email-seal":"material/email-seal.svg","material-email-search-outline":"material/email-search-outline.svg","material-email-search":"material/email-search.svg","material-email-sync-outline":"material/email-sync-outline.svg","material-email-sync":"material/email-sync.svg","material-email-variant":"material/email-variant.svg","material-email":"material/email.svg","material-ember":"material/ember.svg","material-emby":"material/emby.svg","material-emoticon-angry-outline":"material/emoticon-angry-outline.svg","material-emoticon-angry":"material/emoticon-angry.svg","material-emoticon-confused-outline":"material/emoticon-confused-outline.svg","material-emoticon-confused":"material/emoticon-confused.svg","material-emoticon-cool-outline":"material/emoticon-cool-outline.svg","material-emoticon-cool":"material/emoticon-cool.svg","material-emoticon-cry-outline":"material/emoticon-cry-outline.svg","material-emoticon-cry":"material/emoticon-cry.svg","material-emoticon-dead-outline":"material/emoticon-dead-outline.svg","material-emoticon-dead":"material/emoticon-dead.svg","material-emoticon-devil-outline":"material/emoticon-devil-outline.svg","material-emoticon-devil":"material/emoticon-devil.svg","material-emoticon-excited-outline":"material/emoticon-excited-outline.svg","material-emoticon-excited":"material/emoticon-excited.svg","material-emoticon-frown-outline":"material/emoticon-frown-outline.svg","material-emoticon-frown":"material/emoticon-frown.svg","material-emoticon-happy-outline":"material/emoticon-happy-outline.svg","material-emoticon-happy":"material/emoticon-happy.svg","material-emoticon-kiss-outline":"material/emoticon-kiss-outline.svg","material-emoticon-kiss":"material/emoticon-kiss.svg","material-emoticon-lol-outline":"material/emoticon-lol-outline.svg","material-emoticon-lol":"material/emoticon-lol.svg","material-emoticon-neutral-outline":"material/emoticon-neutral-outline.svg","material-emoticon-neutral":"material/emoticon-neutral.svg","material-emoticon-outline":"material/emoticon-outline.svg","material-emoticon-poop-outline":"material/emoticon-poop-outline.svg","material-emoticon-poop":"material/emoticon-poop.svg","material-emoticon-sad-outline":"material/emoticon-sad-outline.svg","material-emoticon-sad":"material/emoticon-sad.svg","material-emoticon-sick-outline":"material/emoticon-sick-outline.svg","material-emoticon-sick":"material/emoticon-sick.svg","material-emoticon-tongue-outline":"material/emoticon-tongue-outline.svg","material-emoticon-tongue":"material/emoticon-tongue.svg","material-emoticon-wink-outline":"material/emoticon-wink-outline.svg","material-emoticon-wink":"material/emoticon-wink.svg","material-emoticon":"material/emoticon.svg","material-engine-off-outline":"material/engine-off-outline.svg","material-engine-off":"material/engine-off.svg","material-engine-outline":"material/engine-outline.svg","material-engine":"material/engine.svg","material-epsilon":"material/epsilon.svg","material-equal-box":"material/equal-box.svg","material-equal":"material/equal.svg","material-equalizer-outline":"material/equalizer-outline.svg","material-equalizer":"material/equalizer.svg","material-eraser-variant":"material/eraser-variant.svg","material-eraser":"material/eraser.svg","material-escalator-box":"material/escalator-box.svg","material-escalator-down":"material/escalator-down.svg","material-escalator-up":"material/escalator-up.svg","material-escalator":"material/escalator.svg","material-eslint":"material/eslint.svg","material-et":"material/et.svg","material-ethereum":"material/ethereum.svg","material-ethernet-cable-off":"material/ethernet-cable-off.svg","material-ethernet-cable":"material/ethernet-cable.svg","material-ethernet":"material/ethernet.svg","material-ev-plug-ccs1":"material/ev-plug-ccs1.svg","material-ev-plug-ccs2":"material/ev-plug-ccs2.svg","material-ev-plug-chademo":"material/ev-plug-chademo.svg","material-ev-plug-tesla":"material/ev-plug-tesla.svg","material-ev-plug-type1":"material/ev-plug-type1.svg","material-ev-plug-type2":"material/ev-plug-type2.svg","material-ev-station":"material/ev-station.svg","material-evernote":"material/evernote.svg","material-excavator":"material/excavator.svg","material-exclamation-thick":"material/exclamation-thick.svg","material-exclamation":"material/exclamation.svg","material-exit-run":"material/exit-run.svg","material-exit-to-app":"material/exit-to-app.svg","material-expand-all-outline":"material/expand-all-outline.svg","material-expand-all":"material/expand-all.svg","material-expansion-card-variant":"material/expansion-card-variant.svg","material-expansion-card":"material/expansion-card.svg","material-exponent-box":"material/exponent-box.svg","material-exponent":"material/exponent.svg","material-export-variant":"material/export-variant.svg","material-export":"material/export.svg","material-eye-arrow-left-outline":"material/eye-arrow-left-outline.svg","material-eye-arrow-left":"material/eye-arrow-left.svg","material-eye-arrow-right-outline":"material/eye-arrow-right-outline.svg","material-eye-arrow-right":"material/eye-arrow-right.svg","material-eye-check-outline":"material/eye-check-outline.svg","material-eye-check":"material/eye-check.svg","material-eye-circle-outline":"material/eye-circle-outline.svg","material-eye-circle":"material/eye-circle.svg","material-eye-lock-open-outline":"material/eye-lock-open-outline.svg","material-eye-lock-open":"material/eye-lock-open.svg","material-eye-lock-outline":"material/eye-lock-outline.svg","material-eye-lock":"material/eye-lock.svg","material-eye-minus-outline":"material/eye-minus-outline.svg","material-eye-minus":"material/eye-minus.svg","material-eye-off-outline":"material/eye-off-outline.svg","material-eye-off":"material/eye-off.svg","material-eye-outline":"material/eye-outline.svg","material-eye-plus-outline":"material/eye-plus-outline.svg","material-eye-plus":"material/eye-plus.svg","material-eye-refresh-outline":"material/eye-refresh-outline.svg","material-eye-refresh":"material/eye-refresh.svg","material-eye-remove-outline":"material/eye-remove-outline.svg","material-eye-remove":"material/eye-remove.svg","material-eye-settings-outline":"material/eye-settings-outline.svg","material-eye-settings":"material/eye-settings.svg","material-eye":"material/eye.svg","material-eyedropper-minus":"material/eyedropper-minus.svg","material-eyedropper-off":"material/eyedropper-off.svg","material-eyedropper-plus":"material/eyedropper-plus.svg","material-eyedropper-remove":"material/eyedropper-remove.svg","material-eyedropper-variant":"material/eyedropper-variant.svg","material-eyedropper":"material/eyedropper.svg","material-face-agent":"material/face-agent.svg","material-face-man-outline":"material/face-man-outline.svg","material-face-man-profile":"material/face-man-profile.svg","material-face-man-shimmer-outline":"material/face-man-shimmer-outline.svg","material-face-man-shimmer":"material/face-man-shimmer.svg","material-face-man":"material/face-man.svg","material-face-mask-outline":"material/face-mask-outline.svg","material-face-mask":"material/face-mask.svg","material-face-recognition":"material/face-recognition.svg","material-face-woman-outline":"material/face-woman-outline.svg","material-face-woman-profile":"material/face-woman-profile.svg","material-face-woman-shimmer-outline":"material/face-woman-shimmer-outline.svg","material-face-woman-shimmer":"material/face-woman-shimmer.svg","material-face-woman":"material/face-woman.svg","material-facebook-gaming":"material/facebook-gaming.svg","material-facebook-messenger":"material/facebook-messenger.svg","material-facebook-workplace":"material/facebook-workplace.svg","material-facebook":"material/facebook.svg","material-factory":"material/factory.svg","material-family-tree":"material/family-tree.svg","material-fan-alert":"material/fan-alert.svg","material-fan-auto":"material/fan-auto.svg","material-fan-chevron-down":"material/fan-chevron-down.svg","material-fan-chevron-up":"material/fan-chevron-up.svg","material-fan-clock":"material/fan-clock.svg","material-fan-minus":"material/fan-minus.svg","material-fan-off":"material/fan-off.svg","material-fan-plus":"material/fan-plus.svg","material-fan-remove":"material/fan-remove.svg","material-fan-speed-1":"material/fan-speed-1.svg","material-fan-speed-2":"material/fan-speed-2.svg","material-fan-speed-3":"material/fan-speed-3.svg","material-fan":"material/fan.svg","material-fast-forward-10":"material/fast-forward-10.svg","material-fast-forward-15":"material/fast-forward-15.svg","material-fast-forward-30":"material/fast-forward-30.svg","material-fast-forward-45":"material/fast-forward-45.svg","material-fast-forward-5":"material/fast-forward-5.svg","material-fast-forward-60":"material/fast-forward-60.svg","material-fast-forward-outline":"material/fast-forward-outline.svg","material-fast-forward":"material/fast-forward.svg","material-faucet-variant":"material/faucet-variant.svg","material-faucet":"material/faucet.svg","material-fax":"material/fax.svg","material-feather":"material/feather.svg","material-feature-search-outline":"material/feature-search-outline.svg","material-feature-search":"material/feature-search.svg","material-fedora":"material/fedora.svg","material-fence-electric":"material/fence-electric.svg","material-fence":"material/fence.svg","material-fencing":"material/fencing.svg","material-ferris-wheel":"material/ferris-wheel.svg","material-ferry":"material/ferry.svg","material-file-account-outline":"material/file-account-outline.svg","material-file-account":"material/file-account.svg","material-file-alert-outline":"material/file-alert-outline.svg","material-file-alert":"material/file-alert.svg","material-file-arrow-left-right-outline":"material/file-arrow-left-right-outline.svg","material-file-arrow-left-right":"material/file-arrow-left-right.svg","material-file-arrow-up-down-outline":"material/file-arrow-up-down-outline.svg","material-file-arrow-up-down":"material/file-arrow-up-down.svg","material-file-cabinet":"material/file-cabinet.svg","material-file-cad-box":"material/file-cad-box.svg","material-file-cad":"material/file-cad.svg","material-file-cancel-outline":"material/file-cancel-outline.svg","material-file-cancel":"material/file-cancel.svg","material-file-certificate-outline":"material/file-certificate-outline.svg","material-file-certificate":"material/file-certificate.svg","material-file-chart-check-outline":"material/file-chart-check-outline.svg","material-file-chart-check":"material/file-chart-check.svg","material-file-chart-outline":"material/file-chart-outline.svg","material-file-chart":"material/file-chart.svg","material-file-check-outline":"material/file-check-outline.svg","material-file-check":"material/file-check.svg","material-file-clock-outline":"material/file-clock-outline.svg","material-file-clock":"material/file-clock.svg","material-file-cloud-outline":"material/file-cloud-outline.svg","material-file-cloud":"material/file-cloud.svg","material-file-code-outline":"material/file-code-outline.svg","material-file-code":"material/file-code.svg","material-file-cog-outline":"material/file-cog-outline.svg","material-file-cog":"material/file-cog.svg","material-file-compare":"material/file-compare.svg","material-file-delimited-outline":"material/file-delimited-outline.svg","material-file-delimited":"material/file-delimited.svg","material-file-document-alert-outline":"material/file-document-alert-outline.svg","material-file-document-alert":"material/file-document-alert.svg","material-file-document-arrow-right-outline":"material/file-document-arrow-right-outline.svg","material-file-document-arrow-right":"material/file-document-arrow-right.svg","material-file-document-check-outline":"material/file-document-check-outline.svg","material-file-document-check":"material/file-document-check.svg","material-file-document-edit-outline":"material/file-document-edit-outline.svg","material-file-document-edit":"material/file-document-edit.svg","material-file-document-minus-outline":"material/file-document-minus-outline.svg","material-file-document-minus":"material/file-document-minus.svg","material-file-document-multiple-outline":"material/file-document-multiple-outline.svg","material-file-document-multiple":"material/file-document-multiple.svg","material-file-document-outline":"material/file-document-outline.svg","material-file-document-plus-outline":"material/file-document-plus-outline.svg","material-file-document-plus":"material/file-document-plus.svg","material-file-document-refresh-outline":"material/file-document-refresh-outline.svg","material-file-document-refresh":"material/file-document-refresh.svg","material-file-document-remove-outline":"material/file-document-remove-outline.svg","material-file-document-remove":"material/file-document-remove.svg","material-file-document":"material/file-document.svg","material-file-download-outline":"material/file-download-outline.svg","material-file-download":"material/file-download.svg","material-file-edit-outline":"material/file-edit-outline.svg","material-file-edit":"material/file-edit.svg","material-file-excel-box-outline":"material/file-excel-box-outline.svg","material-file-excel-box":"material/file-excel-box.svg","material-file-excel-outline":"material/file-excel-outline.svg","material-file-excel":"material/file-excel.svg","material-file-export-outline":"material/file-export-outline.svg","material-file-export":"material/file-export.svg","material-file-eye-outline":"material/file-eye-outline.svg","material-file-eye":"material/file-eye.svg","material-file-find-outline":"material/file-find-outline.svg","material-file-find":"material/file-find.svg","material-file-gif-box":"material/file-gif-box.svg","material-file-hidden":"material/file-hidden.svg","material-file-image-marker-outline":"material/file-image-marker-outline.svg","material-file-image-marker":"material/file-image-marker.svg","material-file-image-minus-outline":"material/file-image-minus-outline.svg","material-file-image-minus":"material/file-image-minus.svg","material-file-image-outline":"material/file-image-outline.svg","material-file-image-plus-outline":"material/file-image-plus-outline.svg","material-file-image-plus":"material/file-image-plus.svg","material-file-image-remove-outline":"material/file-image-remove-outline.svg","material-file-image-remove":"material/file-image-remove.svg","material-file-image":"material/file-image.svg","material-file-import-outline":"material/file-import-outline.svg","material-file-import":"material/file-import.svg","material-file-jpg-box":"material/file-jpg-box.svg","material-file-key-outline":"material/file-key-outline.svg","material-file-key":"material/file-key.svg","material-file-link-outline":"material/file-link-outline.svg","material-file-link":"material/file-link.svg","material-file-lock-open-outline":"material/file-lock-open-outline.svg","material-file-lock-open":"material/file-lock-open.svg","material-file-lock-outline":"material/file-lock-outline.svg","material-file-lock":"material/file-lock.svg","material-file-marker-outline":"material/file-marker-outline.svg","material-file-marker":"material/file-marker.svg","material-file-minus-outline":"material/file-minus-outline.svg","material-file-minus":"material/file-minus.svg","material-file-move-outline":"material/file-move-outline.svg","material-file-move":"material/file-move.svg","material-file-multiple-outline":"material/file-multiple-outline.svg","material-file-multiple":"material/file-multiple.svg","material-file-music-outline":"material/file-music-outline.svg","material-file-music":"material/file-music.svg","material-file-outline":"material/file-outline.svg","material-file-pdf-box":"material/file-pdf-box.svg","material-file-percent-outline":"material/file-percent-outline.svg","material-file-percent":"material/file-percent.svg","material-file-phone-outline":"material/file-phone-outline.svg","material-file-phone":"material/file-phone.svg","material-file-plus-outline":"material/file-plus-outline.svg","material-file-plus":"material/file-plus.svg","material-file-png-box":"material/file-png-box.svg","material-file-powerpoint-box-outline":"material/file-powerpoint-box-outline.svg","material-file-powerpoint-box":"material/file-powerpoint-box.svg","material-file-powerpoint-outline":"material/file-powerpoint-outline.svg","material-file-powerpoint":"material/file-powerpoint.svg","material-file-presentation-box":"material/file-presentation-box.svg","material-file-question-outline":"material/file-question-outline.svg","material-file-question":"material/file-question.svg","material-file-refresh-outline":"material/file-refresh-outline.svg","material-file-refresh":"material/file-refresh.svg","material-file-remove-outline":"material/file-remove-outline.svg","material-file-remove":"material/file-remove.svg","material-file-replace-outline":"material/file-replace-outline.svg","material-file-replace":"material/file-replace.svg","material-file-restore-outline":"material/file-restore-outline.svg","material-file-restore":"material/file-restore.svg","material-file-rotate-left-outline":"material/file-rotate-left-outline.svg","material-file-rotate-left":"material/file-rotate-left.svg","material-file-rotate-right-outline":"material/file-rotate-right-outline.svg","material-file-rotate-right":"material/file-rotate-right.svg","material-file-search-outline":"material/file-search-outline.svg","material-file-search":"material/file-search.svg","material-file-send-outline":"material/file-send-outline.svg","material-file-send":"material/file-send.svg","material-file-settings-outline":"material/file-settings-outline.svg","material-file-settings":"material/file-settings.svg","material-file-sign":"material/file-sign.svg","material-file-star-four-points-outline":"material/file-star-four-points-outline.svg","material-file-star-four-points":"material/file-star-four-points.svg","material-file-star-outline":"material/file-star-outline.svg","material-file-star":"material/file-star.svg","material-file-swap-outline":"material/file-swap-outline.svg","material-file-swap":"material/file-swap.svg","material-file-sync-outline":"material/file-sync-outline.svg","material-file-sync":"material/file-sync.svg","material-file-table-box-multiple-outline":"material/file-table-box-multiple-outline.svg","material-file-table-box-multiple":"material/file-table-box-multiple.svg","material-file-table-box-outline":"material/file-table-box-outline.svg","material-file-table-box":"material/file-table-box.svg","material-file-table-outline":"material/file-table-outline.svg","material-file-table":"material/file-table.svg","material-file-tree-outline":"material/file-tree-outline.svg","material-file-tree":"material/file-tree.svg","material-file-undo-outline":"material/file-undo-outline.svg","material-file-undo":"material/file-undo.svg","material-file-upload-outline":"material/file-upload-outline.svg","material-file-upload":"material/file-upload.svg","material-file-video-outline":"material/file-video-outline.svg","material-file-video":"material/file-video.svg","material-file-word-box-outline":"material/file-word-box-outline.svg","material-file-word-box":"material/file-word-box.svg","material-file-word-outline":"material/file-word-outline.svg","material-file-word":"material/file-word.svg","material-file-xml-box":"material/file-xml-box.svg","material-file":"material/file.svg","material-film":"material/film.svg","material-filmstrip-box-multiple":"material/filmstrip-box-multiple.svg","material-filmstrip-box":"material/filmstrip-box.svg","material-filmstrip-off":"material/filmstrip-off.svg","material-filmstrip":"material/filmstrip.svg","material-filter-check-outline":"material/filter-check-outline.svg","material-filter-check":"material/filter-check.svg","material-filter-cog-outline":"material/filter-cog-outline.svg","material-filter-cog":"material/filter-cog.svg","material-filter-menu-outline":"material/filter-menu-outline.svg","material-filter-menu":"material/filter-menu.svg","material-filter-minus-outline":"material/filter-minus-outline.svg","material-filter-minus":"material/filter-minus.svg","material-filter-multiple-outline":"material/filter-multiple-outline.svg","material-filter-multiple":"material/filter-multiple.svg","material-filter-off-outline":"material/filter-off-outline.svg","material-filter-off":"material/filter-off.svg","material-filter-outline":"material/filter-outline.svg","material-filter-plus-outline":"material/filter-plus-outline.svg","material-filter-plus":"material/filter-plus.svg","material-filter-remove-outline":"material/filter-remove-outline.svg","material-filter-remove":"material/filter-remove.svg","material-filter-settings-outline":"material/filter-settings-outline.svg","material-filter-settings":"material/filter-settings.svg","material-filter-variant-minus":"material/filter-variant-minus.svg","material-filter-variant-plus":"material/filter-variant-plus.svg","material-filter-variant-remove":"material/filter-variant-remove.svg","material-filter-variant":"material/filter-variant.svg","material-filter":"material/filter.svg","material-finance":"material/finance.svg","material-find-replace":"material/find-replace.svg","material-fingerprint-off":"material/fingerprint-off.svg","material-fingerprint":"material/fingerprint.svg","material-fire-alert":"material/fire-alert.svg","material-fire-circle":"material/fire-circle.svg","material-fire-extinguisher":"material/fire-extinguisher.svg","material-fire-hydrant-alert":"material/fire-hydrant-alert.svg","material-fire-hydrant-off":"material/fire-hydrant-off.svg","material-fire-hydrant":"material/fire-hydrant.svg","material-fire-off":"material/fire-off.svg","material-fire-truck":"material/fire-truck.svg","material-fire":"material/fire.svg","material-firebase":"material/firebase.svg","material-firefox":"material/firefox.svg","material-fireplace-off":"material/fireplace-off.svg","material-fireplace":"material/fireplace.svg","material-firewire":"material/firewire.svg","material-firework-off":"material/firework-off.svg","material-firework":"material/firework.svg","material-fish-off":"material/fish-off.svg","material-fish":"material/fish.svg","material-fishbowl-outline":"material/fishbowl-outline.svg","material-fishbowl":"material/fishbowl.svg","material-fit-to-page-outline":"material/fit-to-page-outline.svg","material-fit-to-page":"material/fit-to-page.svg","material-fit-to-screen-outline":"material/fit-to-screen-outline.svg","material-fit-to-screen":"material/fit-to-screen.svg","material-flag-checkered":"material/flag-checkered.svg","material-flag-minus-outline":"material/flag-minus-outline.svg","material-flag-minus":"material/flag-minus.svg","material-flag-off-outline":"material/flag-off-outline.svg","material-flag-off":"material/flag-off.svg","material-flag-outline":"material/flag-outline.svg","material-flag-plus-outline":"material/flag-plus-outline.svg","material-flag-plus":"material/flag-plus.svg","material-flag-remove-outline":"material/flag-remove-outline.svg","material-flag-remove":"material/flag-remove.svg","material-flag-triangle":"material/flag-triangle.svg","material-flag-variant-minus-outline":"material/flag-variant-minus-outline.svg","material-flag-variant-minus":"material/flag-variant-minus.svg","material-flag-variant-off-outline":"material/flag-variant-off-outline.svg","material-flag-variant-off":"material/flag-variant-off.svg","material-flag-variant-outline":"material/flag-variant-outline.svg","material-flag-variant-plus-outline":"material/flag-variant-plus-outline.svg","material-flag-variant-plus":"material/flag-variant-plus.svg","material-flag-variant-remove-outline":"material/flag-variant-remove-outline.svg","material-flag-variant-remove":"material/flag-variant-remove.svg","material-flag-variant":"material/flag-variant.svg","material-flag":"material/flag.svg","material-flare":"material/flare.svg","material-flash-alert-outline":"material/flash-alert-outline.svg","material-flash-alert":"material/flash-alert.svg","material-flash-auto":"material/flash-auto.svg","material-flash-off-outline":"material/flash-off-outline.svg","material-flash-off":"material/flash-off.svg","material-flash-outline":"material/flash-outline.svg","material-flash-red-eye":"material/flash-red-eye.svg","material-flash-triangle-outline":"material/flash-triangle-outline.svg","material-flash-triangle":"material/flash-triangle.svg","material-flash":"material/flash.svg","material-flashlight-off":"material/flashlight-off.svg","material-flashlight":"material/flashlight.svg","material-flask-empty-minus-outline":"material/flask-empty-minus-outline.svg","material-flask-empty-minus":"material/flask-empty-minus.svg","material-flask-empty-off-outline":"material/flask-empty-off-outline.svg","material-flask-empty-off":"material/flask-empty-off.svg","material-flask-empty-outline":"material/flask-empty-outline.svg","material-flask-empty-plus-outline":"material/flask-empty-plus-outline.svg","material-flask-empty-plus":"material/flask-empty-plus.svg","material-flask-empty-remove-outline":"material/flask-empty-remove-outline.svg","material-flask-empty-remove":"material/flask-empty-remove.svg","material-flask-empty":"material/flask-empty.svg","material-flask-minus-outline":"material/flask-minus-outline.svg","material-flask-minus":"material/flask-minus.svg","material-flask-off-outline":"material/flask-off-outline.svg","material-flask-off":"material/flask-off.svg","material-flask-outline":"material/flask-outline.svg","material-flask-plus-outline":"material/flask-plus-outline.svg","material-flask-plus":"material/flask-plus.svg","material-flask-remove-outline":"material/flask-remove-outline.svg","material-flask-remove":"material/flask-remove.svg","material-flask-round-bottom-empty-outline":"material/flask-round-bottom-empty-outline.svg","material-flask-round-bottom-empty":"material/flask-round-bottom-empty.svg","material-flask-round-bottom-outline":"material/flask-round-bottom-outline.svg","material-flask-round-bottom":"material/flask-round-bottom.svg","material-flask":"material/flask.svg","material-fleur-de-lis":"material/fleur-de-lis.svg","material-flip-horizontal":"material/flip-horizontal.svg","material-flip-to-back":"material/flip-to-back.svg","material-flip-to-front":"material/flip-to-front.svg","material-flip-vertical":"material/flip-vertical.svg","material-floor-lamp-dual-outline":"material/floor-lamp-dual-outline.svg","material-floor-lamp-dual":"material/floor-lamp-dual.svg","material-floor-lamp-outline":"material/floor-lamp-outline.svg","material-floor-lamp-torchiere-outline":"material/floor-lamp-torchiere-outline.svg","material-floor-lamp-torchiere-variant-outline":"material/floor-lamp-torchiere-variant-outline.svg","material-floor-lamp-torchiere-variant":"material/floor-lamp-torchiere-variant.svg","material-floor-lamp-torchiere":"material/floor-lamp-torchiere.svg","material-floor-lamp":"material/floor-lamp.svg","material-floor-plan":"material/floor-plan.svg","material-floppy-variant":"material/floppy-variant.svg","material-floppy":"material/floppy.svg","material-flower-outline":"material/flower-outline.svg","material-flower-pollen-outline":"material/flower-pollen-outline.svg","material-flower-pollen":"material/flower-pollen.svg","material-flower-poppy":"material/flower-poppy.svg","material-flower-tulip-outline":"material/flower-tulip-outline.svg","material-flower-tulip":"material/flower-tulip.svg","material-flower":"material/flower.svg","material-focus-auto":"material/focus-auto.svg","material-focus-field-horizontal":"material/focus-field-horizontal.svg","material-focus-field-vertical":"material/focus-field-vertical.svg","material-focus-field":"material/focus-field.svg","material-folder-account-outline":"material/folder-account-outline.svg","material-folder-account":"material/folder-account.svg","material-folder-alert-outline":"material/folder-alert-outline.svg","material-folder-alert":"material/folder-alert.svg","material-folder-arrow-down-outline":"material/folder-arrow-down-outline.svg","material-folder-arrow-down":"material/folder-arrow-down.svg","material-folder-arrow-left-outline":"material/folder-arrow-left-outline.svg","material-folder-arrow-left-right-outline":"material/folder-arrow-left-right-outline.svg","material-folder-arrow-left-right":"material/folder-arrow-left-right.svg","material-folder-arrow-left":"material/folder-arrow-left.svg","material-folder-arrow-right-outline":"material/folder-arrow-right-outline.svg","material-folder-arrow-right":"material/folder-arrow-right.svg","material-folder-arrow-up-down-outline":"material/folder-arrow-up-down-outline.svg","material-folder-arrow-up-down":"material/folder-arrow-up-down.svg","material-folder-arrow-up-outline":"material/folder-arrow-up-outline.svg","material-folder-arrow-up":"material/folder-arrow-up.svg","material-folder-cancel-outline":"material/folder-cancel-outline.svg","material-folder-cancel":"material/folder-cancel.svg","material-folder-check-outline":"material/folder-check-outline.svg","material-folder-check":"material/folder-check.svg","material-folder-clock-outline":"material/folder-clock-outline.svg","material-folder-clock":"material/folder-clock.svg","material-folder-cog-outline":"material/folder-cog-outline.svg","material-folder-cog":"material/folder-cog.svg","material-folder-download-outline":"material/folder-download-outline.svg","material-folder-download":"material/folder-download.svg","material-folder-edit-outline":"material/folder-edit-outline.svg","material-folder-edit":"material/folder-edit.svg","material-folder-eye-outline":"material/folder-eye-outline.svg","material-folder-eye":"material/folder-eye.svg","material-folder-file-outline":"material/folder-file-outline.svg","material-folder-file":"material/folder-file.svg","material-folder-google-drive":"material/folder-google-drive.svg","material-folder-heart-outline":"material/folder-heart-outline.svg","material-folder-heart":"material/folder-heart.svg","material-folder-hidden":"material/folder-hidden.svg","material-folder-home-outline":"material/folder-home-outline.svg","material-folder-home":"material/folder-home.svg","material-folder-image":"material/folder-image.svg","material-folder-information-outline":"material/folder-information-outline.svg","material-folder-information":"material/folder-information.svg","material-folder-key-network-outline":"material/folder-key-network-outline.svg","material-folder-key-network":"material/folder-key-network.svg","material-folder-key-outline":"material/folder-key-outline.svg","material-folder-key":"material/folder-key.svg","material-folder-lock-open-outline":"material/folder-lock-open-outline.svg","material-folder-lock-open":"material/folder-lock-open.svg","material-folder-lock-outline":"material/folder-lock-outline.svg","material-folder-lock":"material/folder-lock.svg","material-folder-marker-outline":"material/folder-marker-outline.svg","material-folder-marker":"material/folder-marker.svg","material-folder-minus-outline":"material/folder-minus-outline.svg","material-folder-minus":"material/folder-minus.svg","material-folder-move-outline":"material/folder-move-outline.svg","material-folder-move":"material/folder-move.svg","material-folder-multiple-image":"material/folder-multiple-image.svg","material-folder-multiple-outline":"material/folder-multiple-outline.svg","material-folder-multiple-plus-outline":"material/folder-multiple-plus-outline.svg","material-folder-multiple-plus":"material/folder-multiple-plus.svg","material-folder-multiple":"material/folder-multiple.svg","material-folder-music-outline":"material/folder-music-outline.svg","material-folder-music":"material/folder-music.svg","material-folder-network-outline":"material/folder-network-outline.svg","material-folder-network":"material/folder-network.svg","material-folder-off-outline":"material/folder-off-outline.svg","material-folder-off":"material/folder-off.svg","material-folder-open-outline":"material/folder-open-outline.svg","material-folder-open":"material/folder-open.svg","material-folder-outline":"material/folder-outline.svg","material-folder-play-outline":"material/folder-play-outline.svg","material-folder-play":"material/folder-play.svg","material-folder-plus-outline":"material/folder-plus-outline.svg","material-folder-plus":"material/folder-plus.svg","material-folder-pound-outline":"material/folder-pound-outline.svg","material-folder-pound":"material/folder-pound.svg","material-folder-question-outline":"material/folder-question-outline.svg","material-folder-question":"material/folder-question.svg","material-folder-refresh-outline":"material/folder-refresh-outline.svg","material-folder-refresh":"material/folder-refresh.svg","material-folder-remove-outline":"material/folder-remove-outline.svg","material-folder-remove":"material/folder-remove.svg","material-folder-search-outline":"material/folder-search-outline.svg","material-folder-search":"material/folder-search.svg","material-folder-settings-outline":"material/folder-settings-outline.svg","material-folder-settings":"material/folder-settings.svg","material-folder-star-multiple-outline":"material/folder-star-multiple-outline.svg","material-folder-star-multiple":"material/folder-star-multiple.svg","material-folder-star-outline":"material/folder-star-outline.svg","material-folder-star":"material/folder-star.svg","material-folder-swap-outline":"material/folder-swap-outline.svg","material-folder-swap":"material/folder-swap.svg","material-folder-sync-outline":"material/folder-sync-outline.svg","material-folder-sync":"material/folder-sync.svg","material-folder-table-outline":"material/folder-table-outline.svg","material-folder-table":"material/folder-table.svg","material-folder-text-outline":"material/folder-text-outline.svg","material-folder-text":"material/folder-text.svg","material-folder-upload-outline":"material/folder-upload-outline.svg","material-folder-upload":"material/folder-upload.svg","material-folder-wrench-outline":"material/folder-wrench-outline.svg","material-folder-wrench":"material/folder-wrench.svg","material-folder-zip-outline":"material/folder-zip-outline.svg","material-folder-zip":"material/folder-zip.svg","material-folder":"material/folder.svg","material-font-awesome":"material/font-awesome.svg","material-food-apple-outline":"material/food-apple-outline.svg","material-food-apple":"material/food-apple.svg","material-food-croissant":"material/food-croissant.svg","material-food-drumstick-off-outline":"material/food-drumstick-off-outline.svg","material-food-drumstick-off":"material/food-drumstick-off.svg","material-food-drumstick-outline":"material/food-drumstick-outline.svg","material-food-drumstick":"material/food-drumstick.svg","material-food-fork-drink":"material/food-fork-drink.svg","material-food-halal":"material/food-halal.svg","material-food-hot-dog":"material/food-hot-dog.svg","material-food-kosher":"material/food-kosher.svg","material-food-off-outline":"material/food-off-outline.svg","material-food-off":"material/food-off.svg","material-food-outline":"material/food-outline.svg","material-food-steak-off":"material/food-steak-off.svg","material-food-steak":"material/food-steak.svg","material-food-takeout-box-outline":"material/food-takeout-box-outline.svg","material-food-takeout-box":"material/food-takeout-box.svg","material-food-turkey":"material/food-turkey.svg","material-food-variant-off":"material/food-variant-off.svg","material-food-variant":"material/food-variant.svg","material-food":"material/food.svg","material-foot-print":"material/foot-print.svg","material-football-australian":"material/football-australian.svg","material-football-helmet":"material/football-helmet.svg","material-football":"material/football.svg","material-forest-outline":"material/forest-outline.svg","material-forest":"material/forest.svg","material-forklift":"material/forklift.svg","material-form-dropdown":"material/form-dropdown.svg","material-form-select":"material/form-select.svg","material-form-textarea":"material/form-textarea.svg","material-form-textbox-lock":"material/form-textbox-lock.svg","material-form-textbox-password":"material/form-textbox-password.svg","material-form-textbox":"material/form-textbox.svg","material-format-align-bottom":"material/format-align-bottom.svg","material-format-align-center":"material/format-align-center.svg","material-format-align-justify":"material/format-align-justify.svg","material-format-align-left":"material/format-align-left.svg","material-format-align-middle":"material/format-align-middle.svg","material-format-align-right":"material/format-align-right.svg","material-format-align-top":"material/format-align-top.svg","material-format-annotation-minus":"material/format-annotation-minus.svg","material-format-annotation-plus":"material/format-annotation-plus.svg","material-format-bold":"material/format-bold.svg","material-format-clear":"material/format-clear.svg","material-format-color-fill":"material/format-color-fill.svg","material-format-color-highlight":"material/format-color-highlight.svg","material-format-color-marker-cancel":"material/format-color-marker-cancel.svg","material-format-color-text":"material/format-color-text.svg","material-format-columns":"material/format-columns.svg","material-format-float-center":"material/format-float-center.svg","material-format-float-left":"material/format-float-left.svg","material-format-float-none":"material/format-float-none.svg","material-format-float-right":"material/format-float-right.svg","material-format-font-size-decrease":"material/format-font-size-decrease.svg","material-format-font-size-increase":"material/format-font-size-increase.svg","material-format-font":"material/format-font.svg","material-format-header-1":"material/format-header-1.svg","material-format-header-2":"material/format-header-2.svg","material-format-header-3":"material/format-header-3.svg","material-format-header-4":"material/format-header-4.svg","material-format-header-5":"material/format-header-5.svg","material-format-header-6":"material/format-header-6.svg","material-format-header-decrease":"material/format-header-decrease.svg","material-format-header-equal":"material/format-header-equal.svg","material-format-header-increase":"material/format-header-increase.svg","material-format-header-pound":"material/format-header-pound.svg","material-format-horizontal-align-center":"material/format-horizontal-align-center.svg","material-format-horizontal-align-left":"material/format-horizontal-align-left.svg","material-format-horizontal-align-right":"material/format-horizontal-align-right.svg","material-format-indent-decrease":"material/format-indent-decrease.svg","material-format-indent-increase":"material/format-indent-increase.svg","material-format-italic":"material/format-italic.svg","material-format-letter-case-lower":"material/format-letter-case-lower.svg","material-format-letter-case-upper":"material/format-letter-case-upper.svg","material-format-letter-case":"material/format-letter-case.svg","material-format-letter-ends-with":"material/format-letter-ends-with.svg","material-format-letter-matches":"material/format-letter-matches.svg","material-format-letter-spacing-variant":"material/format-letter-spacing-variant.svg","material-format-letter-spacing":"material/format-letter-spacing.svg","material-format-letter-starts-with":"material/format-letter-starts-with.svg","material-format-line-height":"material/format-line-height.svg","material-format-line-spacing":"material/format-line-spacing.svg","material-format-line-style":"material/format-line-style.svg","material-format-line-weight":"material/format-line-weight.svg","material-format-list-bulleted-square":"material/format-list-bulleted-square.svg","material-format-list-bulleted-triangle":"material/format-list-bulleted-triangle.svg","material-format-list-bulleted-type":"material/format-list-bulleted-type.svg","material-format-list-bulleted":"material/format-list-bulleted.svg","material-format-list-checkbox":"material/format-list-checkbox.svg","material-format-list-checks":"material/format-list-checks.svg","material-format-list-group-plus":"material/format-list-group-plus.svg","material-format-list-group":"material/format-list-group.svg","material-format-list-numbered-rtl":"material/format-list-numbered-rtl.svg","material-format-list-numbered":"material/format-list-numbered.svg","material-format-list-text":"material/format-list-text.svg","material-format-overline":"material/format-overline.svg","material-format-page-break":"material/format-page-break.svg","material-format-page-split":"material/format-page-split.svg","material-format-paint":"material/format-paint.svg","material-format-paragraph-spacing":"material/format-paragraph-spacing.svg","material-format-paragraph":"material/format-paragraph.svg","material-format-pilcrow-arrow-left":"material/format-pilcrow-arrow-left.svg","material-format-pilcrow-arrow-right":"material/format-pilcrow-arrow-right.svg","material-format-pilcrow":"material/format-pilcrow.svg","material-format-quote-close-outline":"material/format-quote-close-outline.svg","material-format-quote-close":"material/format-quote-close.svg","material-format-quote-open-outline":"material/format-quote-open-outline.svg","material-format-quote-open":"material/format-quote-open.svg","material-format-rotate-90":"material/format-rotate-90.svg","material-format-section":"material/format-section.svg","material-format-size":"material/format-size.svg","material-format-strikethrough-variant":"material/format-strikethrough-variant.svg","material-format-strikethrough":"material/format-strikethrough.svg","material-format-subscript":"material/format-subscript.svg","material-format-superscript":"material/format-superscript.svg","material-format-text-rotation-angle-down":"material/format-text-rotation-angle-down.svg","material-format-text-rotation-angle-up":"material/format-text-rotation-angle-up.svg","material-format-text-rotation-down-vertical":"material/format-text-rotation-down-vertical.svg","material-format-text-rotation-down":"material/format-text-rotation-down.svg","material-format-text-rotation-none":"material/format-text-rotation-none.svg","material-format-text-rotation-up":"material/format-text-rotation-up.svg","material-format-text-rotation-vertical":"material/format-text-rotation-vertical.svg","material-format-text-variant-outline":"material/format-text-variant-outline.svg","material-format-text-variant":"material/format-text-variant.svg","material-format-text-wrapping-clip":"material/format-text-wrapping-clip.svg","material-format-text-wrapping-overflow":"material/format-text-wrapping-overflow.svg","material-format-text-wrapping-wrap":"material/format-text-wrapping-wrap.svg","material-format-text":"material/format-text.svg","material-format-textbox":"material/format-textbox.svg","material-format-title":"material/format-title.svg","material-format-underline-wavy":"material/format-underline-wavy.svg","material-format-underline":"material/format-underline.svg","material-format-vertical-align-bottom":"material/format-vertical-align-bottom.svg","material-format-vertical-align-center":"material/format-vertical-align-center.svg","material-format-vertical-align-top":"material/format-vertical-align-top.svg","material-format-wrap-inline":"material/format-wrap-inline.svg","material-format-wrap-square":"material/format-wrap-square.svg","material-format-wrap-tight":"material/format-wrap-tight.svg","material-format-wrap-top-bottom":"material/format-wrap-top-bottom.svg","material-forum-minus-outline":"material/forum-minus-outline.svg","material-forum-minus":"material/forum-minus.svg","material-forum-outline":"material/forum-outline.svg","material-forum-plus-outline":"material/forum-plus-outline.svg","material-forum-plus":"material/forum-plus.svg","material-forum-remove-outline":"material/forum-remove-outline.svg","material-forum-remove":"material/forum-remove.svg","material-forum":"material/forum.svg","material-forward":"material/forward.svg","material-forwardburger":"material/forwardburger.svg","material-fountain-pen-tip":"material/fountain-pen-tip.svg","material-fountain-pen":"material/fountain-pen.svg","material-fountain":"material/fountain.svg","material-fraction-one-half":"material/fraction-one-half.svg","material-freebsd":"material/freebsd.svg","material-french-fries":"material/french-fries.svg","material-frequently-asked-questions":"material/frequently-asked-questions.svg","material-fridge-alert-outline":"material/fridge-alert-outline.svg","material-fridge-alert":"material/fridge-alert.svg","material-fridge-bottom":"material/fridge-bottom.svg","material-fridge-industrial-alert-outline":"material/fridge-industrial-alert-outline.svg","material-fridge-industrial-alert":"material/fridge-industrial-alert.svg","material-fridge-industrial-off-outline":"material/fridge-industrial-off-outline.svg","material-fridge-industrial-off":"material/fridge-industrial-off.svg","material-fridge-industrial-outline":"material/fridge-industrial-outline.svg","material-fridge-industrial":"material/fridge-industrial.svg","material-fridge-off-outline":"material/fridge-off-outline.svg","material-fridge-off":"material/fridge-off.svg","material-fridge-outline":"material/fridge-outline.svg","material-fridge-top":"material/fridge-top.svg","material-fridge-variant-alert-outline":"material/fridge-variant-alert-outline.svg","material-fridge-variant-alert":"material/fridge-variant-alert.svg","material-fridge-variant-off-outline":"material/fridge-variant-off-outline.svg","material-fridge-variant-off":"material/fridge-variant-off.svg","material-fridge-variant-outline":"material/fridge-variant-outline.svg","material-fridge-variant":"material/fridge-variant.svg","material-fridge":"material/fridge.svg","material-fruit-cherries-off":"material/fruit-cherries-off.svg","material-fruit-cherries":"material/fruit-cherries.svg","material-fruit-citrus-off":"material/fruit-citrus-off.svg","material-fruit-citrus":"material/fruit-citrus.svg","material-fruit-grapes-outline":"material/fruit-grapes-outline.svg","material-fruit-grapes":"material/fruit-grapes.svg","material-fruit-pear":"material/fruit-pear.svg","material-fruit-pineapple":"material/fruit-pineapple.svg","material-fruit-watermelon":"material/fruit-watermelon.svg","material-fuel-cell":"material/fuel-cell.svg","material-fuel":"material/fuel.svg","material-fullscreen-exit":"material/fullscreen-exit.svg","material-fullscreen":"material/fullscreen.svg","material-function-variant":"material/function-variant.svg","material-function":"material/function.svg","material-furigana-horizontal":"material/furigana-horizontal.svg","material-furigana-vertical":"material/furigana-vertical.svg","material-fuse-alert":"material/fuse-alert.svg","material-fuse-blade":"material/fuse-blade.svg","material-fuse-off":"material/fuse-off.svg","material-fuse":"material/fuse.svg","material-gamepad-circle-down":"material/gamepad-circle-down.svg","material-gamepad-circle-left":"material/gamepad-circle-left.svg","material-gamepad-circle-outline":"material/gamepad-circle-outline.svg","material-gamepad-circle-right":"material/gamepad-circle-right.svg","material-gamepad-circle-up":"material/gamepad-circle-up.svg","material-gamepad-circle":"material/gamepad-circle.svg","material-gamepad-down":"material/gamepad-down.svg","material-gamepad-left":"material/gamepad-left.svg","material-gamepad-outline":"material/gamepad-outline.svg","material-gamepad-right":"material/gamepad-right.svg","material-gamepad-round-down":"material/gamepad-round-down.svg","material-gamepad-round-left":"material/gamepad-round-left.svg","material-gamepad-round-outline":"material/gamepad-round-outline.svg","material-gamepad-round-right":"material/gamepad-round-right.svg","material-gamepad-round-up":"material/gamepad-round-up.svg","material-gamepad-round":"material/gamepad-round.svg","material-gamepad-square-outline":"material/gamepad-square-outline.svg","material-gamepad-square":"material/gamepad-square.svg","material-gamepad-up":"material/gamepad-up.svg","material-gamepad-variant-outline":"material/gamepad-variant-outline.svg","material-gamepad-variant":"material/gamepad-variant.svg","material-gamepad":"material/gamepad.svg","material-gamma":"material/gamma.svg","material-gantry-crane":"material/gantry-crane.svg","material-garage-alert-variant":"material/garage-alert-variant.svg","material-garage-alert":"material/garage-alert.svg","material-garage-lock":"material/garage-lock.svg","material-garage-open-variant":"material/garage-open-variant.svg","material-garage-open":"material/garage-open.svg","material-garage-variant-lock":"material/garage-variant-lock.svg","material-garage-variant":"material/garage-variant.svg","material-garage":"material/garage.svg","material-gas-burner":"material/gas-burner.svg","material-gas-cylinder":"material/gas-cylinder.svg","material-gas-station-off-outline":"material/gas-station-off-outline.svg","material-gas-station-off":"material/gas-station-off.svg","material-gas-station-outline":"material/gas-station-outline.svg","material-gas-station":"material/gas-station.svg","material-gate-alert":"material/gate-alert.svg","material-gate-and":"material/gate-and.svg","material-gate-arrow-left":"material/gate-arrow-left.svg","material-gate-arrow-right":"material/gate-arrow-right.svg","material-gate-buffer":"material/gate-buffer.svg","material-gate-nand":"material/gate-nand.svg","material-gate-nor":"material/gate-nor.svg","material-gate-not":"material/gate-not.svg","material-gate-open":"material/gate-open.svg","material-gate-or":"material/gate-or.svg","material-gate-xnor":"material/gate-xnor.svg","material-gate-xor":"material/gate-xor.svg","material-gate":"material/gate.svg","material-gatsby":"material/gatsby.svg","material-gauge-empty":"material/gauge-empty.svg","material-gauge-full":"material/gauge-full.svg","material-gauge-low":"material/gauge-low.svg","material-gauge":"material/gauge.svg","material-gavel":"material/gavel.svg","material-gender-female":"material/gender-female.svg","material-gender-male-female-variant":"material/gender-male-female-variant.svg","material-gender-male-female":"material/gender-male-female.svg","material-gender-male":"material/gender-male.svg","material-gender-non-binary":"material/gender-non-binary.svg","material-gender-transgender":"material/gender-transgender.svg","material-gentoo":"material/gentoo.svg","material-gesture-double-tap":"material/gesture-double-tap.svg","material-gesture-pinch":"material/gesture-pinch.svg","material-gesture-spread":"material/gesture-spread.svg","material-gesture-swipe-down":"material/gesture-swipe-down.svg","material-gesture-swipe-horizontal":"material/gesture-swipe-horizontal.svg","material-gesture-swipe-left":"material/gesture-swipe-left.svg","material-gesture-swipe-right":"material/gesture-swipe-right.svg","material-gesture-swipe-up":"material/gesture-swipe-up.svg","material-gesture-swipe-vertical":"material/gesture-swipe-vertical.svg","material-gesture-swipe":"material/gesture-swipe.svg","material-gesture-tap-box":"material/gesture-tap-box.svg","material-gesture-tap-button":"material/gesture-tap-button.svg","material-gesture-tap-hold":"material/gesture-tap-hold.svg","material-gesture-tap":"material/gesture-tap.svg","material-gesture-two-double-tap":"material/gesture-two-double-tap.svg","material-gesture-two-tap":"material/gesture-two-tap.svg","material-gesture":"material/gesture.svg","material-ghost-off-outline":"material/ghost-off-outline.svg","material-ghost-off":"material/ghost-off.svg","material-ghost-outline":"material/ghost-outline.svg","material-ghost":"material/ghost.svg","material-gift-off-outline":"material/gift-off-outline.svg","material-gift-off":"material/gift-off.svg","material-gift-open-outline":"material/gift-open-outline.svg","material-gift-open":"material/gift-open.svg","material-gift-outline":"material/gift-outline.svg","material-gift":"material/gift.svg","material-git":"material/git.svg","material-github":"material/github.svg","material-gitlab":"material/gitlab.svg","material-glass-cocktail-off":"material/glass-cocktail-off.svg","material-glass-cocktail":"material/glass-cocktail.svg","material-glass-flute":"material/glass-flute.svg","material-glass-fragile":"material/glass-fragile.svg","material-glass-mug-off":"material/glass-mug-off.svg","material-glass-mug-variant-off":"material/glass-mug-variant-off.svg","material-glass-mug-variant":"material/glass-mug-variant.svg","material-glass-mug":"material/glass-mug.svg","material-glass-pint-outline":"material/glass-pint-outline.svg","material-glass-stange":"material/glass-stange.svg","material-glass-tulip":"material/glass-tulip.svg","material-glass-wine":"material/glass-wine.svg","material-glasses":"material/glasses.svg","material-globe-light-outline":"material/globe-light-outline.svg","material-globe-light":"material/globe-light.svg","material-globe-model":"material/globe-model.svg","material-gmail":"material/gmail.svg","material-gnome":"material/gnome.svg","material-go-kart-track":"material/go-kart-track.svg","material-go-kart":"material/go-kart.svg","material-gog":"material/gog.svg","material-gold":"material/gold.svg","material-golf-cart":"material/golf-cart.svg","material-golf-tee":"material/golf-tee.svg","material-golf":"material/golf.svg","material-gondola":"material/gondola.svg","material-goodreads":"material/goodreads.svg","material-google-ads":"material/google-ads.svg","material-google-analytics":"material/google-analytics.svg","material-google-assistant":"material/google-assistant.svg","material-google-cardboard":"material/google-cardboard.svg","material-google-chrome":"material/google-chrome.svg","material-google-circles-communities":"material/google-circles-communities.svg","material-google-circles-extended":"material/google-circles-extended.svg","material-google-circles-group":"material/google-circles-group.svg","material-google-circles":"material/google-circles.svg","material-google-classroom":"material/google-classroom.svg","material-google-cloud":"material/google-cloud.svg","material-google-downasaur":"material/google-downasaur.svg","material-google-drive":"material/google-drive.svg","material-google-earth":"material/google-earth.svg","material-google-fit":"material/google-fit.svg","material-google-glass":"material/google-glass.svg","material-google-hangouts":"material/google-hangouts.svg","material-google-keep":"material/google-keep.svg","material-google-lens":"material/google-lens.svg","material-google-maps":"material/google-maps.svg","material-google-my-business":"material/google-my-business.svg","material-google-nearby":"material/google-nearby.svg","material-google-play":"material/google-play.svg","material-google-plus":"material/google-plus.svg","material-google-podcast":"material/google-podcast.svg","material-google-spreadsheet":"material/google-spreadsheet.svg","material-google-street-view":"material/google-street-view.svg","material-google-translate":"material/google-translate.svg","material-google":"material/google.svg","material-gradient-horizontal":"material/gradient-horizontal.svg","material-gradient-vertical":"material/gradient-vertical.svg","material-grain":"material/grain.svg","material-graph-outline":"material/graph-outline.svg","material-graph":"material/graph.svg","material-graphql":"material/graphql.svg","material-grass":"material/grass.svg","material-grave-stone":"material/grave-stone.svg","material-grease-pencil":"material/grease-pencil.svg","material-greater-than-or-equal":"material/greater-than-or-equal.svg","material-greater-than":"material/greater-than.svg","material-greenhouse":"material/greenhouse.svg","material-grid-large":"material/grid-large.svg","material-grid-off":"material/grid-off.svg","material-grid":"material/grid.svg","material-grill-outline":"material/grill-outline.svg","material-grill":"material/grill.svg","material-group":"material/group.svg","material-guitar-acoustic":"material/guitar-acoustic.svg","material-guitar-electric":"material/guitar-electric.svg","material-guitar-pick-outline":"material/guitar-pick-outline.svg","material-guitar-pick":"material/guitar-pick.svg","material-guy-fawkes-mask":"material/guy-fawkes-mask.svg","material-gymnastics":"material/gymnastics.svg","material-hail":"material/hail.svg","material-hair-dryer-outline":"material/hair-dryer-outline.svg","material-hair-dryer":"material/hair-dryer.svg","material-halloween":"material/halloween.svg","material-hamburger-check":"material/hamburger-check.svg","material-hamburger-minus":"material/hamburger-minus.svg","material-hamburger-off":"material/hamburger-off.svg","material-hamburger-plus":"material/hamburger-plus.svg","material-hamburger-remove":"material/hamburger-remove.svg","material-hamburger":"material/hamburger.svg","material-hammer-screwdriver":"material/hammer-screwdriver.svg","material-hammer-sickle":"material/hammer-sickle.svg","material-hammer-wrench":"material/hammer-wrench.svg","material-hammer":"material/hammer.svg","material-hand-back-left-off-outline":"material/hand-back-left-off-outline.svg","material-hand-back-left-off":"material/hand-back-left-off.svg","material-hand-back-left-outline":"material/hand-back-left-outline.svg","material-hand-back-left":"material/hand-back-left.svg","material-hand-back-right-off-outline":"material/hand-back-right-off-outline.svg","material-hand-back-right-off":"material/hand-back-right-off.svg","material-hand-back-right-outline":"material/hand-back-right-outline.svg","material-hand-back-right":"material/hand-back-right.svg","material-hand-clap-off":"material/hand-clap-off.svg","material-hand-clap":"material/hand-clap.svg","material-hand-coin-outline":"material/hand-coin-outline.svg","material-hand-coin":"material/hand-coin.svg","material-hand-cycle":"material/hand-cycle.svg","material-hand-extended-outline":"material/hand-extended-outline.svg","material-hand-extended":"material/hand-extended.svg","material-hand-front-left-outline":"material/hand-front-left-outline.svg","material-hand-front-left":"material/hand-front-left.svg","material-hand-front-right-outline":"material/hand-front-right-outline.svg","material-hand-front-right":"material/hand-front-right.svg","material-hand-heart-outline":"material/hand-heart-outline.svg","material-hand-heart":"material/hand-heart.svg","material-hand-okay":"material/hand-okay.svg","material-hand-peace-variant":"material/hand-peace-variant.svg","material-hand-peace":"material/hand-peace.svg","material-hand-pointing-down":"material/hand-pointing-down.svg","material-hand-pointing-left":"material/hand-pointing-left.svg","material-hand-pointing-right":"material/hand-pointing-right.svg","material-hand-pointing-up":"material/hand-pointing-up.svg","material-hand-saw":"material/hand-saw.svg","material-hand-wash-outline":"material/hand-wash-outline.svg","material-hand-wash":"material/hand-wash.svg","material-hand-water":"material/hand-water.svg","material-hand-wave-outline":"material/hand-wave-outline.svg","material-hand-wave":"material/hand-wave.svg","material-handball":"material/handball.svg","material-handcuffs":"material/handcuffs.svg","material-hands-pray":"material/hands-pray.svg","material-handshake-outline":"material/handshake-outline.svg","material-handshake":"material/handshake.svg","material-hanger":"material/hanger.svg","material-hard-hat":"material/hard-hat.svg","material-harddisk-plus":"material/harddisk-plus.svg","material-harddisk-remove":"material/harddisk-remove.svg","material-harddisk":"material/harddisk.svg","material-hat-fedora":"material/hat-fedora.svg","material-hazard-lights":"material/hazard-lights.svg","material-hdmi-port":"material/hdmi-port.svg","material-hdr-off":"material/hdr-off.svg","material-hdr":"material/hdr.svg","material-head-alert-outline":"material/head-alert-outline.svg","material-head-alert":"material/head-alert.svg","material-head-check-outline":"material/head-check-outline.svg","material-head-check":"material/head-check.svg","material-head-cog-outline":"material/head-cog-outline.svg","material-head-cog":"material/head-cog.svg","material-head-dots-horizontal-outline":"material/head-dots-horizontal-outline.svg","material-head-dots-horizontal":"material/head-dots-horizontal.svg","material-head-flash-outline":"material/head-flash-outline.svg","material-head-flash":"material/head-flash.svg","material-head-heart-outline":"material/head-heart-outline.svg","material-head-heart":"material/head-heart.svg","material-head-lightbulb-outline":"material/head-lightbulb-outline.svg","material-head-lightbulb":"material/head-lightbulb.svg","material-head-minus-outline":"material/head-minus-outline.svg","material-head-minus":"material/head-minus.svg","material-head-outline":"material/head-outline.svg","material-head-plus-outline":"material/head-plus-outline.svg","material-head-plus":"material/head-plus.svg","material-head-question-outline":"material/head-question-outline.svg","material-head-question":"material/head-question.svg","material-head-remove-outline":"material/head-remove-outline.svg","material-head-remove":"material/head-remove.svg","material-head-snowflake-outline":"material/head-snowflake-outline.svg","material-head-snowflake":"material/head-snowflake.svg","material-head-sync-outline":"material/head-sync-outline.svg","material-head-sync":"material/head-sync.svg","material-head":"material/head.svg","material-headphones-bluetooth":"material/headphones-bluetooth.svg","material-headphones-box":"material/headphones-box.svg","material-headphones-off":"material/headphones-off.svg","material-headphones-settings":"material/headphones-settings.svg","material-headphones":"material/headphones.svg","material-headset-dock":"material/headset-dock.svg","material-headset-off":"material/headset-off.svg","material-headset":"material/headset.svg","material-heart-box-outline":"material/heart-box-outline.svg","material-heart-box":"material/heart-box.svg","material-heart-broken-outline":"material/heart-broken-outline.svg","material-heart-broken":"material/heart-broken.svg","material-heart-circle-outline":"material/heart-circle-outline.svg","material-heart-circle":"material/heart-circle.svg","material-heart-cog-outline":"material/heart-cog-outline.svg","material-heart-cog":"material/heart-cog.svg","material-heart-flash":"material/heart-flash.svg","material-heart-half-full":"material/heart-half-full.svg","material-heart-half-outline":"material/heart-half-outline.svg","material-heart-half":"material/heart-half.svg","material-heart-minus-outline":"material/heart-minus-outline.svg","material-heart-minus":"material/heart-minus.svg","material-heart-multiple-outline":"material/heart-multiple-outline.svg","material-heart-multiple":"material/heart-multiple.svg","material-heart-off-outline":"material/heart-off-outline.svg","material-heart-off":"material/heart-off.svg","material-heart-outline":"material/heart-outline.svg","material-heart-plus-outline":"material/heart-plus-outline.svg","material-heart-plus":"material/heart-plus.svg","material-heart-pulse":"material/heart-pulse.svg","material-heart-remove-outline":"material/heart-remove-outline.svg","material-heart-remove":"material/heart-remove.svg","material-heart-settings-outline":"material/heart-settings-outline.svg","material-heart-settings":"material/heart-settings.svg","material-heart":"material/heart.svg","material-heat-pump-outline":"material/heat-pump-outline.svg","material-heat-pump":"material/heat-pump.svg","material-heat-wave":"material/heat-wave.svg","material-heating-coil":"material/heating-coil.svg","material-helicopter":"material/helicopter.svg","material-help-box-multiple-outline":"material/help-box-multiple-outline.svg","material-help-box-multiple":"material/help-box-multiple.svg","material-help-box-outline":"material/help-box-outline.svg","material-help-box":"material/help-box.svg","material-help-circle-outline":"material/help-circle-outline.svg","material-help-circle":"material/help-circle.svg","material-help-network-outline":"material/help-network-outline.svg","material-help-network":"material/help-network.svg","material-help-rhombus-outline":"material/help-rhombus-outline.svg","material-help-rhombus":"material/help-rhombus.svg","material-help":"material/help.svg","material-hexadecimal":"material/hexadecimal.svg","material-hexagon-multiple-outline":"material/hexagon-multiple-outline.svg","material-hexagon-multiple":"material/hexagon-multiple.svg","material-hexagon-outline":"material/hexagon-outline.svg","material-hexagon-slice-1":"material/hexagon-slice-1.svg","material-hexagon-slice-2":"material/hexagon-slice-2.svg","material-hexagon-slice-3":"material/hexagon-slice-3.svg","material-hexagon-slice-4":"material/hexagon-slice-4.svg","material-hexagon-slice-5":"material/hexagon-slice-5.svg","material-hexagon-slice-6":"material/hexagon-slice-6.svg","material-hexagon":"material/hexagon.svg","material-hexagram-outline":"material/hexagram-outline.svg","material-hexagram":"material/hexagram.svg","material-high-definition-box":"material/high-definition-box.svg","material-high-definition":"material/high-definition.svg","material-highway":"material/highway.svg","material-hiking":"material/hiking.svg","material-history":"material/history.svg","material-hockey-puck":"material/hockey-puck.svg","material-hockey-sticks":"material/hockey-sticks.svg","material-hololens":"material/hololens.svg","material-home-account":"material/home-account.svg","material-home-alert-outline":"material/home-alert-outline.svg","material-home-alert":"material/home-alert.svg","material-home-analytics":"material/home-analytics.svg","material-home-assistant":"material/home-assistant.svg","material-home-automation":"material/home-automation.svg","material-home-battery-outline":"material/home-battery-outline.svg","material-home-battery":"material/home-battery.svg","material-home-circle-outline":"material/home-circle-outline.svg","material-home-circle":"material/home-circle.svg","material-home-city-outline":"material/home-city-outline.svg","material-home-city":"material/home-city.svg","material-home-clock-outline":"material/home-clock-outline.svg","material-home-clock":"material/home-clock.svg","material-home-edit-outline":"material/home-edit-outline.svg","material-home-edit":"material/home-edit.svg","material-home-export-outline":"material/home-export-outline.svg","material-home-flood":"material/home-flood.svg","material-home-floor-0":"material/home-floor-0.svg","material-home-floor-1":"material/home-floor-1.svg","material-home-floor-2":"material/home-floor-2.svg","material-home-floor-3":"material/home-floor-3.svg","material-home-floor-a":"material/home-floor-a.svg","material-home-floor-b":"material/home-floor-b.svg","material-home-floor-g":"material/home-floor-g.svg","material-home-floor-l":"material/home-floor-l.svg","material-home-floor-negative-1":"material/home-floor-negative-1.svg","material-home-group-minus":"material/home-group-minus.svg","material-home-group-plus":"material/home-group-plus.svg","material-home-group-remove":"material/home-group-remove.svg","material-home-group":"material/home-group.svg","material-home-heart":"material/home-heart.svg","material-home-import-outline":"material/home-import-outline.svg","material-home-lightbulb-outline":"material/home-lightbulb-outline.svg","material-home-lightbulb":"material/home-lightbulb.svg","material-home-lightning-bolt-outline":"material/home-lightning-bolt-outline.svg","material-home-lightning-bolt":"material/home-lightning-bolt.svg","material-home-lock-open":"material/home-lock-open.svg","material-home-lock":"material/home-lock.svg","material-home-map-marker":"material/home-map-marker.svg","material-home-minus-outline":"material/home-minus-outline.svg","material-home-minus":"material/home-minus.svg","material-home-modern":"material/home-modern.svg","material-home-off-outline":"material/home-off-outline.svg","material-home-off":"material/home-off.svg","material-home-outline":"material/home-outline.svg","material-home-percent-outline":"material/home-percent-outline.svg","material-home-percent":"material/home-percent.svg","material-home-plus-outline":"material/home-plus-outline.svg","material-home-plus":"material/home-plus.svg","material-home-remove-outline":"material/home-remove-outline.svg","material-home-remove":"material/home-remove.svg","material-home-roof":"material/home-roof.svg","material-home-search-outline":"material/home-search-outline.svg","material-home-search":"material/home-search.svg","material-home-silo-outline":"material/home-silo-outline.svg","material-home-silo":"material/home-silo.svg","material-home-sound-in-outline":"material/home-sound-in-outline.svg","material-home-sound-in":"material/home-sound-in.svg","material-home-sound-out-outline":"material/home-sound-out-outline.svg","material-home-sound-out":"material/home-sound-out.svg","material-home-switch-outline":"material/home-switch-outline.svg","material-home-switch":"material/home-switch.svg","material-home-thermometer-outline":"material/home-thermometer-outline.svg","material-home-thermometer":"material/home-thermometer.svg","material-home-variant-outline":"material/home-variant-outline.svg","material-home-variant":"material/home-variant.svg","material-home":"material/home.svg","material-hook-off":"material/hook-off.svg","material-hook":"material/hook.svg","material-hoop-house":"material/hoop-house.svg","material-hops":"material/hops.svg","material-horizontal-rotate-clockwise":"material/horizontal-rotate-clockwise.svg","material-horizontal-rotate-counterclockwise":"material/horizontal-rotate-counterclockwise.svg","material-horse-human":"material/horse-human.svg","material-horse-variant-fast":"material/horse-variant-fast.svg","material-horse-variant":"material/horse-variant.svg","material-horse":"material/horse.svg","material-horseshoe":"material/horseshoe.svg","material-hospital-box-outline":"material/hospital-box-outline.svg","material-hospital-box":"material/hospital-box.svg","material-hospital-building":"material/hospital-building.svg","material-hospital-marker":"material/hospital-marker.svg","material-hospital":"material/hospital.svg","material-hot-tub":"material/hot-tub.svg","material-hours-24":"material/hours-24.svg","material-hubspot":"material/hubspot.svg","material-hulu":"material/hulu.svg","material-human-baby-changing-table":"material/human-baby-changing-table.svg","material-human-cane":"material/human-cane.svg","material-human-capacity-decrease":"material/human-capacity-decrease.svg","material-human-capacity-increase":"material/human-capacity-increase.svg","material-human-child":"material/human-child.svg","material-human-dolly":"material/human-dolly.svg","material-human-edit":"material/human-edit.svg","material-human-female-boy":"material/human-female-boy.svg","material-human-female-dance":"material/human-female-dance.svg","material-human-female-female":"material/human-female-female.svg","material-human-female-girl":"material/human-female-girl.svg","material-human-female":"material/human-female.svg","material-human-greeting-proximity":"material/human-greeting-proximity.svg","material-human-greeting-variant":"material/human-greeting-variant.svg","material-human-greeting":"material/human-greeting.svg","material-human-handsdown":"material/human-handsdown.svg","material-human-handsup":"material/human-handsup.svg","material-human-male-board-poll":"material/human-male-board-poll.svg","material-human-male-board":"material/human-male-board.svg","material-human-male-boy":"material/human-male-boy.svg","material-human-male-child":"material/human-male-child.svg","material-human-male-female-child":"material/human-male-female-child.svg","material-human-male-female":"material/human-male-female.svg","material-human-male-girl":"material/human-male-girl.svg","material-human-male-height-variant":"material/human-male-height-variant.svg","material-human-male-height":"material/human-male-height.svg","material-human-male-male":"material/human-male-male.svg","material-human-male":"material/human-male.svg","material-human-non-binary":"material/human-non-binary.svg","material-human-pregnant":"material/human-pregnant.svg","material-human-queue":"material/human-queue.svg","material-human-scooter":"material/human-scooter.svg","material-human-walker":"material/human-walker.svg","material-human-wheelchair":"material/human-wheelchair.svg","material-human-white-cane":"material/human-white-cane.svg","material-human":"material/human.svg","material-humble-bundle":"material/humble-bundle.svg","material-hvac-off":"material/hvac-off.svg","material-hvac":"material/hvac.svg","material-hydraulic-oil-level":"material/hydraulic-oil-level.svg","material-hydraulic-oil-temperature":"material/hydraulic-oil-temperature.svg","material-hydro-power":"material/hydro-power.svg","material-hydrogen-station":"material/hydrogen-station.svg","material-ice-cream-off":"material/ice-cream-off.svg","material-ice-cream":"material/ice-cream.svg","material-ice-pop":"material/ice-pop.svg","material-id-card":"material/id-card.svg","material-identifier":"material/identifier.svg","material-ideogram-cjk-variant":"material/ideogram-cjk-variant.svg","material-ideogram-cjk":"material/ideogram-cjk.svg","material-image-album":"material/image-album.svg","material-image-area-close":"material/image-area-close.svg","material-image-area":"material/image-area.svg","material-image-auto-adjust":"material/image-auto-adjust.svg","material-image-broken-variant":"material/image-broken-variant.svg","material-image-broken":"material/image-broken.svg","material-image-check-outline":"material/image-check-outline.svg","material-image-check":"material/image-check.svg","material-image-edit-outline":"material/image-edit-outline.svg","material-image-edit":"material/image-edit.svg","material-image-filter-black-white":"material/image-filter-black-white.svg","material-image-filter-center-focus-strong-outline":"material/image-filter-center-focus-strong-outline.svg","material-image-filter-center-focus-strong":"material/image-filter-center-focus-strong.svg","material-image-filter-center-focus-weak":"material/image-filter-center-focus-weak.svg","material-image-filter-center-focus":"material/image-filter-center-focus.svg","material-image-filter-drama-outline":"material/image-filter-drama-outline.svg","material-image-filter-drama":"material/image-filter-drama.svg","material-image-filter-frames":"material/image-filter-frames.svg","material-image-filter-hdr-outline":"material/image-filter-hdr-outline.svg","material-image-filter-hdr":"material/image-filter-hdr.svg","material-image-filter-none":"material/image-filter-none.svg","material-image-filter-tilt-shift":"material/image-filter-tilt-shift.svg","material-image-filter-vintage":"material/image-filter-vintage.svg","material-image-frame":"material/image-frame.svg","material-image-lock-outline":"material/image-lock-outline.svg","material-image-lock":"material/image-lock.svg","material-image-marker-outline":"material/image-marker-outline.svg","material-image-marker":"material/image-marker.svg","material-image-minus-outline":"material/image-minus-outline.svg","material-image-minus":"material/image-minus.svg","material-image-move":"material/image-move.svg","material-image-multiple-outline":"material/image-multiple-outline.svg","material-image-multiple":"material/image-multiple.svg","material-image-off-outline":"material/image-off-outline.svg","material-image-off":"material/image-off.svg","material-image-outline":"material/image-outline.svg","material-image-plus-outline":"material/image-plus-outline.svg","material-image-plus":"material/image-plus.svg","material-image-refresh-outline":"material/image-refresh-outline.svg","material-image-refresh":"material/image-refresh.svg","material-image-remove-outline":"material/image-remove-outline.svg","material-image-remove":"material/image-remove.svg","material-image-search-outline":"material/image-search-outline.svg","material-image-search":"material/image-search.svg","material-image-size-select-actual":"material/image-size-select-actual.svg","material-image-size-select-large":"material/image-size-select-large.svg","material-image-size-select-small":"material/image-size-select-small.svg","material-image-sync-outline":"material/image-sync-outline.svg","material-image-sync":"material/image-sync.svg","material-image-text":"material/image-text.svg","material-image":"material/image.svg","material-import":"material/import.svg","material-inbox-arrow-down-outline":"material/inbox-arrow-down-outline.svg","material-inbox-arrow-down":"material/inbox-arrow-down.svg","material-inbox-arrow-up-outline":"material/inbox-arrow-up-outline.svg","material-inbox-arrow-up":"material/inbox-arrow-up.svg","material-inbox-full-outline":"material/inbox-full-outline.svg","material-inbox-full":"material/inbox-full.svg","material-inbox-multiple-outline":"material/inbox-multiple-outline.svg","material-inbox-multiple":"material/inbox-multiple.svg","material-inbox-outline":"material/inbox-outline.svg","material-inbox-remove-outline":"material/inbox-remove-outline.svg","material-inbox-remove":"material/inbox-remove.svg","material-inbox":"material/inbox.svg","material-incognito-circle-off":"material/incognito-circle-off.svg","material-incognito-circle":"material/incognito-circle.svg","material-incognito-off":"material/incognito-off.svg","material-incognito":"material/incognito.svg","material-induction":"material/induction.svg","material-infinity":"material/infinity.svg","material-information-box-outline":"material/information-box-outline.svg","material-information-box":"material/information-box.svg","material-information-off-outline":"material/information-off-outline.svg","material-information-off":"material/information-off.svg","material-information-outline":"material/information-outline.svg","material-information-slab-box-outline":"material/information-slab-box-outline.svg","material-information-slab-box":"material/information-slab-box.svg","material-information-slab-circle-outline":"material/information-slab-circle-outline.svg","material-information-slab-circle":"material/information-slab-circle.svg","material-information-slab-symbol":"material/information-slab-symbol.svg","material-information-symbol":"material/information-symbol.svg","material-information-variant-box-outline":"material/information-variant-box-outline.svg","material-information-variant-box":"material/information-variant-box.svg","material-information-variant-circle-outline":"material/information-variant-circle-outline.svg","material-information-variant-circle":"material/information-variant-circle.svg","material-information-variant":"material/information-variant.svg","material-information":"material/information.svg","material-instagram":"material/instagram.svg","material-instrument-triangle":"material/instrument-triangle.svg","material-integrated-circuit-chip":"material/integrated-circuit-chip.svg","material-invert-colors-off":"material/invert-colors-off.svg","material-invert-colors":"material/invert-colors.svg","material-iobroker":"material/iobroker.svg","material-ip-network-outline":"material/ip-network-outline.svg","material-ip-network":"material/ip-network.svg","material-ip-outline":"material/ip-outline.svg","material-ip":"material/ip.svg","material-ipod":"material/ipod.svg","material-iron-board":"material/iron-board.svg","material-iron-outline":"material/iron-outline.svg","material-iron":"material/iron.svg","material-island":"material/island.svg","material-iv-bag":"material/iv-bag.svg","material-jabber":"material/jabber.svg","material-jeepney":"material/jeepney.svg","material-jellyfish-outline":"material/jellyfish-outline.svg","material-jellyfish":"material/jellyfish.svg","material-jira":"material/jira.svg","material-jquery":"material/jquery.svg","material-jsfiddle":"material/jsfiddle.svg","material-jump-rope":"material/jump-rope.svg","material-kabaddi":"material/kabaddi.svg","material-kangaroo":"material/kangaroo.svg","material-karate":"material/karate.svg","material-kayaking":"material/kayaking.svg","material-keg":"material/keg.svg","material-kettle-alert-outline":"material/kettle-alert-outline.svg","material-kettle-alert":"material/kettle-alert.svg","material-kettle-off-outline":"material/kettle-off-outline.svg","material-kettle-off":"material/kettle-off.svg","material-kettle-outline":"material/kettle-outline.svg","material-kettle-pour-over":"material/kettle-pour-over.svg","material-kettle-steam-outline":"material/kettle-steam-outline.svg","material-kettle-steam":"material/kettle-steam.svg","material-kettle":"material/kettle.svg","material-kettlebell":"material/kettlebell.svg","material-key-alert-outline":"material/key-alert-outline.svg","material-key-alert":"material/key-alert.svg","material-key-arrow-right":"material/key-arrow-right.svg","material-key-chain-variant":"material/key-chain-variant.svg","material-key-chain":"material/key-chain.svg","material-key-change":"material/key-change.svg","material-key-link":"material/key-link.svg","material-key-minus":"material/key-minus.svg","material-key-outline":"material/key-outline.svg","material-key-plus":"material/key-plus.svg","material-key-remove":"material/key-remove.svg","material-key-star":"material/key-star.svg","material-key-variant":"material/key-variant.svg","material-key-wireless":"material/key-wireless.svg","material-key":"material/key.svg","material-keyboard-backspace":"material/keyboard-backspace.svg","material-keyboard-caps":"material/keyboard-caps.svg","material-keyboard-close-outline":"material/keyboard-close-outline.svg","material-keyboard-close":"material/keyboard-close.svg","material-keyboard-esc":"material/keyboard-esc.svg","material-keyboard-f1":"material/keyboard-f1.svg","material-keyboard-f10":"material/keyboard-f10.svg","material-keyboard-f11":"material/keyboard-f11.svg","material-keyboard-f12":"material/keyboard-f12.svg","material-keyboard-f2":"material/keyboard-f2.svg","material-keyboard-f3":"material/keyboard-f3.svg","material-keyboard-f4":"material/keyboard-f4.svg","material-keyboard-f5":"material/keyboard-f5.svg","material-keyboard-f6":"material/keyboard-f6.svg","material-keyboard-f7":"material/keyboard-f7.svg","material-keyboard-f8":"material/keyboard-f8.svg","material-keyboard-f9":"material/keyboard-f9.svg","material-keyboard-off-outline":"material/keyboard-off-outline.svg","material-keyboard-off":"material/keyboard-off.svg","material-keyboard-outline":"material/keyboard-outline.svg","material-keyboard-return":"material/keyboard-return.svg","material-keyboard-settings-outline":"material/keyboard-settings-outline.svg","material-keyboard-settings":"material/keyboard-settings.svg","material-keyboard-space":"material/keyboard-space.svg","material-keyboard-tab-reverse":"material/keyboard-tab-reverse.svg","material-keyboard-tab":"material/keyboard-tab.svg","material-keyboard-variant":"material/keyboard-variant.svg","material-keyboard":"material/keyboard.svg","material-khanda":"material/khanda.svg","material-kickstarter":"material/kickstarter.svg","material-kite-outline":"material/kite-outline.svg","material-kite":"material/kite.svg","material-kitesurfing":"material/kitesurfing.svg","material-klingon":"material/klingon.svg","material-knife-military":"material/knife-military.svg","material-knife":"material/knife.svg","material-knob":"material/knob.svg","material-koala":"material/koala.svg","material-kodi":"material/kodi.svg","material-kubernetes":"material/kubernetes.svg","material-label-multiple-outline":"material/label-multiple-outline.svg","material-label-multiple":"material/label-multiple.svg","material-label-off-outline":"material/label-off-outline.svg","material-label-off":"material/label-off.svg","material-label-outline":"material/label-outline.svg","material-label-percent-outline":"material/label-percent-outline.svg","material-label-percent":"material/label-percent.svg","material-label-variant-outline":"material/label-variant-outline.svg","material-label-variant":"material/label-variant.svg","material-label":"material/label.svg","material-ladder":"material/ladder.svg","material-ladybug":"material/ladybug.svg","material-lambda":"material/lambda.svg","material-lamp-outline":"material/lamp-outline.svg","material-lamp":"material/lamp.svg","material-lamps-outline":"material/lamps-outline.svg","material-lamps":"material/lamps.svg","material-lan-check":"material/lan-check.svg","material-lan-connect":"material/lan-connect.svg","material-lan-disconnect":"material/lan-disconnect.svg","material-lan-pending":"material/lan-pending.svg","material-lan":"material/lan.svg","material-land-fields":"material/land-fields.svg","material-land-plots-circle-variant":"material/land-plots-circle-variant.svg","material-land-plots-circle":"material/land-plots-circle.svg","material-land-plots-marker":"material/land-plots-marker.svg","material-land-plots":"material/land-plots.svg","material-land-rows-horizontal":"material/land-rows-horizontal.svg","material-land-rows-vertical":"material/land-rows-vertical.svg","material-landslide-outline":"material/landslide-outline.svg","material-landslide":"material/landslide.svg","material-language-c":"material/language-c.svg","material-language-cpp":"material/language-cpp.svg","material-language-csharp":"material/language-csharp.svg","material-language-css3":"material/language-css3.svg","material-language-fortran":"material/language-fortran.svg","material-language-go":"material/language-go.svg","material-language-haskell":"material/language-haskell.svg","material-language-html5":"material/language-html5.svg","material-language-java":"material/language-java.svg","material-language-javascript":"material/language-javascript.svg","material-language-kotlin":"material/language-kotlin.svg","material-language-lua":"material/language-lua.svg","material-language-markdown-outline":"material/language-markdown-outline.svg","material-language-markdown":"material/language-markdown.svg","material-language-php":"material/language-php.svg","material-language-python":"material/language-python.svg","material-language-r":"material/language-r.svg","material-language-ruby-on-rails":"material/language-ruby-on-rails.svg","material-language-ruby":"material/language-ruby.svg","material-language-rust":"material/language-rust.svg","material-language-swift":"material/language-swift.svg","material-language-typescript":"material/language-typescript.svg","material-language-xaml":"material/language-xaml.svg","material-laptop-account":"material/laptop-account.svg","material-laptop-off":"material/laptop-off.svg","material-laptop":"material/laptop.svg","material-laravel":"material/laravel.svg","material-laser-pointer":"material/laser-pointer.svg","material-lasso":"material/lasso.svg","material-lastpass":"material/lastpass.svg","material-latitude":"material/latitude.svg","material-launch":"material/launch.svg","material-lava-lamp":"material/lava-lamp.svg","material-layers-edit":"material/layers-edit.svg","material-layers-minus":"material/layers-minus.svg","material-layers-off-outline":"material/layers-off-outline.svg","material-layers-off":"material/layers-off.svg","material-layers-outline":"material/layers-outline.svg","material-layers-plus":"material/layers-plus.svg","material-layers-remove":"material/layers-remove.svg","material-layers-search-outline":"material/layers-search-outline.svg","material-layers-search":"material/layers-search.svg","material-layers-triple-outline":"material/layers-triple-outline.svg","material-layers-triple":"material/layers-triple.svg","material-layers":"material/layers.svg","material-lead-pencil":"material/lead-pencil.svg","material-leaf-circle-outline":"material/leaf-circle-outline.svg","material-leaf-circle":"material/leaf-circle.svg","material-leaf-maple-off":"material/leaf-maple-off.svg","material-leaf-maple":"material/leaf-maple.svg","material-leaf-off":"material/leaf-off.svg","material-leaf":"material/leaf.svg","material-leak-off":"material/leak-off.svg","material-leak":"material/leak.svg","material-lectern":"material/lectern.svg","material-led-off":"material/led-off.svg","material-led-on":"material/led-on.svg","material-led-outline":"material/led-outline.svg","material-led-strip-variant-off":"material/led-strip-variant-off.svg","material-led-strip-variant":"material/led-strip-variant.svg","material-led-strip":"material/led-strip.svg","material-led-variant-off":"material/led-variant-off.svg","material-led-variant-on":"material/led-variant-on.svg","material-led-variant-outline":"material/led-variant-outline.svg","material-leek":"material/leek.svg","material-less-than-or-equal":"material/less-than-or-equal.svg","material-less-than":"material/less-than.svg","material-library-outline":"material/library-outline.svg","material-library-shelves":"material/library-shelves.svg","material-library":"material/library.svg","material-license":"material/license.svg","material-lifebuoy":"material/lifebuoy.svg","material-light-flood-down":"material/light-flood-down.svg","material-light-flood-up":"material/light-flood-up.svg","material-light-recessed":"material/light-recessed.svg","material-light-switch-off":"material/light-switch-off.svg","material-light-switch":"material/light-switch.svg","material-lightbulb-alert-outline":"material/lightbulb-alert-outline.svg","material-lightbulb-alert":"material/lightbulb-alert.svg","material-lightbulb-auto-outline":"material/lightbulb-auto-outline.svg","material-lightbulb-auto":"material/lightbulb-auto.svg","material-lightbulb-cfl-off":"material/lightbulb-cfl-off.svg","material-lightbulb-cfl-spiral-off":"material/lightbulb-cfl-spiral-off.svg","material-lightbulb-cfl-spiral":"material/lightbulb-cfl-spiral.svg","material-lightbulb-cfl":"material/lightbulb-cfl.svg","material-lightbulb-fluorescent-tube-outline":"material/lightbulb-fluorescent-tube-outline.svg","material-lightbulb-fluorescent-tube":"material/lightbulb-fluorescent-tube.svg","material-lightbulb-group-off-outline":"material/lightbulb-group-off-outline.svg","material-lightbulb-group-off":"material/lightbulb-group-off.svg","material-lightbulb-group-outline":"material/lightbulb-group-outline.svg","material-lightbulb-group":"material/lightbulb-group.svg","material-lightbulb-multiple-off-outline":"material/lightbulb-multiple-off-outline.svg","material-lightbulb-multiple-off":"material/lightbulb-multiple-off.svg","material-lightbulb-multiple-outline":"material/lightbulb-multiple-outline.svg","material-lightbulb-multiple":"material/lightbulb-multiple.svg","material-lightbulb-night-outline":"material/lightbulb-night-outline.svg","material-lightbulb-night":"material/lightbulb-night.svg","material-lightbulb-off-outline":"material/lightbulb-off-outline.svg","material-lightbulb-off":"material/lightbulb-off.svg","material-lightbulb-on-10":"material/lightbulb-on-10.svg","material-lightbulb-on-20":"material/lightbulb-on-20.svg","material-lightbulb-on-30":"material/lightbulb-on-30.svg","material-lightbulb-on-40":"material/lightbulb-on-40.svg","material-lightbulb-on-50":"material/lightbulb-on-50.svg","material-lightbulb-on-60":"material/lightbulb-on-60.svg","material-lightbulb-on-70":"material/lightbulb-on-70.svg","material-lightbulb-on-80":"material/lightbulb-on-80.svg","material-lightbulb-on-90":"material/lightbulb-on-90.svg","material-lightbulb-on-outline":"material/lightbulb-on-outline.svg","material-lightbulb-on":"material/lightbulb-on.svg","material-lightbulb-outline":"material/lightbulb-outline.svg","material-lightbulb-question-outline":"material/lightbulb-question-outline.svg","material-lightbulb-question":"material/lightbulb-question.svg","material-lightbulb-spot-off":"material/lightbulb-spot-off.svg","material-lightbulb-spot":"material/lightbulb-spot.svg","material-lightbulb-variant-outline":"material/lightbulb-variant-outline.svg","material-lightbulb-variant":"material/lightbulb-variant.svg","material-lightbulb":"material/lightbulb.svg","material-lighthouse-on":"material/lighthouse-on.svg","material-lighthouse":"material/lighthouse.svg","material-lightning-bolt-circle":"material/lightning-bolt-circle.svg","material-lightning-bolt-outline":"material/lightning-bolt-outline.svg","material-lightning-bolt":"material/lightning-bolt.svg","material-line-scan":"material/line-scan.svg","material-lingerie":"material/lingerie.svg","material-link-box-outline":"material/link-box-outline.svg","material-link-box-variant-outline":"material/link-box-variant-outline.svg","material-link-box-variant":"material/link-box-variant.svg","material-link-box":"material/link-box.svg","material-link-lock":"material/link-lock.svg","material-link-off":"material/link-off.svg","material-link-plus":"material/link-plus.svg","material-link-variant-minus":"material/link-variant-minus.svg","material-link-variant-off":"material/link-variant-off.svg","material-link-variant-plus":"material/link-variant-plus.svg","material-link-variant-remove":"material/link-variant-remove.svg","material-link-variant":"material/link-variant.svg","material-link":"material/link.svg","material-linkedin":"material/linkedin.svg","material-linux-mint":"material/linux-mint.svg","material-linux":"material/linux.svg","material-lipstick":"material/lipstick.svg","material-liquid-spot":"material/liquid-spot.svg","material-liquor":"material/liquor.svg","material-list-box-outline":"material/list-box-outline.svg","material-list-box":"material/list-box.svg","material-list-status":"material/list-status.svg","material-litecoin":"material/litecoin.svg","material-loading":"material/loading.svg","material-location-enter":"material/location-enter.svg","material-location-exit":"material/location-exit.svg","material-lock-alert-outline":"material/lock-alert-outline.svg","material-lock-alert":"material/lock-alert.svg","material-lock-check-outline":"material/lock-check-outline.svg","material-lock-check":"material/lock-check.svg","material-lock-clock":"material/lock-clock.svg","material-lock-minus-outline":"material/lock-minus-outline.svg","material-lock-minus":"material/lock-minus.svg","material-lock-off-outline":"material/lock-off-outline.svg","material-lock-off":"material/lock-off.svg","material-lock-open-alert-outline":"material/lock-open-alert-outline.svg","material-lock-open-alert":"material/lock-open-alert.svg","material-lock-open-check-outline":"material/lock-open-check-outline.svg","material-lock-open-check":"material/lock-open-check.svg","material-lock-open-minus-outline":"material/lock-open-minus-outline.svg","material-lock-open-minus":"material/lock-open-minus.svg","material-lock-open-outline":"material/lock-open-outline.svg","material-lock-open-plus-outline":"material/lock-open-plus-outline.svg","material-lock-open-plus":"material/lock-open-plus.svg","material-lock-open-remove-outline":"material/lock-open-remove-outline.svg","material-lock-open-remove":"material/lock-open-remove.svg","material-lock-open-variant-outline":"material/lock-open-variant-outline.svg","material-lock-open-variant":"material/lock-open-variant.svg","material-lock-open":"material/lock-open.svg","material-lock-outline":"material/lock-outline.svg","material-lock-pattern":"material/lock-pattern.svg","material-lock-percent-open-outline":"material/lock-percent-open-outline.svg","material-lock-percent-open-variant-outline":"material/lock-percent-open-variant-outline.svg","material-lock-percent-open-variant":"material/lock-percent-open-variant.svg","material-lock-percent-open":"material/lock-percent-open.svg","material-lock-percent-outline":"material/lock-percent-outline.svg","material-lock-percent":"material/lock-percent.svg","material-lock-plus-outline":"material/lock-plus-outline.svg","material-lock-plus":"material/lock-plus.svg","material-lock-question":"material/lock-question.svg","material-lock-remove-outline":"material/lock-remove-outline.svg","material-lock-remove":"material/lock-remove.svg","material-lock-reset":"material/lock-reset.svg","material-lock-smart":"material/lock-smart.svg","material-lock":"material/lock.svg","material-locker-multiple":"material/locker-multiple.svg","material-locker":"material/locker.svg","material-login-variant":"material/login-variant.svg","material-login":"material/login.svg","material-logout-variant":"material/logout-variant.svg","material-logout":"material/logout.svg","material-longitude":"material/longitude.svg","material-looks":"material/looks.svg","material-lotion-outline":"material/lotion-outline.svg","material-lotion-plus-outline":"material/lotion-plus-outline.svg","material-lotion-plus":"material/lotion-plus.svg","material-lotion":"material/lotion.svg","material-loupe":"material/loupe.svg","material-lumx":"material/lumx.svg","material-lungs":"material/lungs.svg","material-mace":"material/mace.svg","material-magazine-pistol":"material/magazine-pistol.svg","material-magazine-rifle":"material/magazine-rifle.svg","material-magic-staff":"material/magic-staff.svg","material-magnet-on":"material/magnet-on.svg","material-magnet":"material/magnet.svg","material-magnify-close":"material/magnify-close.svg","material-magnify-expand":"material/magnify-expand.svg","material-magnify-minus-cursor":"material/magnify-minus-cursor.svg","material-magnify-minus-outline":"material/magnify-minus-outline.svg","material-magnify-minus":"material/magnify-minus.svg","material-magnify-plus-cursor":"material/magnify-plus-cursor.svg","material-magnify-plus-outline":"material/magnify-plus-outline.svg","material-magnify-plus":"material/magnify-plus.svg","material-magnify-remove-cursor":"material/magnify-remove-cursor.svg","material-magnify-remove-outline":"material/magnify-remove-outline.svg","material-magnify-scan":"material/magnify-scan.svg","material-magnify":"material/magnify.svg","material-mail":"material/mail.svg","material-mailbox-open-outline":"material/mailbox-open-outline.svg","material-mailbox-open-up-outline":"material/mailbox-open-up-outline.svg","material-mailbox-open-up":"material/mailbox-open-up.svg","material-mailbox-open":"material/mailbox-open.svg","material-mailbox-outline":"material/mailbox-outline.svg","material-mailbox-up-outline":"material/mailbox-up-outline.svg","material-mailbox-up":"material/mailbox-up.svg","material-mailbox":"material/mailbox.svg","material-manjaro":"material/manjaro.svg","material-map-check-outline":"material/map-check-outline.svg","material-map-check":"material/map-check.svg","material-map-clock-outline":"material/map-clock-outline.svg","material-map-clock":"material/map-clock.svg","material-map-legend":"material/map-legend.svg","material-map-marker-account-outline":"material/map-marker-account-outline.svg","material-map-marker-account":"material/map-marker-account.svg","material-map-marker-alert-outline":"material/map-marker-alert-outline.svg","material-map-marker-alert":"material/map-marker-alert.svg","material-map-marker-check-outline":"material/map-marker-check-outline.svg","material-map-marker-check":"material/map-marker-check.svg","material-map-marker-circle":"material/map-marker-circle.svg","material-map-marker-distance":"material/map-marker-distance.svg","material-map-marker-down":"material/map-marker-down.svg","material-map-marker-left-outline":"material/map-marker-left-outline.svg","material-map-marker-left":"material/map-marker-left.svg","material-map-marker-minus-outline":"material/map-marker-minus-outline.svg","material-map-marker-minus":"material/map-marker-minus.svg","material-map-marker-multiple-outline":"material/map-marker-multiple-outline.svg","material-map-marker-multiple":"material/map-marker-multiple.svg","material-map-marker-off-outline":"material/map-marker-off-outline.svg","material-map-marker-off":"material/map-marker-off.svg","material-map-marker-outline":"material/map-marker-outline.svg","material-map-marker-path":"material/map-marker-path.svg","material-map-marker-plus-outline":"material/map-marker-plus-outline.svg","material-map-marker-plus":"material/map-marker-plus.svg","material-map-marker-question-outline":"material/map-marker-question-outline.svg","material-map-marker-question":"material/map-marker-question.svg","material-map-marker-radius-outline":"material/map-marker-radius-outline.svg","material-map-marker-radius":"material/map-marker-radius.svg","material-map-marker-remove-outline":"material/map-marker-remove-outline.svg","material-map-marker-remove-variant":"material/map-marker-remove-variant.svg","material-map-marker-remove":"material/map-marker-remove.svg","material-map-marker-right-outline":"material/map-marker-right-outline.svg","material-map-marker-right":"material/map-marker-right.svg","material-map-marker-star-outline":"material/map-marker-star-outline.svg","material-map-marker-star":"material/map-marker-star.svg","material-map-marker-up":"material/map-marker-up.svg","material-map-marker":"material/map-marker.svg","material-map-minus":"material/map-minus.svg","material-map-outline":"material/map-outline.svg","material-map-plus":"material/map-plus.svg","material-map-search-outline":"material/map-search-outline.svg","material-map-search":"material/map-search.svg","material-map":"material/map.svg","material-mapbox":"material/mapbox.svg","material-margin":"material/margin.svg","material-marker-cancel":"material/marker-cancel.svg","material-marker-check":"material/marker-check.svg","material-marker":"material/marker.svg","material-mastodon":"material/mastodon.svg","material-material-design":"material/material-design.svg","material-material-ui":"material/material-ui.svg","material-math-compass":"material/math-compass.svg","material-math-cos":"material/math-cos.svg","material-math-integral-box":"material/math-integral-box.svg","material-math-integral":"material/math-integral.svg","material-math-log":"material/math-log.svg","material-math-norm-box":"material/math-norm-box.svg","material-math-norm":"material/math-norm.svg","material-math-sin":"material/math-sin.svg","material-math-tan":"material/math-tan.svg","material-matrix":"material/matrix.svg","material-medal-outline":"material/medal-outline.svg","material-medal":"material/medal.svg","material-medical-bag":"material/medical-bag.svg","material-medical-cotton-swab":"material/medical-cotton-swab.svg","material-medication-outline":"material/medication-outline.svg","material-medication":"material/medication.svg","material-meditation":"material/meditation.svg","material-memory":"material/memory.svg","material-menorah-fire":"material/menorah-fire.svg","material-menorah":"material/menorah.svg","material-menu-down-outline":"material/menu-down-outline.svg","material-menu-down":"material/menu-down.svg","material-menu-left-outline":"material/menu-left-outline.svg","material-menu-left":"material/menu-left.svg","material-menu-open":"material/menu-open.svg","material-menu-right-outline":"material/menu-right-outline.svg","material-menu-right":"material/menu-right.svg","material-menu-swap-outline":"material/menu-swap-outline.svg","material-menu-swap":"material/menu-swap.svg","material-menu-up-outline":"material/menu-up-outline.svg","material-menu-up":"material/menu-up.svg","material-menu":"material/menu.svg","material-merge":"material/merge.svg","material-message-alert-outline":"material/message-alert-outline.svg","material-message-alert":"material/message-alert.svg","material-message-arrow-left-outline":"material/message-arrow-left-outline.svg","material-message-arrow-left":"material/message-arrow-left.svg","material-message-arrow-right-outline":"material/message-arrow-right-outline.svg","material-message-arrow-right":"material/message-arrow-right.svg","material-message-badge-outline":"material/message-badge-outline.svg","material-message-badge":"material/message-badge.svg","material-message-bookmark-outline":"material/message-bookmark-outline.svg","material-message-bookmark":"material/message-bookmark.svg","material-message-bulleted-off":"material/message-bulleted-off.svg","material-message-bulleted":"material/message-bulleted.svg","material-message-check-outline":"material/message-check-outline.svg","material-message-check":"material/message-check.svg","material-message-cog-outline":"material/message-cog-outline.svg","material-message-cog":"material/message-cog.svg","material-message-draw":"material/message-draw.svg","material-message-fast-outline":"material/message-fast-outline.svg","material-message-fast":"material/message-fast.svg","material-message-flash-outline":"material/message-flash-outline.svg","material-message-flash":"material/message-flash.svg","material-message-image-outline":"material/message-image-outline.svg","material-message-image":"material/message-image.svg","material-message-lock-outline":"material/message-lock-outline.svg","material-message-lock":"material/message-lock.svg","material-message-minus-outline":"material/message-minus-outline.svg","material-message-minus":"material/message-minus.svg","material-message-off-outline":"material/message-off-outline.svg","material-message-off":"material/message-off.svg","material-message-outline":"material/message-outline.svg","material-message-plus-outline":"material/message-plus-outline.svg","material-message-plus":"material/message-plus.svg","material-message-processing-outline":"material/message-processing-outline.svg","material-message-processing":"material/message-processing.svg","material-message-question-outline":"material/message-question-outline.svg","material-message-question":"material/message-question.svg","material-message-reply-outline":"material/message-reply-outline.svg","material-message-reply-text-outline":"material/message-reply-text-outline.svg","material-message-reply-text":"material/message-reply-text.svg","material-message-reply":"material/message-reply.svg","material-message-settings-outline":"material/message-settings-outline.svg","material-message-settings":"material/message-settings.svg","material-message-star-outline":"material/message-star-outline.svg","material-message-star":"material/message-star.svg","material-message-text-clock-outline":"material/message-text-clock-outline.svg","material-message-text-clock":"material/message-text-clock.svg","material-message-text-fast-outline":"material/message-text-fast-outline.svg","material-message-text-fast":"material/message-text-fast.svg","material-message-text-lock-outline":"material/message-text-lock-outline.svg","material-message-text-lock":"material/message-text-lock.svg","material-message-text-outline":"material/message-text-outline.svg","material-message-text":"material/message-text.svg","material-message-video":"material/message-video.svg","material-message":"material/message.svg","material-meteor":"material/meteor.svg","material-meter-electric-outline":"material/meter-electric-outline.svg","material-meter-electric":"material/meter-electric.svg","material-meter-gas-outline":"material/meter-gas-outline.svg","material-meter-gas":"material/meter-gas.svg","material-metronome-tick":"material/metronome-tick.svg","material-metronome":"material/metronome.svg","material-micro-sd":"material/micro-sd.svg","material-microphone-message-off":"material/microphone-message-off.svg","material-microphone-message":"material/microphone-message.svg","material-microphone-minus":"material/microphone-minus.svg","material-microphone-off":"material/microphone-off.svg","material-microphone-outline":"material/microphone-outline.svg","material-microphone-plus":"material/microphone-plus.svg","material-microphone-question-outline":"material/microphone-question-outline.svg","material-microphone-question":"material/microphone-question.svg","material-microphone-settings":"material/microphone-settings.svg","material-microphone-variant-off":"material/microphone-variant-off.svg","material-microphone-variant":"material/microphone-variant.svg","material-microphone":"material/microphone.svg","material-microscope":"material/microscope.svg","material-microsoft-access":"material/microsoft-access.svg","material-microsoft-azure-devops":"material/microsoft-azure-devops.svg","material-microsoft-azure":"material/microsoft-azure.svg","material-microsoft-bing":"material/microsoft-bing.svg","material-microsoft-dynamics-365":"material/microsoft-dynamics-365.svg","material-microsoft-edge":"material/microsoft-edge.svg","material-microsoft-excel":"material/microsoft-excel.svg","material-microsoft-internet-explorer":"material/microsoft-internet-explorer.svg","material-microsoft-office":"material/microsoft-office.svg","material-microsoft-onedrive":"material/microsoft-onedrive.svg","material-microsoft-onenote":"material/microsoft-onenote.svg","material-microsoft-outlook":"material/microsoft-outlook.svg","material-microsoft-powerpoint":"material/microsoft-powerpoint.svg","material-microsoft-sharepoint":"material/microsoft-sharepoint.svg","material-microsoft-teams":"material/microsoft-teams.svg","material-microsoft-visual-studio-code":"material/microsoft-visual-studio-code.svg","material-microsoft-visual-studio":"material/microsoft-visual-studio.svg","material-microsoft-windows-classic":"material/microsoft-windows-classic.svg","material-microsoft-windows":"material/microsoft-windows.svg","material-microsoft-word":"material/microsoft-word.svg","material-microsoft-xbox-controller-battery-alert":"material/microsoft-xbox-controller-battery-alert.svg","material-microsoft-xbox-controller-battery-charging":"material/microsoft-xbox-controller-battery-charging.svg","material-microsoft-xbox-controller-battery-empty":"material/microsoft-xbox-controller-battery-empty.svg","material-microsoft-xbox-controller-battery-full":"material/microsoft-xbox-controller-battery-full.svg","material-microsoft-xbox-controller-battery-low":"material/microsoft-xbox-controller-battery-low.svg","material-microsoft-xbox-controller-battery-medium":"material/microsoft-xbox-controller-battery-medium.svg","material-microsoft-xbox-controller-battery-unknown":"material/microsoft-xbox-controller-battery-unknown.svg","material-microsoft-xbox-controller-menu":"material/microsoft-xbox-controller-menu.svg","material-microsoft-xbox-controller-off":"material/microsoft-xbox-controller-off.svg","material-microsoft-xbox-controller-view":"material/microsoft-xbox-controller-view.svg","material-microsoft-xbox-controller":"material/microsoft-xbox-controller.svg","material-microsoft-xbox":"material/microsoft-xbox.svg","material-microsoft":"material/microsoft.svg","material-microwave-off":"material/microwave-off.svg","material-microwave":"material/microwave.svg","material-middleware-outline":"material/middleware-outline.svg","material-middleware":"material/middleware.svg","material-midi-port":"material/midi-port.svg","material-midi":"material/midi.svg","material-mine":"material/mine.svg","material-minecraft":"material/minecraft.svg","material-mini-sd":"material/mini-sd.svg","material-minidisc":"material/minidisc.svg","material-minus-box-multiple-outline":"material/minus-box-multiple-outline.svg","material-minus-box-multiple":"material/minus-box-multiple.svg","material-minus-box-outline":"material/minus-box-outline.svg","material-minus-box":"material/minus-box.svg","material-minus-circle-multiple-outline":"material/minus-circle-multiple-outline.svg","material-minus-circle-multiple":"material/minus-circle-multiple.svg","material-minus-circle-off-outline":"material/minus-circle-off-outline.svg","material-minus-circle-off":"material/minus-circle-off.svg","material-minus-circle-outline":"material/minus-circle-outline.svg","material-minus-circle":"material/minus-circle.svg","material-minus-network-outline":"material/minus-network-outline.svg","material-minus-network":"material/minus-network.svg","material-minus-thick":"material/minus-thick.svg","material-minus":"material/minus.svg","material-mirror-rectangle":"material/mirror-rectangle.svg","material-mirror-variant":"material/mirror-variant.svg","material-mirror":"material/mirror.svg","material-mixed-martial-arts":"material/mixed-martial-arts.svg","material-mixed-reality":"material/mixed-reality.svg","material-molecule-co":"material/molecule-co.svg","material-molecule-co2":"material/molecule-co2.svg","material-molecule":"material/molecule.svg","material-monitor-account":"material/monitor-account.svg","material-monitor-arrow-down-variant":"material/monitor-arrow-down-variant.svg","material-monitor-arrow-down":"material/monitor-arrow-down.svg","material-monitor-cellphone-star":"material/monitor-cellphone-star.svg","material-monitor-cellphone":"material/monitor-cellphone.svg","material-monitor-dashboard":"material/monitor-dashboard.svg","material-monitor-edit":"material/monitor-edit.svg","material-monitor-eye":"material/monitor-eye.svg","material-monitor-lock":"material/monitor-lock.svg","material-monitor-multiple":"material/monitor-multiple.svg","material-monitor-off":"material/monitor-off.svg","material-monitor-screenshot":"material/monitor-screenshot.svg","material-monitor-share":"material/monitor-share.svg","material-monitor-shimmer":"material/monitor-shimmer.svg","material-monitor-small":"material/monitor-small.svg","material-monitor-speaker-off":"material/monitor-speaker-off.svg","material-monitor-speaker":"material/monitor-speaker.svg","material-monitor-star":"material/monitor-star.svg","material-monitor-vertical":"material/monitor-vertical.svg","material-monitor":"material/monitor.svg","material-moon-first-quarter":"material/moon-first-quarter.svg","material-moon-full":"material/moon-full.svg","material-moon-last-quarter":"material/moon-last-quarter.svg","material-moon-new":"material/moon-new.svg","material-moon-waning-crescent":"material/moon-waning-crescent.svg","material-moon-waning-gibbous":"material/moon-waning-gibbous.svg","material-moon-waxing-crescent":"material/moon-waxing-crescent.svg","material-moon-waxing-gibbous":"material/moon-waxing-gibbous.svg","material-moped-electric-outline":"material/moped-electric-outline.svg","material-moped-electric":"material/moped-electric.svg","material-moped-outline":"material/moped-outline.svg","material-moped":"material/moped.svg","material-more":"material/more.svg","material-mortar-pestle-plus":"material/mortar-pestle-plus.svg","material-mortar-pestle":"material/mortar-pestle.svg","material-mosque-outline":"material/mosque-outline.svg","material-mosque":"material/mosque.svg","material-mother-heart":"material/mother-heart.svg","material-mother-nurse":"material/mother-nurse.svg","material-motion-outline":"material/motion-outline.svg","material-motion-pause-outline":"material/motion-pause-outline.svg","material-motion-pause":"material/motion-pause.svg","material-motion-play-outline":"material/motion-play-outline.svg","material-motion-play":"material/motion-play.svg","material-motion-sensor-off":"material/motion-sensor-off.svg","material-motion-sensor":"material/motion-sensor.svg","material-motion":"material/motion.svg","material-motorbike-electric":"material/motorbike-electric.svg","material-motorbike-off":"material/motorbike-off.svg","material-motorbike":"material/motorbike.svg","material-mouse-bluetooth":"material/mouse-bluetooth.svg","material-mouse-move-down":"material/mouse-move-down.svg","material-mouse-move-up":"material/mouse-move-up.svg","material-mouse-move-vertical":"material/mouse-move-vertical.svg","material-mouse-off":"material/mouse-off.svg","material-mouse-variant-off":"material/mouse-variant-off.svg","material-mouse-variant":"material/mouse-variant.svg","material-mouse":"material/mouse.svg","material-move-resize-variant":"material/move-resize-variant.svg","material-move-resize":"material/move-resize.svg","material-movie-check-outline":"material/movie-check-outline.svg","material-movie-check":"material/movie-check.svg","material-movie-cog-outline":"material/movie-cog-outline.svg","material-movie-cog":"material/movie-cog.svg","material-movie-edit-outline":"material/movie-edit-outline.svg","material-movie-edit":"material/movie-edit.svg","material-movie-filter-outline":"material/movie-filter-outline.svg","material-movie-filter":"material/movie-filter.svg","material-movie-minus-outline":"material/movie-minus-outline.svg","material-movie-minus":"material/movie-minus.svg","material-movie-off-outline":"material/movie-off-outline.svg","material-movie-off":"material/movie-off.svg","material-movie-open-check-outline":"material/movie-open-check-outline.svg","material-movie-open-check":"material/movie-open-check.svg","material-movie-open-cog-outline":"material/movie-open-cog-outline.svg","material-movie-open-cog":"material/movie-open-cog.svg","material-movie-open-edit-outline":"material/movie-open-edit-outline.svg","material-movie-open-edit":"material/movie-open-edit.svg","material-movie-open-minus-outline":"material/movie-open-minus-outline.svg","material-movie-open-minus":"material/movie-open-minus.svg","material-movie-open-off-outline":"material/movie-open-off-outline.svg","material-movie-open-off":"material/movie-open-off.svg","material-movie-open-outline":"material/movie-open-outline.svg","material-movie-open-play-outline":"material/movie-open-play-outline.svg","material-movie-open-play":"material/movie-open-play.svg","material-movie-open-plus-outline":"material/movie-open-plus-outline.svg","material-movie-open-plus":"material/movie-open-plus.svg","material-movie-open-remove-outline":"material/movie-open-remove-outline.svg","material-movie-open-remove":"material/movie-open-remove.svg","material-movie-open-settings-outline":"material/movie-open-settings-outline.svg","material-movie-open-settings":"material/movie-open-settings.svg","material-movie-open-star-outline":"material/movie-open-star-outline.svg","material-movie-open-star":"material/movie-open-star.svg","material-movie-open":"material/movie-open.svg","material-movie-outline":"material/movie-outline.svg","material-movie-play-outline":"material/movie-play-outline.svg","material-movie-play":"material/movie-play.svg","material-movie-plus-outline":"material/movie-plus-outline.svg","material-movie-plus":"material/movie-plus.svg","material-movie-remove-outline":"material/movie-remove-outline.svg","material-movie-remove":"material/movie-remove.svg","material-movie-roll":"material/movie-roll.svg","material-movie-search-outline":"material/movie-search-outline.svg","material-movie-search":"material/movie-search.svg","material-movie-settings-outline":"material/movie-settings-outline.svg","material-movie-settings":"material/movie-settings.svg","material-movie-star-outline":"material/movie-star-outline.svg","material-movie-star":"material/movie-star.svg","material-movie":"material/movie.svg","material-mower-bag-on":"material/mower-bag-on.svg","material-mower-bag":"material/mower-bag.svg","material-mower-on":"material/mower-on.svg","material-mower":"material/mower.svg","material-muffin":"material/muffin.svg","material-multicast":"material/multicast.svg","material-multimedia":"material/multimedia.svg","material-multiplication-box":"material/multiplication-box.svg","material-multiplication":"material/multiplication.svg","material-mushroom-off-outline":"material/mushroom-off-outline.svg","material-mushroom-off":"material/mushroom-off.svg","material-mushroom-outline":"material/mushroom-outline.svg","material-mushroom":"material/mushroom.svg","material-music-accidental-double-flat":"material/music-accidental-double-flat.svg","material-music-accidental-double-sharp":"material/music-accidental-double-sharp.svg","material-music-accidental-flat":"material/music-accidental-flat.svg","material-music-accidental-natural":"material/music-accidental-natural.svg","material-music-accidental-sharp":"material/music-accidental-sharp.svg","material-music-box-multiple-outline":"material/music-box-multiple-outline.svg","material-music-box-multiple":"material/music-box-multiple.svg","material-music-box-outline":"material/music-box-outline.svg","material-music-box":"material/music-box.svg","material-music-circle-outline":"material/music-circle-outline.svg","material-music-circle":"material/music-circle.svg","material-music-clef-alto":"material/music-clef-alto.svg","material-music-clef-bass":"material/music-clef-bass.svg","material-music-clef-treble":"material/music-clef-treble.svg","material-music-note-bluetooth-off":"material/music-note-bluetooth-off.svg","material-music-note-bluetooth":"material/music-note-bluetooth.svg","material-music-note-eighth-dotted":"material/music-note-eighth-dotted.svg","material-music-note-eighth":"material/music-note-eighth.svg","material-music-note-half-dotted":"material/music-note-half-dotted.svg","material-music-note-half":"material/music-note-half.svg","material-music-note-minus":"material/music-note-minus.svg","material-music-note-off-outline":"material/music-note-off-outline.svg","material-music-note-off":"material/music-note-off.svg","material-music-note-outline":"material/music-note-outline.svg","material-music-note-plus":"material/music-note-plus.svg","material-music-note-quarter-dotted":"material/music-note-quarter-dotted.svg","material-music-note-quarter":"material/music-note-quarter.svg","material-music-note-sixteenth-dotted":"material/music-note-sixteenth-dotted.svg","material-music-note-sixteenth":"material/music-note-sixteenth.svg","material-music-note-whole-dotted":"material/music-note-whole-dotted.svg","material-music-note-whole":"material/music-note-whole.svg","material-music-note":"material/music-note.svg","material-music-off":"material/music-off.svg","material-music-rest-eighth":"material/music-rest-eighth.svg","material-music-rest-half":"material/music-rest-half.svg","material-music-rest-quarter":"material/music-rest-quarter.svg","material-music-rest-sixteenth":"material/music-rest-sixteenth.svg","material-music-rest-whole":"material/music-rest-whole.svg","material-music":"material/music.svg","material-mustache":"material/mustache.svg","material-nail":"material/nail.svg","material-nas":"material/nas.svg","material-nativescript":"material/nativescript.svg","material-nature-outline":"material/nature-outline.svg","material-nature-people-outline":"material/nature-people-outline.svg","material-nature-people":"material/nature-people.svg","material-nature":"material/nature.svg","material-navigation-outline":"material/navigation-outline.svg","material-navigation-variant-outline":"material/navigation-variant-outline.svg","material-navigation-variant":"material/navigation-variant.svg","material-navigation":"material/navigation.svg","material-near-me":"material/near-me.svg","material-necklace":"material/necklace.svg","material-needle-off":"material/needle-off.svg","material-needle":"material/needle.svg","material-netflix":"material/netflix.svg","material-network-off-outline":"material/network-off-outline.svg","material-network-off":"material/network-off.svg","material-network-outline":"material/network-outline.svg","material-network-pos":"material/network-pos.svg","material-network-strength-1-alert":"material/network-strength-1-alert.svg","material-network-strength-1":"material/network-strength-1.svg","material-network-strength-2-alert":"material/network-strength-2-alert.svg","material-network-strength-2":"material/network-strength-2.svg","material-network-strength-3-alert":"material/network-strength-3-alert.svg","material-network-strength-3":"material/network-strength-3.svg","material-network-strength-4-alert":"material/network-strength-4-alert.svg","material-network-strength-4-cog":"material/network-strength-4-cog.svg","material-network-strength-4":"material/network-strength-4.svg","material-network-strength-off-outline":"material/network-strength-off-outline.svg","material-network-strength-off":"material/network-strength-off.svg","material-network-strength-outline":"material/network-strength-outline.svg","material-network":"material/network.svg","material-new-box":"material/new-box.svg","material-newspaper-check":"material/newspaper-check.svg","material-newspaper-minus":"material/newspaper-minus.svg","material-newspaper-plus":"material/newspaper-plus.svg","material-newspaper-remove":"material/newspaper-remove.svg","material-newspaper-variant-multiple-outline":"material/newspaper-variant-multiple-outline.svg","material-newspaper-variant-multiple":"material/newspaper-variant-multiple.svg","material-newspaper-variant-outline":"material/newspaper-variant-outline.svg","material-newspaper-variant":"material/newspaper-variant.svg","material-newspaper":"material/newspaper.svg","material-nfc-search-variant":"material/nfc-search-variant.svg","material-nfc-tap":"material/nfc-tap.svg","material-nfc-variant-off":"material/nfc-variant-off.svg","material-nfc-variant":"material/nfc-variant.svg","material-nfc":"material/nfc.svg","material-ninja":"material/ninja.svg","material-nintendo-game-boy":"material/nintendo-game-boy.svg","material-nintendo-switch":"material/nintendo-switch.svg","material-nintendo-wii":"material/nintendo-wii.svg","material-nintendo-wiiu":"material/nintendo-wiiu.svg","material-nix":"material/nix.svg","material-nodejs":"material/nodejs.svg","material-noodles":"material/noodles.svg","material-not-equal-variant":"material/not-equal-variant.svg","material-not-equal":"material/not-equal.svg","material-note-alert-outline":"material/note-alert-outline.svg","material-note-alert":"material/note-alert.svg","material-note-check-outline":"material/note-check-outline.svg","material-note-check":"material/note-check.svg","material-note-edit-outline":"material/note-edit-outline.svg","material-note-edit":"material/note-edit.svg","material-note-minus-outline":"material/note-minus-outline.svg","material-note-minus":"material/note-minus.svg","material-note-multiple-outline":"material/note-multiple-outline.svg","material-note-multiple":"material/note-multiple.svg","material-note-off-outline":"material/note-off-outline.svg","material-note-off":"material/note-off.svg","material-note-outline":"material/note-outline.svg","material-note-plus-outline":"material/note-plus-outline.svg","material-note-plus":"material/note-plus.svg","material-note-remove-outline":"material/note-remove-outline.svg","material-note-remove":"material/note-remove.svg","material-note-search-outline":"material/note-search-outline.svg","material-note-search":"material/note-search.svg","material-note-text-outline":"material/note-text-outline.svg","material-note-text":"material/note-text.svg","material-note":"material/note.svg","material-notebook-check-outline":"material/notebook-check-outline.svg","material-notebook-check":"material/notebook-check.svg","material-notebook-edit-outline":"material/notebook-edit-outline.svg","material-notebook-edit":"material/notebook-edit.svg","material-notebook-heart-outline":"material/notebook-heart-outline.svg","material-notebook-heart":"material/notebook-heart.svg","material-notebook-minus-outline":"material/notebook-minus-outline.svg","material-notebook-minus":"material/notebook-minus.svg","material-notebook-multiple":"material/notebook-multiple.svg","material-notebook-outline":"material/notebook-outline.svg","material-notebook-plus-outline":"material/notebook-plus-outline.svg","material-notebook-plus":"material/notebook-plus.svg","material-notebook-remove-outline":"material/notebook-remove-outline.svg","material-notebook-remove":"material/notebook-remove.svg","material-notebook":"material/notebook.svg","material-notification-clear-all":"material/notification-clear-all.svg","material-npm":"material/npm.svg","material-nuke":"material/nuke.svg","material-null":"material/null.svg","material-numeric-0-box-multiple-outline":"material/numeric-0-box-multiple-outline.svg","material-numeric-0-box-multiple":"material/numeric-0-box-multiple.svg","material-numeric-0-box-outline":"material/numeric-0-box-outline.svg","material-numeric-0-box":"material/numeric-0-box.svg","material-numeric-0-circle-outline":"material/numeric-0-circle-outline.svg","material-numeric-0-circle":"material/numeric-0-circle.svg","material-numeric-0":"material/numeric-0.svg","material-numeric-1-box-multiple-outline":"material/numeric-1-box-multiple-outline.svg","material-numeric-1-box-multiple":"material/numeric-1-box-multiple.svg","material-numeric-1-box-outline":"material/numeric-1-box-outline.svg","material-numeric-1-box":"material/numeric-1-box.svg","material-numeric-1-circle-outline":"material/numeric-1-circle-outline.svg","material-numeric-1-circle":"material/numeric-1-circle.svg","material-numeric-1":"material/numeric-1.svg","material-numeric-10-box-multiple-outline":"material/numeric-10-box-multiple-outline.svg","material-numeric-10-box-multiple":"material/numeric-10-box-multiple.svg","material-numeric-10-box-outline":"material/numeric-10-box-outline.svg","material-numeric-10-box":"material/numeric-10-box.svg","material-numeric-10-circle-outline":"material/numeric-10-circle-outline.svg","material-numeric-10-circle":"material/numeric-10-circle.svg","material-numeric-10":"material/numeric-10.svg","material-numeric-2-box-multiple-outline":"material/numeric-2-box-multiple-outline.svg","material-numeric-2-box-multiple":"material/numeric-2-box-multiple.svg","material-numeric-2-box-outline":"material/numeric-2-box-outline.svg","material-numeric-2-box":"material/numeric-2-box.svg","material-numeric-2-circle-outline":"material/numeric-2-circle-outline.svg","material-numeric-2-circle":"material/numeric-2-circle.svg","material-numeric-2":"material/numeric-2.svg","material-numeric-3-box-multiple-outline":"material/numeric-3-box-multiple-outline.svg","material-numeric-3-box-multiple":"material/numeric-3-box-multiple.svg","material-numeric-3-box-outline":"material/numeric-3-box-outline.svg","material-numeric-3-box":"material/numeric-3-box.svg","material-numeric-3-circle-outline":"material/numeric-3-circle-outline.svg","material-numeric-3-circle":"material/numeric-3-circle.svg","material-numeric-3":"material/numeric-3.svg","material-numeric-4-box-multiple-outline":"material/numeric-4-box-multiple-outline.svg","material-numeric-4-box-multiple":"material/numeric-4-box-multiple.svg","material-numeric-4-box-outline":"material/numeric-4-box-outline.svg","material-numeric-4-box":"material/numeric-4-box.svg","material-numeric-4-circle-outline":"material/numeric-4-circle-outline.svg","material-numeric-4-circle":"material/numeric-4-circle.svg","material-numeric-4":"material/numeric-4.svg","material-numeric-5-box-multiple-outline":"material/numeric-5-box-multiple-outline.svg","material-numeric-5-box-multiple":"material/numeric-5-box-multiple.svg","material-numeric-5-box-outline":"material/numeric-5-box-outline.svg","material-numeric-5-box":"material/numeric-5-box.svg","material-numeric-5-circle-outline":"material/numeric-5-circle-outline.svg","material-numeric-5-circle":"material/numeric-5-circle.svg","material-numeric-5":"material/numeric-5.svg","material-numeric-6-box-multiple-outline":"material/numeric-6-box-multiple-outline.svg","material-numeric-6-box-multiple":"material/numeric-6-box-multiple.svg","material-numeric-6-box-outline":"material/numeric-6-box-outline.svg","material-numeric-6-box":"material/numeric-6-box.svg","material-numeric-6-circle-outline":"material/numeric-6-circle-outline.svg","material-numeric-6-circle":"material/numeric-6-circle.svg","material-numeric-6":"material/numeric-6.svg","material-numeric-7-box-multiple-outline":"material/numeric-7-box-multiple-outline.svg","material-numeric-7-box-multiple":"material/numeric-7-box-multiple.svg","material-numeric-7-box-outline":"material/numeric-7-box-outline.svg","material-numeric-7-box":"material/numeric-7-box.svg","material-numeric-7-circle-outline":"material/numeric-7-circle-outline.svg","material-numeric-7-circle":"material/numeric-7-circle.svg","material-numeric-7":"material/numeric-7.svg","material-numeric-8-box-multiple-outline":"material/numeric-8-box-multiple-outline.svg","material-numeric-8-box-multiple":"material/numeric-8-box-multiple.svg","material-numeric-8-box-outline":"material/numeric-8-box-outline.svg","material-numeric-8-box":"material/numeric-8-box.svg","material-numeric-8-circle-outline":"material/numeric-8-circle-outline.svg","material-numeric-8-circle":"material/numeric-8-circle.svg","material-numeric-8":"material/numeric-8.svg","material-numeric-9-box-multiple-outline":"material/numeric-9-box-multiple-outline.svg","material-numeric-9-box-multiple":"material/numeric-9-box-multiple.svg","material-numeric-9-box-outline":"material/numeric-9-box-outline.svg","material-numeric-9-box":"material/numeric-9-box.svg","material-numeric-9-circle-outline":"material/numeric-9-circle-outline.svg","material-numeric-9-circle":"material/numeric-9-circle.svg","material-numeric-9-plus-box-multiple-outline":"material/numeric-9-plus-box-multiple-outline.svg","material-numeric-9-plus-box-multiple":"material/numeric-9-plus-box-multiple.svg","material-numeric-9-plus-box-outline":"material/numeric-9-plus-box-outline.svg","material-numeric-9-plus-box":"material/numeric-9-plus-box.svg","material-numeric-9-plus-circle-outline":"material/numeric-9-plus-circle-outline.svg","material-numeric-9-plus-circle":"material/numeric-9-plus-circle.svg","material-numeric-9-plus":"material/numeric-9-plus.svg","material-numeric-9":"material/numeric-9.svg","material-numeric-negative-1":"material/numeric-negative-1.svg","material-numeric-off":"material/numeric-off.svg","material-numeric-positive-1":"material/numeric-positive-1.svg","material-numeric":"material/numeric.svg","material-nut":"material/nut.svg","material-nutrition":"material/nutrition.svg","material-nuxt":"material/nuxt.svg","material-oar":"material/oar.svg","material-ocarina":"material/ocarina.svg","material-oci":"material/oci.svg","material-ocr":"material/ocr.svg","material-octagon-outline":"material/octagon-outline.svg","material-octagon":"material/octagon.svg","material-octagram-edit-outline":"material/octagram-edit-outline.svg","material-octagram-edit":"material/octagram-edit.svg","material-octagram-minus-outline":"material/octagram-minus-outline.svg","material-octagram-minus":"material/octagram-minus.svg","material-octagram-outline":"material/octagram-outline.svg","material-octagram-plus-outline":"material/octagram-plus-outline.svg","material-octagram-plus":"material/octagram-plus.svg","material-octagram":"material/octagram.svg","material-octahedron-off":"material/octahedron-off.svg","material-octahedron":"material/octahedron.svg","material-odnoklassniki":"material/odnoklassniki.svg","material-offer":"material/offer.svg","material-office-building-cog-outline":"material/office-building-cog-outline.svg","material-office-building-cog":"material/office-building-cog.svg","material-office-building-marker-outline":"material/office-building-marker-outline.svg","material-office-building-marker":"material/office-building-marker.svg","material-office-building-minus-outline":"material/office-building-minus-outline.svg","material-office-building-minus":"material/office-building-minus.svg","material-office-building-outline":"material/office-building-outline.svg","material-office-building-plus-outline":"material/office-building-plus-outline.svg","material-office-building-plus":"material/office-building-plus.svg","material-office-building-remove-outline":"material/office-building-remove-outline.svg","material-office-building-remove":"material/office-building-remove.svg","material-office-building":"material/office-building.svg","material-oil-lamp":"material/oil-lamp.svg","material-oil-level":"material/oil-level.svg","material-oil-temperature":"material/oil-temperature.svg","material-oil":"material/oil.svg","material-om":"material/om.svg","material-omega":"material/omega.svg","material-one-up":"material/one-up.svg","material-onepassword":"material/onepassword.svg","material-opacity":"material/opacity.svg","material-open-in-app":"material/open-in-app.svg","material-open-in-new":"material/open-in-new.svg","material-open-source-initiative":"material/open-source-initiative.svg","material-openid":"material/openid.svg","material-opera":"material/opera.svg","material-orbit-variant":"material/orbit-variant.svg","material-orbit":"material/orbit.svg","material-order-alphabetical-ascending":"material/order-alphabetical-ascending.svg","material-order-alphabetical-descending":"material/order-alphabetical-descending.svg","material-order-bool-ascending-variant":"material/order-bool-ascending-variant.svg","material-order-bool-ascending":"material/order-bool-ascending.svg","material-order-bool-descending-variant":"material/order-bool-descending-variant.svg","material-order-bool-descending":"material/order-bool-descending.svg","material-order-numeric-ascending":"material/order-numeric-ascending.svg","material-order-numeric-descending":"material/order-numeric-descending.svg","material-origin":"material/origin.svg","material-ornament-variant":"material/ornament-variant.svg","material-ornament":"material/ornament.svg","material-outdoor-lamp":"material/outdoor-lamp.svg","material-overscan":"material/overscan.svg","material-owl":"material/owl.svg","material-pac-man":"material/pac-man.svg","material-package-check":"material/package-check.svg","material-package-down":"material/package-down.svg","material-package-up":"material/package-up.svg","material-package-variant-closed-check":"material/package-variant-closed-check.svg","material-package-variant-closed-minus":"material/package-variant-closed-minus.svg","material-package-variant-closed-plus":"material/package-variant-closed-plus.svg","material-package-variant-closed-remove":"material/package-variant-closed-remove.svg","material-package-variant-closed":"material/package-variant-closed.svg","material-package-variant-minus":"material/package-variant-minus.svg","material-package-variant-plus":"material/package-variant-plus.svg","material-package-variant-remove":"material/package-variant-remove.svg","material-package-variant":"material/package-variant.svg","material-package":"material/package.svg","material-page-first":"material/page-first.svg","material-page-last":"material/page-last.svg","material-page-layout-body":"material/page-layout-body.svg","material-page-layout-footer":"material/page-layout-footer.svg","material-page-layout-header-footer":"material/page-layout-header-footer.svg","material-page-layout-header":"material/page-layout-header.svg","material-page-layout-sidebar-left":"material/page-layout-sidebar-left.svg","material-page-layout-sidebar-right":"material/page-layout-sidebar-right.svg","material-page-next-outline":"material/page-next-outline.svg","material-page-next":"material/page-next.svg","material-page-previous-outline":"material/page-previous-outline.svg","material-page-previous":"material/page-previous.svg","material-pail-minus-outline":"material/pail-minus-outline.svg","material-pail-minus":"material/pail-minus.svg","material-pail-off-outline":"material/pail-off-outline.svg","material-pail-off":"material/pail-off.svg","material-pail-outline":"material/pail-outline.svg","material-pail-plus-outline":"material/pail-plus-outline.svg","material-pail-plus":"material/pail-plus.svg","material-pail-remove-outline":"material/pail-remove-outline.svg","material-pail-remove":"material/pail-remove.svg","material-pail":"material/pail.svg","material-palette-advanced":"material/palette-advanced.svg","material-palette-outline":"material/palette-outline.svg","material-palette-swatch-outline":"material/palette-swatch-outline.svg","material-palette-swatch-variant":"material/palette-swatch-variant.svg","material-palette-swatch":"material/palette-swatch.svg","material-palette":"material/palette.svg","material-palm-tree":"material/palm-tree.svg","material-pan-bottom-left":"material/pan-bottom-left.svg","material-pan-bottom-right":"material/pan-bottom-right.svg","material-pan-down":"material/pan-down.svg","material-pan-horizontal":"material/pan-horizontal.svg","material-pan-left":"material/pan-left.svg","material-pan-right":"material/pan-right.svg","material-pan-top-left":"material/pan-top-left.svg","material-pan-top-right":"material/pan-top-right.svg","material-pan-up":"material/pan-up.svg","material-pan-vertical":"material/pan-vertical.svg","material-pan":"material/pan.svg","material-panda":"material/panda.svg","material-pandora":"material/pandora.svg","material-panorama-fisheye":"material/panorama-fisheye.svg","material-panorama-horizontal-outline":"material/panorama-horizontal-outline.svg","material-panorama-horizontal":"material/panorama-horizontal.svg","material-panorama-outline":"material/panorama-outline.svg","material-panorama-sphere-outline":"material/panorama-sphere-outline.svg","material-panorama-sphere":"material/panorama-sphere.svg","material-panorama-variant-outline":"material/panorama-variant-outline.svg","material-panorama-variant":"material/panorama-variant.svg","material-panorama-vertical-outline":"material/panorama-vertical-outline.svg","material-panorama-vertical":"material/panorama-vertical.svg","material-panorama-wide-angle-outline":"material/panorama-wide-angle-outline.svg","material-panorama-wide-angle":"material/panorama-wide-angle.svg","material-panorama":"material/panorama.svg","material-paper-cut-vertical":"material/paper-cut-vertical.svg","material-paper-roll-outline":"material/paper-roll-outline.svg","material-paper-roll":"material/paper-roll.svg","material-paperclip-check":"material/paperclip-check.svg","material-paperclip-lock":"material/paperclip-lock.svg","material-paperclip-minus":"material/paperclip-minus.svg","material-paperclip-off":"material/paperclip-off.svg","material-paperclip-plus":"material/paperclip-plus.svg","material-paperclip-remove":"material/paperclip-remove.svg","material-paperclip":"material/paperclip.svg","material-parachute-outline":"material/parachute-outline.svg","material-parachute":"material/parachute.svg","material-paragliding":"material/paragliding.svg","material-parking":"material/parking.svg","material-party-popper":"material/party-popper.svg","material-passport-biometric":"material/passport-biometric.svg","material-passport":"material/passport.svg","material-pasta":"material/pasta.svg","material-patio-heater":"material/patio-heater.svg","material-patreon":"material/patreon.svg","material-pause-box-outline":"material/pause-box-outline.svg","material-pause-box":"material/pause-box.svg","material-pause-circle-outline":"material/pause-circle-outline.svg","material-pause-circle":"material/pause-circle.svg","material-pause-octagon-outline":"material/pause-octagon-outline.svg","material-pause-octagon":"material/pause-octagon.svg","material-pause":"material/pause.svg","material-paw-off-outline":"material/paw-off-outline.svg","material-paw-off":"material/paw-off.svg","material-paw-outline":"material/paw-outline.svg","material-paw":"material/paw.svg","material-peace":"material/peace.svg","material-peanut-off-outline":"material/peanut-off-outline.svg","material-peanut-off":"material/peanut-off.svg","material-peanut-outline":"material/peanut-outline.svg","material-peanut":"material/peanut.svg","material-pen-lock":"material/pen-lock.svg","material-pen-minus":"material/pen-minus.svg","material-pen-off":"material/pen-off.svg","material-pen-plus":"material/pen-plus.svg","material-pen-remove":"material/pen-remove.svg","material-pen":"material/pen.svg","material-pencil-box-multiple-outline":"material/pencil-box-multiple-outline.svg","material-pencil-box-multiple":"material/pencil-box-multiple.svg","material-pencil-box-outline":"material/pencil-box-outline.svg","material-pencil-box":"material/pencil-box.svg","material-pencil-circle-outline":"material/pencil-circle-outline.svg","material-pencil-circle":"material/pencil-circle.svg","material-pencil-lock-outline":"material/pencil-lock-outline.svg","material-pencil-lock":"material/pencil-lock.svg","material-pencil-minus-outline":"material/pencil-minus-outline.svg","material-pencil-minus":"material/pencil-minus.svg","material-pencil-off-outline":"material/pencil-off-outline.svg","material-pencil-off":"material/pencil-off.svg","material-pencil-outline":"material/pencil-outline.svg","material-pencil-plus-outline":"material/pencil-plus-outline.svg","material-pencil-plus":"material/pencil-plus.svg","material-pencil-remove-outline":"material/pencil-remove-outline.svg","material-pencil-remove":"material/pencil-remove.svg","material-pencil-ruler-outline":"material/pencil-ruler-outline.svg","material-pencil-ruler":"material/pencil-ruler.svg","material-pencil":"material/pencil.svg","material-penguin":"material/penguin.svg","material-pentagon-outline":"material/pentagon-outline.svg","material-pentagon":"material/pentagon.svg","material-pentagram":"material/pentagram.svg","material-percent-box-outline":"material/percent-box-outline.svg","material-percent-box":"material/percent-box.svg","material-percent-circle-outline":"material/percent-circle-outline.svg","material-percent-circle":"material/percent-circle.svg","material-percent-outline":"material/percent-outline.svg","material-percent":"material/percent.svg","material-periodic-table":"material/periodic-table.svg","material-perspective-less":"material/perspective-less.svg","material-perspective-more":"material/perspective-more.svg","material-ph":"material/ph.svg","material-phone-alert-outline":"material/phone-alert-outline.svg","material-phone-alert":"material/phone-alert.svg","material-phone-bluetooth-outline":"material/phone-bluetooth-outline.svg","material-phone-bluetooth":"material/phone-bluetooth.svg","material-phone-cancel-outline":"material/phone-cancel-outline.svg","material-phone-cancel":"material/phone-cancel.svg","material-phone-check-outline":"material/phone-check-outline.svg","material-phone-check":"material/phone-check.svg","material-phone-classic-off":"material/phone-classic-off.svg","material-phone-classic":"material/phone-classic.svg","material-phone-clock":"material/phone-clock.svg","material-phone-dial-outline":"material/phone-dial-outline.svg","material-phone-dial":"material/phone-dial.svg","material-phone-forward-outline":"material/phone-forward-outline.svg","material-phone-forward":"material/phone-forward.svg","material-phone-hangup-outline":"material/phone-hangup-outline.svg","material-phone-hangup":"material/phone-hangup.svg","material-phone-in-talk-outline":"material/phone-in-talk-outline.svg","material-phone-in-talk":"material/phone-in-talk.svg","material-phone-incoming-outgoing-outline":"material/phone-incoming-outgoing-outline.svg","material-phone-incoming-outgoing":"material/phone-incoming-outgoing.svg","material-phone-incoming-outline":"material/phone-incoming-outline.svg","material-phone-incoming":"material/phone-incoming.svg","material-phone-lock-outline":"material/phone-lock-outline.svg","material-phone-lock":"material/phone-lock.svg","material-phone-log-outline":"material/phone-log-outline.svg","material-phone-log":"material/phone-log.svg","material-phone-message-outline":"material/phone-message-outline.svg","material-phone-message":"material/phone-message.svg","material-phone-minus-outline":"material/phone-minus-outline.svg","material-phone-minus":"material/phone-minus.svg","material-phone-missed-outline":"material/phone-missed-outline.svg","material-phone-missed":"material/phone-missed.svg","material-phone-off-outline":"material/phone-off-outline.svg","material-phone-off":"material/phone-off.svg","material-phone-outgoing-outline":"material/phone-outgoing-outline.svg","material-phone-outgoing":"material/phone-outgoing.svg","material-phone-outline":"material/phone-outline.svg","material-phone-paused-outline":"material/phone-paused-outline.svg","material-phone-paused":"material/phone-paused.svg","material-phone-plus-outline":"material/phone-plus-outline.svg","material-phone-plus":"material/phone-plus.svg","material-phone-refresh-outline":"material/phone-refresh-outline.svg","material-phone-refresh":"material/phone-refresh.svg","material-phone-remove-outline":"material/phone-remove-outline.svg","material-phone-remove":"material/phone-remove.svg","material-phone-return-outline":"material/phone-return-outline.svg","material-phone-return":"material/phone-return.svg","material-phone-ring-outline":"material/phone-ring-outline.svg","material-phone-ring":"material/phone-ring.svg","material-phone-rotate-landscape":"material/phone-rotate-landscape.svg","material-phone-rotate-portrait":"material/phone-rotate-portrait.svg","material-phone-settings-outline":"material/phone-settings-outline.svg","material-phone-settings":"material/phone-settings.svg","material-phone-sync-outline":"material/phone-sync-outline.svg","material-phone-sync":"material/phone-sync.svg","material-phone-voip":"material/phone-voip.svg","material-phone":"material/phone.svg","material-pi-box":"material/pi-box.svg","material-pi-hole":"material/pi-hole.svg","material-pi":"material/pi.svg","material-piano-off":"material/piano-off.svg","material-piano":"material/piano.svg","material-pickaxe":"material/pickaxe.svg","material-picture-in-picture-bottom-right-outline":"material/picture-in-picture-bottom-right-outline.svg","material-picture-in-picture-bottom-right":"material/picture-in-picture-bottom-right.svg","material-picture-in-picture-top-right-outline":"material/picture-in-picture-top-right-outline.svg","material-picture-in-picture-top-right":"material/picture-in-picture-top-right.svg","material-pier-crane":"material/pier-crane.svg","material-pier":"material/pier.svg","material-pig-variant-outline":"material/pig-variant-outline.svg","material-pig-variant":"material/pig-variant.svg","material-pig":"material/pig.svg","material-piggy-bank-outline":"material/piggy-bank-outline.svg","material-piggy-bank":"material/piggy-bank.svg","material-pill-multiple":"material/pill-multiple.svg","material-pill-off":"material/pill-off.svg","material-pill":"material/pill.svg","material-pillar":"material/pillar.svg","material-pin-off-outline":"material/pin-off-outline.svg","material-pin-off":"material/pin-off.svg","material-pin-outline":"material/pin-outline.svg","material-pin":"material/pin.svg","material-pine-tree-box":"material/pine-tree-box.svg","material-pine-tree-fire":"material/pine-tree-fire.svg","material-pine-tree-variant-outline":"material/pine-tree-variant-outline.svg","material-pine-tree-variant":"material/pine-tree-variant.svg","material-pine-tree":"material/pine-tree.svg","material-pinterest":"material/pinterest.svg","material-pinwheel-outline":"material/pinwheel-outline.svg","material-pinwheel":"material/pinwheel.svg","material-pipe-disconnected":"material/pipe-disconnected.svg","material-pipe-leak":"material/pipe-leak.svg","material-pipe-valve":"material/pipe-valve.svg","material-pipe-wrench":"material/pipe-wrench.svg","material-pipe":"material/pipe.svg","material-pirate":"material/pirate.svg","material-pistol":"material/pistol.svg","material-piston":"material/piston.svg","material-pitchfork":"material/pitchfork.svg","material-pizza":"material/pizza.svg","material-plane-car":"material/plane-car.svg","material-plane-train":"material/plane-train.svg","material-play-box-edit-outline":"material/play-box-edit-outline.svg","material-play-box-lock-open-outline":"material/play-box-lock-open-outline.svg","material-play-box-lock-open":"material/play-box-lock-open.svg","material-play-box-lock-outline":"material/play-box-lock-outline.svg","material-play-box-lock":"material/play-box-lock.svg","material-play-box-multiple-outline":"material/play-box-multiple-outline.svg","material-play-box-multiple":"material/play-box-multiple.svg","material-play-box-outline":"material/play-box-outline.svg","material-play-box":"material/play-box.svg","material-play-circle-outline":"material/play-circle-outline.svg","material-play-circle":"material/play-circle.svg","material-play-network-outline":"material/play-network-outline.svg","material-play-network":"material/play-network.svg","material-play-outline":"material/play-outline.svg","material-play-pause":"material/play-pause.svg","material-play-protected-content":"material/play-protected-content.svg","material-play-speed":"material/play-speed.svg","material-play":"material/play.svg","material-playlist-check":"material/playlist-check.svg","material-playlist-edit":"material/playlist-edit.svg","material-playlist-minus":"material/playlist-minus.svg","material-playlist-music-outline":"material/playlist-music-outline.svg","material-playlist-music":"material/playlist-music.svg","material-playlist-play":"material/playlist-play.svg","material-playlist-plus":"material/playlist-plus.svg","material-playlist-remove":"material/playlist-remove.svg","material-playlist-star":"material/playlist-star.svg","material-plex":"material/plex.svg","material-pliers":"material/pliers.svg","material-plus-box-multiple-outline":"material/plus-box-multiple-outline.svg","material-plus-box-multiple":"material/plus-box-multiple.svg","material-plus-box-outline":"material/plus-box-outline.svg","material-plus-box":"material/plus-box.svg","material-plus-circle-multiple-outline":"material/plus-circle-multiple-outline.svg","material-plus-circle-multiple":"material/plus-circle-multiple.svg","material-plus-circle-outline":"material/plus-circle-outline.svg","material-plus-circle":"material/plus-circle.svg","material-plus-lock-open":"material/plus-lock-open.svg","material-plus-lock":"material/plus-lock.svg","material-plus-minus-box":"material/plus-minus-box.svg","material-plus-minus-variant":"material/plus-minus-variant.svg","material-plus-minus":"material/plus-minus.svg","material-plus-network-outline":"material/plus-network-outline.svg","material-plus-network":"material/plus-network.svg","material-plus-outline":"material/plus-outline.svg","material-plus-thick":"material/plus-thick.svg","material-plus":"material/plus.svg","material-podcast":"material/podcast.svg","material-podium-bronze":"material/podium-bronze.svg","material-podium-gold":"material/podium-gold.svg","material-podium-silver":"material/podium-silver.svg","material-podium":"material/podium.svg","material-point-of-sale":"material/point-of-sale.svg","material-pokeball":"material/pokeball.svg","material-pokemon-go":"material/pokemon-go.svg","material-poker-chip":"material/poker-chip.svg","material-polaroid":"material/polaroid.svg","material-police-badge-outline":"material/police-badge-outline.svg","material-police-badge":"material/police-badge.svg","material-police-station":"material/police-station.svg","material-poll":"material/poll.svg","material-polo":"material/polo.svg","material-polymer":"material/polymer.svg","material-pool-thermometer":"material/pool-thermometer.svg","material-pool":"material/pool.svg","material-popcorn":"material/popcorn.svg","material-post-lamp":"material/post-lamp.svg","material-post-outline":"material/post-outline.svg","material-post":"material/post.svg","material-postage-stamp":"material/postage-stamp.svg","material-pot-mix-outline":"material/pot-mix-outline.svg","material-pot-mix":"material/pot-mix.svg","material-pot-outline":"material/pot-outline.svg","material-pot-steam-outline":"material/pot-steam-outline.svg","material-pot-steam":"material/pot-steam.svg","material-pot":"material/pot.svg","material-pound-box-outline":"material/pound-box-outline.svg","material-pound-box":"material/pound-box.svg","material-pound":"material/pound.svg","material-power-cycle":"material/power-cycle.svg","material-power-off":"material/power-off.svg","material-power-on":"material/power-on.svg","material-power-plug-battery-outline":"material/power-plug-battery-outline.svg","material-power-plug-battery":"material/power-plug-battery.svg","material-power-plug-off-outline":"material/power-plug-off-outline.svg","material-power-plug-off":"material/power-plug-off.svg","material-power-plug-outline":"material/power-plug-outline.svg","material-power-plug":"material/power-plug.svg","material-power-settings":"material/power-settings.svg","material-power-sleep":"material/power-sleep.svg","material-power-socket-au":"material/power-socket-au.svg","material-power-socket-ch":"material/power-socket-ch.svg","material-power-socket-de":"material/power-socket-de.svg","material-power-socket-eu":"material/power-socket-eu.svg","material-power-socket-fr":"material/power-socket-fr.svg","material-power-socket-it":"material/power-socket-it.svg","material-power-socket-jp":"material/power-socket-jp.svg","material-power-socket-uk":"material/power-socket-uk.svg","material-power-socket-us":"material/power-socket-us.svg","material-power-socket":"material/power-socket.svg","material-power-standby":"material/power-standby.svg","material-power":"material/power.svg","material-powershell":"material/powershell.svg","material-prescription":"material/prescription.svg","material-presentation-play":"material/presentation-play.svg","material-presentation":"material/presentation.svg","material-pretzel":"material/pretzel.svg","material-printer-3d-nozzle-alert-outline":"material/printer-3d-nozzle-alert-outline.svg","material-printer-3d-nozzle-alert":"material/printer-3d-nozzle-alert.svg","material-printer-3d-nozzle-heat-outline":"material/printer-3d-nozzle-heat-outline.svg","material-printer-3d-nozzle-heat":"material/printer-3d-nozzle-heat.svg","material-printer-3d-nozzle-off-outline":"material/printer-3d-nozzle-off-outline.svg","material-printer-3d-nozzle-off":"material/printer-3d-nozzle-off.svg","material-printer-3d-nozzle-outline":"material/printer-3d-nozzle-outline.svg","material-printer-3d-nozzle":"material/printer-3d-nozzle.svg","material-printer-3d-off":"material/printer-3d-off.svg","material-printer-3d":"material/printer-3d.svg","material-printer-alert":"material/printer-alert.svg","material-printer-check":"material/printer-check.svg","material-printer-eye":"material/printer-eye.svg","material-printer-off-outline":"material/printer-off-outline.svg","material-printer-off":"material/printer-off.svg","material-printer-outline":"material/printer-outline.svg","material-printer-pos-alert-outline":"material/printer-pos-alert-outline.svg","material-printer-pos-alert":"material/printer-pos-alert.svg","material-printer-pos-cancel-outline":"material/printer-pos-cancel-outline.svg","material-printer-pos-cancel":"material/printer-pos-cancel.svg","material-printer-pos-check-outline":"material/printer-pos-check-outline.svg","material-printer-pos-check":"material/printer-pos-check.svg","material-printer-pos-cog-outline":"material/printer-pos-cog-outline.svg","material-printer-pos-cog":"material/printer-pos-cog.svg","material-printer-pos-edit-outline":"material/printer-pos-edit-outline.svg","material-printer-pos-edit":"material/printer-pos-edit.svg","material-printer-pos-minus-outline":"material/printer-pos-minus-outline.svg","material-printer-pos-minus":"material/printer-pos-minus.svg","material-printer-pos-network-outline":"material/printer-pos-network-outline.svg","material-printer-pos-network":"material/printer-pos-network.svg","material-printer-pos-off-outline":"material/printer-pos-off-outline.svg","material-printer-pos-off":"material/printer-pos-off.svg","material-printer-pos-outline":"material/printer-pos-outline.svg","material-printer-pos-pause-outline":"material/printer-pos-pause-outline.svg","material-printer-pos-pause":"material/printer-pos-pause.svg","material-printer-pos-play-outline":"material/printer-pos-play-outline.svg","material-printer-pos-play":"material/printer-pos-play.svg","material-printer-pos-plus-outline":"material/printer-pos-plus-outline.svg","material-printer-pos-plus":"material/printer-pos-plus.svg","material-printer-pos-refresh-outline":"material/printer-pos-refresh-outline.svg","material-printer-pos-refresh":"material/printer-pos-refresh.svg","material-printer-pos-remove-outline":"material/printer-pos-remove-outline.svg","material-printer-pos-remove":"material/printer-pos-remove.svg","material-printer-pos-star-outline":"material/printer-pos-star-outline.svg","material-printer-pos-star":"material/printer-pos-star.svg","material-printer-pos-stop-outline":"material/printer-pos-stop-outline.svg","material-printer-pos-stop":"material/printer-pos-stop.svg","material-printer-pos-sync-outline":"material/printer-pos-sync-outline.svg","material-printer-pos-sync":"material/printer-pos-sync.svg","material-printer-pos-wrench-outline":"material/printer-pos-wrench-outline.svg","material-printer-pos-wrench":"material/printer-pos-wrench.svg","material-printer-pos":"material/printer-pos.svg","material-printer-search":"material/printer-search.svg","material-printer-settings":"material/printer-settings.svg","material-printer-wireless":"material/printer-wireless.svg","material-printer":"material/printer.svg","material-priority-high":"material/priority-high.svg","material-priority-low":"material/priority-low.svg","material-professional-hexagon":"material/professional-hexagon.svg","material-progress-alert":"material/progress-alert.svg","material-progress-check":"material/progress-check.svg","material-progress-clock":"material/progress-clock.svg","material-progress-close":"material/progress-close.svg","material-progress-download":"material/progress-download.svg","material-progress-helper":"material/progress-helper.svg","material-progress-pencil":"material/progress-pencil.svg","material-progress-question":"material/progress-question.svg","material-progress-star-four-points":"material/progress-star-four-points.svg","material-progress-star":"material/progress-star.svg","material-progress-upload":"material/progress-upload.svg","material-progress-wrench":"material/progress-wrench.svg","material-projector-off":"material/projector-off.svg","material-projector-screen-off-outline":"material/projector-screen-off-outline.svg","material-projector-screen-off":"material/projector-screen-off.svg","material-projector-screen-outline":"material/projector-screen-outline.svg","material-projector-screen-variant-off-outline":"material/projector-screen-variant-off-outline.svg","material-projector-screen-variant-off":"material/projector-screen-variant-off.svg","material-projector-screen-variant-outline":"material/projector-screen-variant-outline.svg","material-projector-screen-variant":"material/projector-screen-variant.svg","material-projector-screen":"material/projector-screen.svg","material-projector":"material/projector.svg","material-propane-tank-outline":"material/propane-tank-outline.svg","material-propane-tank":"material/propane-tank.svg","material-protocol":"material/protocol.svg","material-publish-off":"material/publish-off.svg","material-publish":"material/publish.svg","material-pulse":"material/pulse.svg","material-pump-off":"material/pump-off.svg","material-pump":"material/pump.svg","material-pumpkin":"material/pumpkin.svg","material-purse-outline":"material/purse-outline.svg","material-purse":"material/purse.svg","material-puzzle-check-outline":"material/puzzle-check-outline.svg","material-puzzle-check":"material/puzzle-check.svg","material-puzzle-edit-outline":"material/puzzle-edit-outline.svg","material-puzzle-edit":"material/puzzle-edit.svg","material-puzzle-heart-outline":"material/puzzle-heart-outline.svg","material-puzzle-heart":"material/puzzle-heart.svg","material-puzzle-minus-outline":"material/puzzle-minus-outline.svg","material-puzzle-minus":"material/puzzle-minus.svg","material-puzzle-outline":"material/puzzle-outline.svg","material-puzzle-plus-outline":"material/puzzle-plus-outline.svg","material-puzzle-plus":"material/puzzle-plus.svg","material-puzzle-remove-outline":"material/puzzle-remove-outline.svg","material-puzzle-remove":"material/puzzle-remove.svg","material-puzzle-star-outline":"material/puzzle-star-outline.svg","material-puzzle-star":"material/puzzle-star.svg","material-puzzle":"material/puzzle.svg","material-pyramid-off":"material/pyramid-off.svg","material-pyramid":"material/pyramid.svg","material-qi":"material/qi.svg","material-qqchat":"material/qqchat.svg","material-qrcode-edit":"material/qrcode-edit.svg","material-qrcode-minus":"material/qrcode-minus.svg","material-qrcode-plus":"material/qrcode-plus.svg","material-qrcode-remove":"material/qrcode-remove.svg","material-qrcode-scan":"material/qrcode-scan.svg","material-qrcode":"material/qrcode.svg","material-quadcopter":"material/quadcopter.svg","material-quality-high":"material/quality-high.svg","material-quality-low":"material/quality-low.svg","material-quality-medium":"material/quality-medium.svg","material-quora":"material/quora.svg","material-rabbit-variant-outline":"material/rabbit-variant-outline.svg","material-rabbit-variant":"material/rabbit-variant.svg","material-rabbit":"material/rabbit.svg","material-racing-helmet":"material/racing-helmet.svg","material-racquetball":"material/racquetball.svg","material-radar":"material/radar.svg","material-radiator-disabled":"material/radiator-disabled.svg","material-radiator-off":"material/radiator-off.svg","material-radiator":"material/radiator.svg","material-radio-am":"material/radio-am.svg","material-radio-fm":"material/radio-fm.svg","material-radio-handheld":"material/radio-handheld.svg","material-radio-off":"material/radio-off.svg","material-radio-tower":"material/radio-tower.svg","material-radio":"material/radio.svg","material-radioactive-circle-outline":"material/radioactive-circle-outline.svg","material-radioactive-circle":"material/radioactive-circle.svg","material-radioactive-off":"material/radioactive-off.svg","material-radioactive":"material/radioactive.svg","material-radiobox-blank":"material/radiobox-blank.svg","material-radiobox-indeterminate-variant":"material/radiobox-indeterminate-variant.svg","material-radiobox-marked":"material/radiobox-marked.svg","material-radiology-box-outline":"material/radiology-box-outline.svg","material-radiology-box":"material/radiology-box.svg","material-radius-outline":"material/radius-outline.svg","material-radius":"material/radius.svg","material-railroad-light":"material/railroad-light.svg","material-rake":"material/rake.svg","material-raspberry-pi":"material/raspberry-pi.svg","material-raw-off":"material/raw-off.svg","material-raw":"material/raw.svg","material-ray-end-arrow":"material/ray-end-arrow.svg","material-ray-end":"material/ray-end.svg","material-ray-start-arrow":"material/ray-start-arrow.svg","material-ray-start-end":"material/ray-start-end.svg","material-ray-start-vertex-end":"material/ray-start-vertex-end.svg","material-ray-start":"material/ray-start.svg","material-ray-vertex":"material/ray-vertex.svg","material-razor-double-edge":"material/razor-double-edge.svg","material-razor-single-edge":"material/razor-single-edge.svg","material-react":"material/react.svg","material-read":"material/read.svg","material-receipt-clock-outline":"material/receipt-clock-outline.svg","material-receipt-clock":"material/receipt-clock.svg","material-receipt-outline":"material/receipt-outline.svg","material-receipt-send-outline":"material/receipt-send-outline.svg","material-receipt-send":"material/receipt-send.svg","material-receipt-text-arrow-left-outline":"material/receipt-text-arrow-left-outline.svg","material-receipt-text-arrow-left":"material/receipt-text-arrow-left.svg","material-receipt-text-arrow-right-outline":"material/receipt-text-arrow-right-outline.svg","material-receipt-text-arrow-right":"material/receipt-text-arrow-right.svg","material-receipt-text-check-outline":"material/receipt-text-check-outline.svg","material-receipt-text-check":"material/receipt-text-check.svg","material-receipt-text-clock-outline":"material/receipt-text-clock-outline.svg","material-receipt-text-clock":"material/receipt-text-clock.svg","material-receipt-text-edit-outline":"material/receipt-text-edit-outline.svg","material-receipt-text-edit":"material/receipt-text-edit.svg","material-receipt-text-minus-outline":"material/receipt-text-minus-outline.svg","material-receipt-text-minus":"material/receipt-text-minus.svg","material-receipt-text-outline":"material/receipt-text-outline.svg","material-receipt-text-plus-outline":"material/receipt-text-plus-outline.svg","material-receipt-text-plus":"material/receipt-text-plus.svg","material-receipt-text-remove-outline":"material/receipt-text-remove-outline.svg","material-receipt-text-remove":"material/receipt-text-remove.svg","material-receipt-text-send-outline":"material/receipt-text-send-outline.svg","material-receipt-text-send":"material/receipt-text-send.svg","material-receipt-text":"material/receipt-text.svg","material-receipt":"material/receipt.svg","material-record-circle-outline":"material/record-circle-outline.svg","material-record-circle":"material/record-circle.svg","material-record-player":"material/record-player.svg","material-record-rec":"material/record-rec.svg","material-record":"material/record.svg","material-rectangle-outline":"material/rectangle-outline.svg","material-rectangle":"material/rectangle.svg","material-recycle-variant":"material/recycle-variant.svg","material-recycle":"material/recycle.svg","material-reddit":"material/reddit.svg","material-redhat":"material/redhat.svg","material-redo-variant":"material/redo-variant.svg","material-redo":"material/redo.svg","material-reflect-horizontal":"material/reflect-horizontal.svg","material-reflect-vertical":"material/reflect-vertical.svg","material-refresh-auto":"material/refresh-auto.svg","material-refresh-circle":"material/refresh-circle.svg","material-refresh":"material/refresh.svg","material-regex":"material/regex.svg","material-registered-trademark":"material/registered-trademark.svg","material-reiterate":"material/reiterate.svg","material-relation-many-to-many":"material/relation-many-to-many.svg","material-relation-many-to-one-or-many":"material/relation-many-to-one-or-many.svg","material-relation-many-to-one":"material/relation-many-to-one.svg","material-relation-many-to-only-one":"material/relation-many-to-only-one.svg","material-relation-many-to-zero-or-many":"material/relation-many-to-zero-or-many.svg","material-relation-many-to-zero-or-one":"material/relation-many-to-zero-or-one.svg","material-relation-one-or-many-to-many":"material/relation-one-or-many-to-many.svg","material-relation-one-or-many-to-one-or-many":"material/relation-one-or-many-to-one-or-many.svg","material-relation-one-or-many-to-one":"material/relation-one-or-many-to-one.svg","material-relation-one-or-many-to-only-one":"material/relation-one-or-many-to-only-one.svg","material-relation-one-or-many-to-zero-or-many":"material/relation-one-or-many-to-zero-or-many.svg","material-relation-one-or-many-to-zero-or-one":"material/relation-one-or-many-to-zero-or-one.svg","material-relation-one-to-many":"material/relation-one-to-many.svg","material-relation-one-to-one-or-many":"material/relation-one-to-one-or-many.svg","material-relation-one-to-one":"material/relation-one-to-one.svg","material-relation-one-to-only-one":"material/relation-one-to-only-one.svg","material-relation-one-to-zero-or-many":"material/relation-one-to-zero-or-many.svg","material-relation-one-to-zero-or-one":"material/relation-one-to-zero-or-one.svg","material-relation-only-one-to-many":"material/relation-only-one-to-many.svg","material-relation-only-one-to-one-or-many":"material/relation-only-one-to-one-or-many.svg","material-relation-only-one-to-one":"material/relation-only-one-to-one.svg","material-relation-only-one-to-only-one":"material/relation-only-one-to-only-one.svg","material-relation-only-one-to-zero-or-many":"material/relation-only-one-to-zero-or-many.svg","material-relation-only-one-to-zero-or-one":"material/relation-only-one-to-zero-or-one.svg","material-relation-zero-or-many-to-many":"material/relation-zero-or-many-to-many.svg","material-relation-zero-or-many-to-one-or-many":"material/relation-zero-or-many-to-one-or-many.svg","material-relation-zero-or-many-to-one":"material/relation-zero-or-many-to-one.svg","material-relation-zero-or-many-to-only-one":"material/relation-zero-or-many-to-only-one.svg","material-relation-zero-or-many-to-zero-or-many":"material/relation-zero-or-many-to-zero-or-many.svg","material-relation-zero-or-many-to-zero-or-one":"material/relation-zero-or-many-to-zero-or-one.svg","material-relation-zero-or-one-to-many":"material/relation-zero-or-one-to-many.svg","material-relation-zero-or-one-to-one-or-many":"material/relation-zero-or-one-to-one-or-many.svg","material-relation-zero-or-one-to-one":"material/relation-zero-or-one-to-one.svg","material-relation-zero-or-one-to-only-one":"material/relation-zero-or-one-to-only-one.svg","material-relation-zero-or-one-to-zero-or-many":"material/relation-zero-or-one-to-zero-or-many.svg","material-relation-zero-or-one-to-zero-or-one":"material/relation-zero-or-one-to-zero-or-one.svg","material-relative-scale":"material/relative-scale.svg","material-reload-alert":"material/reload-alert.svg","material-reload":"material/reload.svg","material-reminder":"material/reminder.svg","material-remote-desktop":"material/remote-desktop.svg","material-remote-off":"material/remote-off.svg","material-remote-tv-off":"material/remote-tv-off.svg","material-remote-tv":"material/remote-tv.svg","material-remote":"material/remote.svg","material-rename-box-outline":"material/rename-box-outline.svg","material-rename-box":"material/rename-box.svg","material-rename-outline":"material/rename-outline.svg","material-rename":"material/rename.svg","material-reorder-horizontal":"material/reorder-horizontal.svg","material-reorder-vertical":"material/reorder-vertical.svg","material-repeat-off":"material/repeat-off.svg","material-repeat-once":"material/repeat-once.svg","material-repeat-variant":"material/repeat-variant.svg","material-repeat":"material/repeat.svg","material-replay":"material/replay.svg","material-reply-all-outline":"material/reply-all-outline.svg","material-reply-all":"material/reply-all.svg","material-reply-circle":"material/reply-circle.svg","material-reply-outline":"material/reply-outline.svg","material-reply":"material/reply.svg","material-reproduction":"material/reproduction.svg","material-resistor-nodes":"material/resistor-nodes.svg","material-resistor":"material/resistor.svg","material-resize-bottom-right":"material/resize-bottom-right.svg","material-resize":"material/resize.svg","material-responsive":"material/responsive.svg","material-restart-alert":"material/restart-alert.svg","material-restart-off":"material/restart-off.svg","material-restart":"material/restart.svg","material-restore-alert":"material/restore-alert.svg","material-restore":"material/restore.svg","material-rewind-10":"material/rewind-10.svg","material-rewind-15":"material/rewind-15.svg","material-rewind-30":"material/rewind-30.svg","material-rewind-45":"material/rewind-45.svg","material-rewind-5":"material/rewind-5.svg","material-rewind-60":"material/rewind-60.svg","material-rewind-outline":"material/rewind-outline.svg","material-rewind":"material/rewind.svg","material-rhombus-medium-outline":"material/rhombus-medium-outline.svg","material-rhombus-medium":"material/rhombus-medium.svg","material-rhombus-outline":"material/rhombus-outline.svg","material-rhombus-split-outline":"material/rhombus-split-outline.svg","material-rhombus-split":"material/rhombus-split.svg","material-rhombus":"material/rhombus.svg","material-ribbon":"material/ribbon.svg","material-rice":"material/rice.svg","material-rickshaw-electric":"material/rickshaw-electric.svg","material-rickshaw":"material/rickshaw.svg","material-ring":"material/ring.svg","material-rivet":"material/rivet.svg","material-road-variant":"material/road-variant.svg","material-road":"material/road.svg","material-robber":"material/robber.svg","material-robot-angry-outline":"material/robot-angry-outline.svg","material-robot-angry":"material/robot-angry.svg","material-robot-confused-outline":"material/robot-confused-outline.svg","material-robot-confused":"material/robot-confused.svg","material-robot-dead-outline":"material/robot-dead-outline.svg","material-robot-dead":"material/robot-dead.svg","material-robot-excited-outline":"material/robot-excited-outline.svg","material-robot-excited":"material/robot-excited.svg","material-robot-happy-outline":"material/robot-happy-outline.svg","material-robot-happy":"material/robot-happy.svg","material-robot-industrial-outline":"material/robot-industrial-outline.svg","material-robot-industrial":"material/robot-industrial.svg","material-robot-love-outline":"material/robot-love-outline.svg","material-robot-love":"material/robot-love.svg","material-robot-mower-outline":"material/robot-mower-outline.svg","material-robot-mower":"material/robot-mower.svg","material-robot-off-outline":"material/robot-off-outline.svg","material-robot-off":"material/robot-off.svg","material-robot-outline":"material/robot-outline.svg","material-robot-vacuum-alert":"material/robot-vacuum-alert.svg","material-robot-vacuum-off":"material/robot-vacuum-off.svg","material-robot-vacuum-variant-alert":"material/robot-vacuum-variant-alert.svg","material-robot-vacuum-variant-off":"material/robot-vacuum-variant-off.svg","material-robot-vacuum-variant":"material/robot-vacuum-variant.svg","material-robot-vacuum":"material/robot-vacuum.svg","material-robot":"material/robot.svg","material-rocket-launch-outline":"material/rocket-launch-outline.svg","material-rocket-launch":"material/rocket-launch.svg","material-rocket-outline":"material/rocket-outline.svg","material-rocket":"material/rocket.svg","material-rodent":"material/rodent.svg","material-roller-shade-closed":"material/roller-shade-closed.svg","material-roller-shade":"material/roller-shade.svg","material-roller-skate-off":"material/roller-skate-off.svg","material-roller-skate":"material/roller-skate.svg","material-rollerblade-off":"material/rollerblade-off.svg","material-rollerblade":"material/rollerblade.svg","material-rollupjs":"material/rollupjs.svg","material-rolodex-outline":"material/rolodex-outline.svg","material-rolodex":"material/rolodex.svg","material-roman-numeral-1":"material/roman-numeral-1.svg","material-roman-numeral-10":"material/roman-numeral-10.svg","material-roman-numeral-2":"material/roman-numeral-2.svg","material-roman-numeral-3":"material/roman-numeral-3.svg","material-roman-numeral-4":"material/roman-numeral-4.svg","material-roman-numeral-5":"material/roman-numeral-5.svg","material-roman-numeral-6":"material/roman-numeral-6.svg","material-roman-numeral-7":"material/roman-numeral-7.svg","material-roman-numeral-8":"material/roman-numeral-8.svg","material-roman-numeral-9":"material/roman-numeral-9.svg","material-room-service-outline":"material/room-service-outline.svg","material-room-service":"material/room-service.svg","material-rotate-360":"material/rotate-360.svg","material-rotate-3d-variant":"material/rotate-3d-variant.svg","material-rotate-3d":"material/rotate-3d.svg","material-rotate-left-variant":"material/rotate-left-variant.svg","material-rotate-left":"material/rotate-left.svg","material-rotate-orbit":"material/rotate-orbit.svg","material-rotate-right-variant":"material/rotate-right-variant.svg","material-rotate-right":"material/rotate-right.svg","material-rounded-corner":"material/rounded-corner.svg","material-router-network":"material/router-network.svg","material-router-wireless-off":"material/router-wireless-off.svg","material-router-wireless-settings":"material/router-wireless-settings.svg","material-router-wireless":"material/router-wireless.svg","material-router":"material/router.svg","material-routes-clock":"material/routes-clock.svg","material-routes":"material/routes.svg","material-rowing":"material/rowing.svg","material-rss-box":"material/rss-box.svg","material-rss-off":"material/rss-off.svg","material-rss":"material/rss.svg","material-rug":"material/rug.svg","material-rugby":"material/rugby.svg","material-ruler-square-compass":"material/ruler-square-compass.svg","material-ruler-square":"material/ruler-square.svg","material-ruler":"material/ruler.svg","material-run-fast":"material/run-fast.svg","material-run":"material/run.svg","material-rv-truck":"material/rv-truck.svg","material-sack-outline":"material/sack-outline.svg","material-sack-percent":"material/sack-percent.svg","material-sack":"material/sack.svg","material-safe-square-outline":"material/safe-square-outline.svg","material-safe-square":"material/safe-square.svg","material-safe":"material/safe.svg","material-safety-goggles":"material/safety-goggles.svg","material-sail-boat-sink":"material/sail-boat-sink.svg","material-sail-boat":"material/sail-boat.svg","material-sale-outline":"material/sale-outline.svg","material-sale":"material/sale.svg","material-salesforce":"material/salesforce.svg","material-sass":"material/sass.svg","material-satellite-uplink":"material/satellite-uplink.svg","material-satellite-variant":"material/satellite-variant.svg","material-satellite":"material/satellite.svg","material-sausage-off":"material/sausage-off.svg","material-sausage":"material/sausage.svg","material-saw-blade":"material/saw-blade.svg","material-sawtooth-wave":"material/sawtooth-wave.svg","material-saxophone":"material/saxophone.svg","material-scale-balance":"material/scale-balance.svg","material-scale-bathroom":"material/scale-bathroom.svg","material-scale-off":"material/scale-off.svg","material-scale-unbalanced":"material/scale-unbalanced.svg","material-scale":"material/scale.svg","material-scan-helper":"material/scan-helper.svg","material-scanner-off":"material/scanner-off.svg","material-scanner":"material/scanner.svg","material-scatter-plot-outline":"material/scatter-plot-outline.svg","material-scatter-plot":"material/scatter-plot.svg","material-scent-off":"material/scent-off.svg","material-scent":"material/scent.svg","material-school-outline":"material/school-outline.svg","material-school":"material/school.svg","material-scissors-cutting":"material/scissors-cutting.svg","material-scooter-electric":"material/scooter-electric.svg","material-scooter":"material/scooter.svg","material-scoreboard-outline":"material/scoreboard-outline.svg","material-scoreboard":"material/scoreboard.svg","material-screen-rotation-lock":"material/screen-rotation-lock.svg","material-screen-rotation":"material/screen-rotation.svg","material-screw-flat-top":"material/screw-flat-top.svg","material-screw-lag":"material/screw-lag.svg","material-screw-machine-flat-top":"material/screw-machine-flat-top.svg","material-screw-machine-round-top":"material/screw-machine-round-top.svg","material-screw-round-top":"material/screw-round-top.svg","material-screwdriver":"material/screwdriver.svg","material-script-outline":"material/script-outline.svg","material-script-text-key-outline":"material/script-text-key-outline.svg","material-script-text-key":"material/script-text-key.svg","material-script-text-outline":"material/script-text-outline.svg","material-script-text-play-outline":"material/script-text-play-outline.svg","material-script-text-play":"material/script-text-play.svg","material-script-text":"material/script-text.svg","material-script":"material/script.svg","material-sd":"material/sd.svg","material-seal-variant":"material/seal-variant.svg","material-seal":"material/seal.svg","material-search-web":"material/search-web.svg","material-seat-flat-angled":"material/seat-flat-angled.svg","material-seat-flat":"material/seat-flat.svg","material-seat-individual-suite":"material/seat-individual-suite.svg","material-seat-legroom-extra":"material/seat-legroom-extra.svg","material-seat-legroom-normal":"material/seat-legroom-normal.svg","material-seat-legroom-reduced":"material/seat-legroom-reduced.svg","material-seat-outline":"material/seat-outline.svg","material-seat-passenger":"material/seat-passenger.svg","material-seat-recline-extra":"material/seat-recline-extra.svg","material-seat-recline-normal":"material/seat-recline-normal.svg","material-seat":"material/seat.svg","material-seatbelt":"material/seatbelt.svg","material-security-network":"material/security-network.svg","material-security":"material/security.svg","material-seed-off-outline":"material/seed-off-outline.svg","material-seed-off":"material/seed-off.svg","material-seed-outline":"material/seed-outline.svg","material-seed-plus-outline":"material/seed-plus-outline.svg","material-seed-plus":"material/seed-plus.svg","material-seed":"material/seed.svg","material-seesaw":"material/seesaw.svg","material-segment":"material/segment.svg","material-select-all":"material/select-all.svg","material-select-arrow-down":"material/select-arrow-down.svg","material-select-arrow-up":"material/select-arrow-up.svg","material-select-color":"material/select-color.svg","material-select-compare":"material/select-compare.svg","material-select-drag":"material/select-drag.svg","material-select-group":"material/select-group.svg","material-select-inverse":"material/select-inverse.svg","material-select-marker":"material/select-marker.svg","material-select-multiple-marker":"material/select-multiple-marker.svg","material-select-multiple":"material/select-multiple.svg","material-select-off":"material/select-off.svg","material-select-place":"material/select-place.svg","material-select-remove":"material/select-remove.svg","material-select-search":"material/select-search.svg","material-select":"material/select.svg","material-selection-drag":"material/selection-drag.svg","material-selection-ellipse-arrow-inside":"material/selection-ellipse-arrow-inside.svg","material-selection-ellipse-remove":"material/selection-ellipse-remove.svg","material-selection-ellipse":"material/selection-ellipse.svg","material-selection-marker":"material/selection-marker.svg","material-selection-multiple-marker":"material/selection-multiple-marker.svg","material-selection-multiple":"material/selection-multiple.svg","material-selection-off":"material/selection-off.svg","material-selection-remove":"material/selection-remove.svg","material-selection-search":"material/selection-search.svg","material-selection":"material/selection.svg","material-semantic-web":"material/semantic-web.svg","material-send-check-outline":"material/send-check-outline.svg","material-send-check":"material/send-check.svg","material-send-circle-outline":"material/send-circle-outline.svg","material-send-circle":"material/send-circle.svg","material-send-clock-outline":"material/send-clock-outline.svg","material-send-clock":"material/send-clock.svg","material-send-lock-outline":"material/send-lock-outline.svg","material-send-lock":"material/send-lock.svg","material-send-outline":"material/send-outline.svg","material-send-variant-clock-outline":"material/send-variant-clock-outline.svg","material-send-variant-clock":"material/send-variant-clock.svg","material-send-variant-outline":"material/send-variant-outline.svg","material-send-variant":"material/send-variant.svg","material-send":"material/send.svg","material-serial-port":"material/serial-port.svg","material-server-minus":"material/server-minus.svg","material-server-network-off":"material/server-network-off.svg","material-server-network":"material/server-network.svg","material-server-off":"material/server-off.svg","material-server-plus":"material/server-plus.svg","material-server-remove":"material/server-remove.svg","material-server-security":"material/server-security.svg","material-server":"material/server.svg","material-set-all":"material/set-all.svg","material-set-center-right":"material/set-center-right.svg","material-set-center":"material/set-center.svg","material-set-left-center":"material/set-left-center.svg","material-set-left-right":"material/set-left-right.svg","material-set-left":"material/set-left.svg","material-set-merge":"material/set-merge.svg","material-set-none":"material/set-none.svg","material-set-right":"material/set-right.svg","material-set-split":"material/set-split.svg","material-set-square":"material/set-square.svg","material-set-top-box":"material/set-top-box.svg","material-settings-helper":"material/settings-helper.svg","material-shaker-outline":"material/shaker-outline.svg","material-shaker":"material/shaker.svg","material-shape-circle-plus":"material/shape-circle-plus.svg","material-shape-outline":"material/shape-outline.svg","material-shape-oval-plus":"material/shape-oval-plus.svg","material-shape-plus-outline":"material/shape-plus-outline.svg","material-shape-plus":"material/shape-plus.svg","material-shape-polygon-plus":"material/shape-polygon-plus.svg","material-shape-rectangle-plus":"material/shape-rectangle-plus.svg","material-shape-square-plus":"material/shape-square-plus.svg","material-shape-square-rounded-plus":"material/shape-square-rounded-plus.svg","material-shape":"material/shape.svg","material-share-all-outline":"material/share-all-outline.svg","material-share-all":"material/share-all.svg","material-share-circle":"material/share-circle.svg","material-share-off-outline":"material/share-off-outline.svg","material-share-off":"material/share-off.svg","material-share-outline":"material/share-outline.svg","material-share-variant-outline":"material/share-variant-outline.svg","material-share-variant":"material/share-variant.svg","material-share":"material/share.svg","material-shark-fin-outline":"material/shark-fin-outline.svg","material-shark-fin":"material/shark-fin.svg","material-shark-off":"material/shark-off.svg","material-shark":"material/shark.svg","material-sheep":"material/sheep.svg","material-shield-account-outline":"material/shield-account-outline.svg","material-shield-account-variant-outline":"material/shield-account-variant-outline.svg","material-shield-account-variant":"material/shield-account-variant.svg","material-shield-account":"material/shield-account.svg","material-shield-airplane-outline":"material/shield-airplane-outline.svg","material-shield-airplane":"material/shield-airplane.svg","material-shield-alert-outline":"material/shield-alert-outline.svg","material-shield-alert":"material/shield-alert.svg","material-shield-bug-outline":"material/shield-bug-outline.svg","material-shield-bug":"material/shield-bug.svg","material-shield-car":"material/shield-car.svg","material-shield-check-outline":"material/shield-check-outline.svg","material-shield-check":"material/shield-check.svg","material-shield-cross-outline":"material/shield-cross-outline.svg","material-shield-cross":"material/shield-cross.svg","material-shield-crown-outline":"material/shield-crown-outline.svg","material-shield-crown":"material/shield-crown.svg","material-shield-edit-outline":"material/shield-edit-outline.svg","material-shield-edit":"material/shield-edit.svg","material-shield-half-full":"material/shield-half-full.svg","material-shield-half":"material/shield-half.svg","material-shield-home-outline":"material/shield-home-outline.svg","material-shield-home":"material/shield-home.svg","material-shield-key-outline":"material/shield-key-outline.svg","material-shield-key":"material/shield-key.svg","material-shield-link-variant-outline":"material/shield-link-variant-outline.svg","material-shield-link-variant":"material/shield-link-variant.svg","material-shield-lock-open-outline":"material/shield-lock-open-outline.svg","material-shield-lock-open":"material/shield-lock-open.svg","material-shield-lock-outline":"material/shield-lock-outline.svg","material-shield-lock":"material/shield-lock.svg","material-shield-moon-outline":"material/shield-moon-outline.svg","material-shield-moon":"material/shield-moon.svg","material-shield-off-outline":"material/shield-off-outline.svg","material-shield-off":"material/shield-off.svg","material-shield-outline":"material/shield-outline.svg","material-shield-plus-outline":"material/shield-plus-outline.svg","material-shield-plus":"material/shield-plus.svg","material-shield-refresh-outline":"material/shield-refresh-outline.svg","material-shield-refresh":"material/shield-refresh.svg","material-shield-remove-outline":"material/shield-remove-outline.svg","material-shield-remove":"material/shield-remove.svg","material-shield-search":"material/shield-search.svg","material-shield-star-outline":"material/shield-star-outline.svg","material-shield-star":"material/shield-star.svg","material-shield-sun-outline":"material/shield-sun-outline.svg","material-shield-sun":"material/shield-sun.svg","material-shield-sword-outline":"material/shield-sword-outline.svg","material-shield-sword":"material/shield-sword.svg","material-shield-sync-outline":"material/shield-sync-outline.svg","material-shield-sync":"material/shield-sync.svg","material-shield":"material/shield.svg","material-shimmer":"material/shimmer.svg","material-ship-wheel":"material/ship-wheel.svg","material-shipping-pallet":"material/shipping-pallet.svg","material-shoe-ballet":"material/shoe-ballet.svg","material-shoe-cleat":"material/shoe-cleat.svg","material-shoe-formal":"material/shoe-formal.svg","material-shoe-heel":"material/shoe-heel.svg","material-shoe-print":"material/shoe-print.svg","material-shoe-sneaker":"material/shoe-sneaker.svg","material-shopping-music":"material/shopping-music.svg","material-shopping-outline":"material/shopping-outline.svg","material-shopping-search-outline":"material/shopping-search-outline.svg","material-shopping-search":"material/shopping-search.svg","material-shopping":"material/shopping.svg","material-shore":"material/shore.svg","material-shovel-off":"material/shovel-off.svg","material-shovel":"material/shovel.svg","material-shower-head":"material/shower-head.svg","material-shower":"material/shower.svg","material-shredder":"material/shredder.svg","material-shuffle-disabled":"material/shuffle-disabled.svg","material-shuffle-variant":"material/shuffle-variant.svg","material-shuffle":"material/shuffle.svg","material-shuriken":"material/shuriken.svg","material-sickle":"material/sickle.svg","material-sigma-lower":"material/sigma-lower.svg","material-sigma":"material/sigma.svg","material-sign-caution":"material/sign-caution.svg","material-sign-direction-minus":"material/sign-direction-minus.svg","material-sign-direction-plus":"material/sign-direction-plus.svg","material-sign-direction-remove":"material/sign-direction-remove.svg","material-sign-direction":"material/sign-direction.svg","material-sign-language-outline":"material/sign-language-outline.svg","material-sign-language":"material/sign-language.svg","material-sign-pole":"material/sign-pole.svg","material-sign-real-estate":"material/sign-real-estate.svg","material-sign-text":"material/sign-text.svg","material-sign-yield":"material/sign-yield.svg","material-signal-2g":"material/signal-2g.svg","material-signal-3g":"material/signal-3g.svg","material-signal-4g":"material/signal-4g.svg","material-signal-5g":"material/signal-5g.svg","material-signal-cellular-1":"material/signal-cellular-1.svg","material-signal-cellular-2":"material/signal-cellular-2.svg","material-signal-cellular-3":"material/signal-cellular-3.svg","material-signal-cellular-outline":"material/signal-cellular-outline.svg","material-signal-distance-variant":"material/signal-distance-variant.svg","material-signal-hspa-plus":"material/signal-hspa-plus.svg","material-signal-hspa":"material/signal-hspa.svg","material-signal-off":"material/signal-off.svg","material-signal-variant":"material/signal-variant.svg","material-signal":"material/signal.svg","material-signature-freehand":"material/signature-freehand.svg","material-signature-image":"material/signature-image.svg","material-signature-text":"material/signature-text.svg","material-signature":"material/signature.svg","material-silo-outline":"material/silo-outline.svg","material-silo":"material/silo.svg","material-silverware-clean":"material/silverware-clean.svg","material-silverware-fork-knife":"material/silverware-fork-knife.svg","material-silverware-fork":"material/silverware-fork.svg","material-silverware-spoon":"material/silverware-spoon.svg","material-silverware-variant":"material/silverware-variant.svg","material-silverware":"material/silverware.svg","material-sim-alert-outline":"material/sim-alert-outline.svg","material-sim-alert":"material/sim-alert.svg","material-sim-off-outline":"material/sim-off-outline.svg","material-sim-off":"material/sim-off.svg","material-sim-outline":"material/sim-outline.svg","material-sim":"material/sim.svg","material-simple-icons":"material/simple-icons.svg","material-sina-weibo":"material/sina-weibo.svg","material-sine-wave":"material/sine-wave.svg","material-sitemap-outline":"material/sitemap-outline.svg","material-sitemap":"material/sitemap.svg","material-size-l":"material/size-l.svg","material-size-m":"material/size-m.svg","material-size-s":"material/size-s.svg","material-size-xl":"material/size-xl.svg","material-size-xs":"material/size-xs.svg","material-size-xxl":"material/size-xxl.svg","material-size-xxs":"material/size-xxs.svg","material-size-xxxl":"material/size-xxxl.svg","material-skate-off":"material/skate-off.svg","material-skate":"material/skate.svg","material-skateboard":"material/skateboard.svg","material-skateboarding":"material/skateboarding.svg","material-skew-less":"material/skew-less.svg","material-skew-more":"material/skew-more.svg","material-ski-cross-country":"material/ski-cross-country.svg","material-ski-water":"material/ski-water.svg","material-ski":"material/ski.svg","material-skip-backward-outline":"material/skip-backward-outline.svg","material-skip-backward":"material/skip-backward.svg","material-skip-forward-outline":"material/skip-forward-outline.svg","material-skip-forward":"material/skip-forward.svg","material-skip-next-circle-outline":"material/skip-next-circle-outline.svg","material-skip-next-circle":"material/skip-next-circle.svg","material-skip-next-outline":"material/skip-next-outline.svg","material-skip-next":"material/skip-next.svg","material-skip-previous-circle-outline":"material/skip-previous-circle-outline.svg","material-skip-previous-circle":"material/skip-previous-circle.svg","material-skip-previous-outline":"material/skip-previous-outline.svg","material-skip-previous":"material/skip-previous.svg","material-skull-crossbones-outline":"material/skull-crossbones-outline.svg","material-skull-crossbones":"material/skull-crossbones.svg","material-skull-outline":"material/skull-outline.svg","material-skull-scan-outline":"material/skull-scan-outline.svg","material-skull-scan":"material/skull-scan.svg","material-skull":"material/skull.svg","material-skype-business":"material/skype-business.svg","material-skype":"material/skype.svg","material-slack":"material/slack.svg","material-slash-forward-box":"material/slash-forward-box.svg","material-slash-forward":"material/slash-forward.svg","material-sledding":"material/sledding.svg","material-sleep-off":"material/sleep-off.svg","material-sleep":"material/sleep.svg","material-slide":"material/slide.svg","material-slope-downhill":"material/slope-downhill.svg","material-slope-uphill":"material/slope-uphill.svg","material-slot-machine-outline":"material/slot-machine-outline.svg","material-slot-machine":"material/slot-machine.svg","material-smart-card-off-outline":"material/smart-card-off-outline.svg","material-smart-card-off":"material/smart-card-off.svg","material-smart-card-outline":"material/smart-card-outline.svg","material-smart-card-reader-outline":"material/smart-card-reader-outline.svg","material-smart-card-reader":"material/smart-card-reader.svg","material-smart-card":"material/smart-card.svg","material-smog":"material/smog.svg","material-smoke-detector-alert-outline":"material/smoke-detector-alert-outline.svg","material-smoke-detector-alert":"material/smoke-detector-alert.svg","material-smoke-detector-off-outline":"material/smoke-detector-off-outline.svg","material-smoke-detector-off":"material/smoke-detector-off.svg","material-smoke-detector-outline":"material/smoke-detector-outline.svg","material-smoke-detector-variant-alert":"material/smoke-detector-variant-alert.svg","material-smoke-detector-variant-off":"material/smoke-detector-variant-off.svg","material-smoke-detector-variant":"material/smoke-detector-variant.svg","material-smoke-detector":"material/smoke-detector.svg","material-smoke":"material/smoke.svg","material-smoking-off":"material/smoking-off.svg","material-smoking-pipe-off":"material/smoking-pipe-off.svg","material-smoking-pipe":"material/smoking-pipe.svg","material-smoking":"material/smoking.svg","material-snail":"material/snail.svg","material-snake":"material/snake.svg","material-snapchat":"material/snapchat.svg","material-snowboard":"material/snowboard.svg","material-snowflake-alert":"material/snowflake-alert.svg","material-snowflake-check":"material/snowflake-check.svg","material-snowflake-melt":"material/snowflake-melt.svg","material-snowflake-off":"material/snowflake-off.svg","material-snowflake-thermometer":"material/snowflake-thermometer.svg","material-snowflake-variant":"material/snowflake-variant.svg","material-snowflake":"material/snowflake.svg","material-snowman":"material/snowman.svg","material-snowmobile":"material/snowmobile.svg","material-snowshoeing":"material/snowshoeing.svg","material-soccer-field":"material/soccer-field.svg","material-soccer":"material/soccer.svg","material-social-distance-2-meters":"material/social-distance-2-meters.svg","material-social-distance-6-feet":"material/social-distance-6-feet.svg","material-sofa-outline":"material/sofa-outline.svg","material-sofa-single-outline":"material/sofa-single-outline.svg","material-sofa-single":"material/sofa-single.svg","material-sofa":"material/sofa.svg","material-solar-panel-large":"material/solar-panel-large.svg","material-solar-panel":"material/solar-panel.svg","material-solar-power-variant-outline":"material/solar-power-variant-outline.svg","material-solar-power-variant":"material/solar-power-variant.svg","material-solar-power":"material/solar-power.svg","material-soldering-iron":"material/soldering-iron.svg","material-solid":"material/solid.svg","material-sony-playstation":"material/sony-playstation.svg","material-sort-alphabetical-ascending-variant":"material/sort-alphabetical-ascending-variant.svg","material-sort-alphabetical-ascending":"material/sort-alphabetical-ascending.svg","material-sort-alphabetical-descending-variant":"material/sort-alphabetical-descending-variant.svg","material-sort-alphabetical-descending":"material/sort-alphabetical-descending.svg","material-sort-alphabetical-variant":"material/sort-alphabetical-variant.svg","material-sort-ascending":"material/sort-ascending.svg","material-sort-bool-ascending-variant":"material/sort-bool-ascending-variant.svg","material-sort-bool-ascending":"material/sort-bool-ascending.svg","material-sort-bool-descending-variant":"material/sort-bool-descending-variant.svg","material-sort-bool-descending":"material/sort-bool-descending.svg","material-sort-calendar-ascending":"material/sort-calendar-ascending.svg","material-sort-calendar-descending":"material/sort-calendar-descending.svg","material-sort-clock-ascending-outline":"material/sort-clock-ascending-outline.svg","material-sort-clock-ascending":"material/sort-clock-ascending.svg","material-sort-clock-descending-outline":"material/sort-clock-descending-outline.svg","material-sort-clock-descending":"material/sort-clock-descending.svg","material-sort-descending":"material/sort-descending.svg","material-sort-numeric-ascending-variant":"material/sort-numeric-ascending-variant.svg","material-sort-numeric-ascending":"material/sort-numeric-ascending.svg","material-sort-numeric-descending-variant":"material/sort-numeric-descending-variant.svg","material-sort-numeric-descending":"material/sort-numeric-descending.svg","material-sort-numeric-variant":"material/sort-numeric-variant.svg","material-sort-reverse-variant":"material/sort-reverse-variant.svg","material-sort-variant-lock-open":"material/sort-variant-lock-open.svg","material-sort-variant-lock":"material/sort-variant-lock.svg","material-sort-variant-off":"material/sort-variant-off.svg","material-sort-variant-remove":"material/sort-variant-remove.svg","material-sort-variant":"material/sort-variant.svg","material-sort":"material/sort.svg","material-soundbar":"material/soundbar.svg","material-soundcloud":"material/soundcloud.svg","material-source-branch-check":"material/source-branch-check.svg","material-source-branch-minus":"material/source-branch-minus.svg","material-source-branch-plus":"material/source-branch-plus.svg","material-source-branch-refresh":"material/source-branch-refresh.svg","material-source-branch-remove":"material/source-branch-remove.svg","material-source-branch-sync":"material/source-branch-sync.svg","material-source-branch":"material/source-branch.svg","material-source-commit-end-local":"material/source-commit-end-local.svg","material-source-commit-end":"material/source-commit-end.svg","material-source-commit-local":"material/source-commit-local.svg","material-source-commit-next-local":"material/source-commit-next-local.svg","material-source-commit-start-next-local":"material/source-commit-start-next-local.svg","material-source-commit-start":"material/source-commit-start.svg","material-source-commit":"material/source-commit.svg","material-source-fork":"material/source-fork.svg","material-source-merge":"material/source-merge.svg","material-source-pull":"material/source-pull.svg","material-source-repository-multiple":"material/source-repository-multiple.svg","material-source-repository":"material/source-repository.svg","material-soy-sauce-off":"material/soy-sauce-off.svg","material-soy-sauce":"material/soy-sauce.svg","material-spa-outline":"material/spa-outline.svg","material-spa":"material/spa.svg","material-space-invaders":"material/space-invaders.svg","material-space-station":"material/space-station.svg","material-spade":"material/spade.svg","material-speaker-bluetooth":"material/speaker-bluetooth.svg","material-speaker-message":"material/speaker-message.svg","material-speaker-multiple":"material/speaker-multiple.svg","material-speaker-off":"material/speaker-off.svg","material-speaker-pause":"material/speaker-pause.svg","material-speaker-play":"material/speaker-play.svg","material-speaker-stop":"material/speaker-stop.svg","material-speaker-wireless":"material/speaker-wireless.svg","material-speaker":"material/speaker.svg","material-spear":"material/spear.svg","material-speedometer-medium":"material/speedometer-medium.svg","material-speedometer-slow":"material/speedometer-slow.svg","material-speedometer":"material/speedometer.svg","material-spellcheck":"material/spellcheck.svg","material-sphere-off":"material/sphere-off.svg","material-sphere":"material/sphere.svg","material-spider-outline":"material/spider-outline.svg","material-spider-thread":"material/spider-thread.svg","material-spider-web":"material/spider-web.svg","material-spider":"material/spider.svg","material-spirit-level":"material/spirit-level.svg","material-spoon-sugar":"material/spoon-sugar.svg","material-spotify":"material/spotify.svg","material-spotlight-beam":"material/spotlight-beam.svg","material-spotlight":"material/spotlight.svg","material-spray-bottle":"material/spray-bottle.svg","material-spray":"material/spray.svg","material-sprinkler-fire":"material/sprinkler-fire.svg","material-sprinkler-variant":"material/sprinkler-variant.svg","material-sprinkler":"material/sprinkler.svg","material-sprout-outline":"material/sprout-outline.svg","material-sprout":"material/sprout.svg","material-square-circle-outline":"material/square-circle-outline.svg","material-square-circle":"material/square-circle.svg","material-square-edit-outline":"material/square-edit-outline.svg","material-square-medium-outline":"material/square-medium-outline.svg","material-square-medium":"material/square-medium.svg","material-square-off-outline":"material/square-off-outline.svg","material-square-off":"material/square-off.svg","material-square-opacity":"material/square-opacity.svg","material-square-outline":"material/square-outline.svg","material-square-root-box":"material/square-root-box.svg","material-square-root":"material/square-root.svg","material-square-rounded-badge-outline":"material/square-rounded-badge-outline.svg","material-square-rounded-badge":"material/square-rounded-badge.svg","material-square-rounded-outline":"material/square-rounded-outline.svg","material-square-rounded":"material/square-rounded.svg","material-square-small":"material/square-small.svg","material-square-wave":"material/square-wave.svg","material-square":"material/square.svg","material-squeegee":"material/squeegee.svg","material-ssh":"material/ssh.svg","material-stack-exchange":"material/stack-exchange.svg","material-stack-overflow":"material/stack-overflow.svg","material-stackpath":"material/stackpath.svg","material-stadium-outline":"material/stadium-outline.svg","material-stadium-variant":"material/stadium-variant.svg","material-stadium":"material/stadium.svg","material-stairs-box":"material/stairs-box.svg","material-stairs-down":"material/stairs-down.svg","material-stairs-up":"material/stairs-up.svg","material-stairs":"material/stairs.svg","material-stamper":"material/stamper.svg","material-standard-definition":"material/standard-definition.svg","material-star-box-multiple-outline":"material/star-box-multiple-outline.svg","material-star-box-multiple":"material/star-box-multiple.svg","material-star-box-outline":"material/star-box-outline.svg","material-star-box":"material/star-box.svg","material-star-check-outline":"material/star-check-outline.svg","material-star-check":"material/star-check.svg","material-star-circle-outline":"material/star-circle-outline.svg","material-star-circle":"material/star-circle.svg","material-star-cog-outline":"material/star-cog-outline.svg","material-star-cog":"material/star-cog.svg","material-star-crescent":"material/star-crescent.svg","material-star-david":"material/star-david.svg","material-star-face":"material/star-face.svg","material-star-four-points-box-outline":"material/star-four-points-box-outline.svg","material-star-four-points-box":"material/star-four-points-box.svg","material-star-four-points-circle-outline":"material/star-four-points-circle-outline.svg","material-star-four-points-circle":"material/star-four-points-circle.svg","material-star-four-points-outline":"material/star-four-points-outline.svg","material-star-four-points-small":"material/star-four-points-small.svg","material-star-four-points":"material/star-four-points.svg","material-star-half-full":"material/star-half-full.svg","material-star-half":"material/star-half.svg","material-star-minus-outline":"material/star-minus-outline.svg","material-star-minus":"material/star-minus.svg","material-star-off-outline":"material/star-off-outline.svg","material-star-off":"material/star-off.svg","material-star-outline":"material/star-outline.svg","material-star-plus-outline":"material/star-plus-outline.svg","material-star-plus":"material/star-plus.svg","material-star-remove-outline":"material/star-remove-outline.svg","material-star-remove":"material/star-remove.svg","material-star-settings-outline":"material/star-settings-outline.svg","material-star-settings":"material/star-settings.svg","material-star-shooting-outline":"material/star-shooting-outline.svg","material-star-shooting":"material/star-shooting.svg","material-star-three-points-outline":"material/star-three-points-outline.svg","material-star-three-points":"material/star-three-points.svg","material-star":"material/star.svg","material-state-machine":"material/state-machine.svg","material-steam":"material/steam.svg","material-steering-off":"material/steering-off.svg","material-steering":"material/steering.svg","material-step-backward-2":"material/step-backward-2.svg","material-step-backward":"material/step-backward.svg","material-step-forward-2":"material/step-forward-2.svg","material-step-forward":"material/step-forward.svg","material-stethoscope":"material/stethoscope.svg","material-sticker-alert-outline":"material/sticker-alert-outline.svg","material-sticker-alert":"material/sticker-alert.svg","material-sticker-check-outline":"material/sticker-check-outline.svg","material-sticker-check":"material/sticker-check.svg","material-sticker-circle-outline":"material/sticker-circle-outline.svg","material-sticker-emoji":"material/sticker-emoji.svg","material-sticker-minus-outline":"material/sticker-minus-outline.svg","material-sticker-minus":"material/sticker-minus.svg","material-sticker-outline":"material/sticker-outline.svg","material-sticker-plus-outline":"material/sticker-plus-outline.svg","material-sticker-plus":"material/sticker-plus.svg","material-sticker-remove-outline":"material/sticker-remove-outline.svg","material-sticker-remove":"material/sticker-remove.svg","material-sticker-text-outline":"material/sticker-text-outline.svg","material-sticker-text":"material/sticker-text.svg","material-sticker":"material/sticker.svg","material-stocking":"material/stocking.svg","material-stomach":"material/stomach.svg","material-stool-outline":"material/stool-outline.svg","material-stool":"material/stool.svg","material-stop-circle-outline":"material/stop-circle-outline.svg","material-stop-circle":"material/stop-circle.svg","material-stop":"material/stop.svg","material-storage-tank-outline":"material/storage-tank-outline.svg","material-storage-tank":"material/storage-tank.svg","material-store-24-hour":"material/store-24-hour.svg","material-store-alert-outline":"material/store-alert-outline.svg","material-store-alert":"material/store-alert.svg","material-store-check-outline":"material/store-check-outline.svg","material-store-check":"material/store-check.svg","material-store-clock-outline":"material/store-clock-outline.svg","material-store-clock":"material/store-clock.svg","material-store-cog-outline":"material/store-cog-outline.svg","material-store-cog":"material/store-cog.svg","material-store-edit-outline":"material/store-edit-outline.svg","material-store-edit":"material/store-edit.svg","material-store-marker-outline":"material/store-marker-outline.svg","material-store-marker":"material/store-marker.svg","material-store-minus-outline":"material/store-minus-outline.svg","material-store-minus":"material/store-minus.svg","material-store-off-outline":"material/store-off-outline.svg","material-store-off":"material/store-off.svg","material-store-outline":"material/store-outline.svg","material-store-plus-outline":"material/store-plus-outline.svg","material-store-plus":"material/store-plus.svg","material-store-remove-outline":"material/store-remove-outline.svg","material-store-remove":"material/store-remove.svg","material-store-search-outline":"material/store-search-outline.svg","material-store-search":"material/store-search.svg","material-store-settings-outline":"material/store-settings-outline.svg","material-store-settings":"material/store-settings.svg","material-store":"material/store.svg","material-storefront-check-outline":"material/storefront-check-outline.svg","material-storefront-check":"material/storefront-check.svg","material-storefront-edit-outline":"material/storefront-edit-outline.svg","material-storefront-edit":"material/storefront-edit.svg","material-storefront-minus-outline":"material/storefront-minus-outline.svg","material-storefront-minus":"material/storefront-minus.svg","material-storefront-outline":"material/storefront-outline.svg","material-storefront-plus-outline":"material/storefront-plus-outline.svg","material-storefront-plus":"material/storefront-plus.svg","material-storefront-remove-outline":"material/storefront-remove-outline.svg","material-storefront-remove":"material/storefront-remove.svg","material-storefront":"material/storefront.svg","material-stove":"material/stove.svg","material-strategy":"material/strategy.svg","material-stretch-to-page-outline":"material/stretch-to-page-outline.svg","material-stretch-to-page":"material/stretch-to-page.svg","material-string-lights-off":"material/string-lights-off.svg","material-string-lights":"material/string-lights.svg","material-subdirectory-arrow-left":"material/subdirectory-arrow-left.svg","material-subdirectory-arrow-right":"material/subdirectory-arrow-right.svg","material-submarine":"material/submarine.svg","material-subtitles-outline":"material/subtitles-outline.svg","material-subtitles":"material/subtitles.svg","material-subway-alert-variant":"material/subway-alert-variant.svg","material-subway-variant":"material/subway-variant.svg","material-subway":"material/subway.svg","material-summit":"material/summit.svg","material-sun-angle-outline":"material/sun-angle-outline.svg","material-sun-angle":"material/sun-angle.svg","material-sun-clock-outline":"material/sun-clock-outline.svg","material-sun-clock":"material/sun-clock.svg","material-sun-compass":"material/sun-compass.svg","material-sun-snowflake-variant":"material/sun-snowflake-variant.svg","material-sun-snowflake":"material/sun-snowflake.svg","material-sun-thermometer-outline":"material/sun-thermometer-outline.svg","material-sun-thermometer":"material/sun-thermometer.svg","material-sun-wireless-outline":"material/sun-wireless-outline.svg","material-sun-wireless":"material/sun-wireless.svg","material-sunglasses":"material/sunglasses.svg","material-surfing":"material/surfing.svg","material-surround-sound-2-0":"material/surround-sound-2-0.svg","material-surround-sound-2-1":"material/surround-sound-2-1.svg","material-surround-sound-3-1":"material/surround-sound-3-1.svg","material-surround-sound-5-1-2":"material/surround-sound-5-1-2.svg","material-surround-sound-5-1":"material/surround-sound-5-1.svg","material-surround-sound-7-1":"material/surround-sound-7-1.svg","material-surround-sound":"material/surround-sound.svg","material-svg":"material/svg.svg","material-swap-horizontal-bold":"material/swap-horizontal-bold.svg","material-swap-horizontal-circle-outline":"material/swap-horizontal-circle-outline.svg","material-swap-horizontal-circle":"material/swap-horizontal-circle.svg","material-swap-horizontal-variant":"material/swap-horizontal-variant.svg","material-swap-horizontal":"material/swap-horizontal.svg","material-swap-vertical-bold":"material/swap-vertical-bold.svg","material-swap-vertical-circle-outline":"material/swap-vertical-circle-outline.svg","material-swap-vertical-circle":"material/swap-vertical-circle.svg","material-swap-vertical-variant":"material/swap-vertical-variant.svg","material-swap-vertical":"material/swap-vertical.svg","material-swim":"material/swim.svg","material-switch":"material/switch.svg","material-sword-cross":"material/sword-cross.svg","material-sword":"material/sword.svg","material-syllabary-hangul":"material/syllabary-hangul.svg","material-syllabary-hiragana":"material/syllabary-hiragana.svg","material-syllabary-katakana-halfwidth":"material/syllabary-katakana-halfwidth.svg","material-syllabary-katakana":"material/syllabary-katakana.svg","material-symbol":"material/symbol.svg","material-symfony":"material/symfony.svg","material-synagogue-outline":"material/synagogue-outline.svg","material-synagogue":"material/synagogue.svg","material-sync-alert":"material/sync-alert.svg","material-sync-circle":"material/sync-circle.svg","material-sync-off":"material/sync-off.svg","material-sync":"material/sync.svg","material-tab-minus":"material/tab-minus.svg","material-tab-plus":"material/tab-plus.svg","material-tab-remove":"material/tab-remove.svg","material-tab-search":"material/tab-search.svg","material-tab-unselected":"material/tab-unselected.svg","material-tab":"material/tab.svg","material-table-account":"material/table-account.svg","material-table-alert":"material/table-alert.svg","material-table-arrow-down":"material/table-arrow-down.svg","material-table-arrow-left":"material/table-arrow-left.svg","material-table-arrow-right":"material/table-arrow-right.svg","material-table-arrow-up":"material/table-arrow-up.svg","material-table-border":"material/table-border.svg","material-table-cancel":"material/table-cancel.svg","material-table-chair":"material/table-chair.svg","material-table-check":"material/table-check.svg","material-table-clock":"material/table-clock.svg","material-table-cog":"material/table-cog.svg","material-table-column-plus-after":"material/table-column-plus-after.svg","material-table-column-plus-before":"material/table-column-plus-before.svg","material-table-column-remove":"material/table-column-remove.svg","material-table-column-width":"material/table-column-width.svg","material-table-column":"material/table-column.svg","material-table-edit":"material/table-edit.svg","material-table-eye-off":"material/table-eye-off.svg","material-table-eye":"material/table-eye.svg","material-table-filter":"material/table-filter.svg","material-table-furniture":"material/table-furniture.svg","material-table-headers-eye-off":"material/table-headers-eye-off.svg","material-table-headers-eye":"material/table-headers-eye.svg","material-table-heart":"material/table-heart.svg","material-table-key":"material/table-key.svg","material-table-large-plus":"material/table-large-plus.svg","material-table-large-remove":"material/table-large-remove.svg","material-table-large":"material/table-large.svg","material-table-lock":"material/table-lock.svg","material-table-merge-cells":"material/table-merge-cells.svg","material-table-minus":"material/table-minus.svg","material-table-multiple":"material/table-multiple.svg","material-table-network":"material/table-network.svg","material-table-of-contents":"material/table-of-contents.svg","material-table-off":"material/table-off.svg","material-table-picnic":"material/table-picnic.svg","material-table-pivot":"material/table-pivot.svg","material-table-plus":"material/table-plus.svg","material-table-question":"material/table-question.svg","material-table-refresh":"material/table-refresh.svg","material-table-remove":"material/table-remove.svg","material-table-row-height":"material/table-row-height.svg","material-table-row-plus-after":"material/table-row-plus-after.svg","material-table-row-plus-before":"material/table-row-plus-before.svg","material-table-row-remove":"material/table-row-remove.svg","material-table-row":"material/table-row.svg","material-table-search":"material/table-search.svg","material-table-settings":"material/table-settings.svg","material-table-split-cell":"material/table-split-cell.svg","material-table-star":"material/table-star.svg","material-table-sync":"material/table-sync.svg","material-table-tennis":"material/table-tennis.svg","material-table":"material/table.svg","material-tablet-cellphone":"material/tablet-cellphone.svg","material-tablet-dashboard":"material/tablet-dashboard.svg","material-tablet":"material/tablet.svg","material-taco":"material/taco.svg","material-tag-arrow-down-outline":"material/tag-arrow-down-outline.svg","material-tag-arrow-down":"material/tag-arrow-down.svg","material-tag-arrow-left-outline":"material/tag-arrow-left-outline.svg","material-tag-arrow-left":"material/tag-arrow-left.svg","material-tag-arrow-right-outline":"material/tag-arrow-right-outline.svg","material-tag-arrow-right":"material/tag-arrow-right.svg","material-tag-arrow-up-outline":"material/tag-arrow-up-outline.svg","material-tag-arrow-up":"material/tag-arrow-up.svg","material-tag-check-outline":"material/tag-check-outline.svg","material-tag-check":"material/tag-check.svg","material-tag-faces":"material/tag-faces.svg","material-tag-heart-outline":"material/tag-heart-outline.svg","material-tag-heart":"material/tag-heart.svg","material-tag-hidden":"material/tag-hidden.svg","material-tag-minus-outline":"material/tag-minus-outline.svg","material-tag-minus":"material/tag-minus.svg","material-tag-multiple-outline":"material/tag-multiple-outline.svg","material-tag-multiple":"material/tag-multiple.svg","material-tag-off-outline":"material/tag-off-outline.svg","material-tag-off":"material/tag-off.svg","material-tag-outline":"material/tag-outline.svg","material-tag-plus-outline":"material/tag-plus-outline.svg","material-tag-plus":"material/tag-plus.svg","material-tag-remove-outline":"material/tag-remove-outline.svg","material-tag-remove":"material/tag-remove.svg","material-tag-search-outline":"material/tag-search-outline.svg","material-tag-search":"material/tag-search.svg","material-tag-text-outline":"material/tag-text-outline.svg","material-tag-text":"material/tag-text.svg","material-tag":"material/tag.svg","material-tailwind":"material/tailwind.svg","material-tally-mark-1":"material/tally-mark-1.svg","material-tally-mark-2":"material/tally-mark-2.svg","material-tally-mark-3":"material/tally-mark-3.svg","material-tally-mark-4":"material/tally-mark-4.svg","material-tally-mark-5":"material/tally-mark-5.svg","material-tangram":"material/tangram.svg","material-tank":"material/tank.svg","material-tanker-truck":"material/tanker-truck.svg","material-tape-drive":"material/tape-drive.svg","material-tape-measure":"material/tape-measure.svg","material-target-account":"material/target-account.svg","material-target-variant":"material/target-variant.svg","material-target":"material/target.svg","material-taxi":"material/taxi.svg","material-tea-outline":"material/tea-outline.svg","material-tea":"material/tea.svg","material-teamviewer":"material/teamviewer.svg","material-teddy-bear":"material/teddy-bear.svg","material-telescope":"material/telescope.svg","material-television-ambient-light":"material/television-ambient-light.svg","material-television-box":"material/television-box.svg","material-television-classic-off":"material/television-classic-off.svg","material-television-classic":"material/television-classic.svg","material-television-guide":"material/television-guide.svg","material-television-off":"material/television-off.svg","material-television-pause":"material/television-pause.svg","material-television-play":"material/television-play.svg","material-television-shimmer":"material/television-shimmer.svg","material-television-speaker-off":"material/television-speaker-off.svg","material-television-speaker":"material/television-speaker.svg","material-television-stop":"material/television-stop.svg","material-television":"material/television.svg","material-temperature-celsius":"material/temperature-celsius.svg","material-temperature-fahrenheit":"material/temperature-fahrenheit.svg","material-temperature-kelvin":"material/temperature-kelvin.svg","material-temple-buddhist-outline":"material/temple-buddhist-outline.svg","material-temple-buddhist":"material/temple-buddhist.svg","material-temple-hindu-outline":"material/temple-hindu-outline.svg","material-temple-hindu":"material/temple-hindu.svg","material-tennis-ball-outline":"material/tennis-ball-outline.svg","material-tennis-ball":"material/tennis-ball.svg","material-tennis":"material/tennis.svg","material-tent":"material/tent.svg","material-terraform":"material/terraform.svg","material-terrain":"material/terrain.svg","material-test-tube-empty":"material/test-tube-empty.svg","material-test-tube-off":"material/test-tube-off.svg","material-test-tube":"material/test-tube.svg","material-text-account":"material/text-account.svg","material-text-box-check-outline":"material/text-box-check-outline.svg","material-text-box-check":"material/text-box-check.svg","material-text-box-edit-outline":"material/text-box-edit-outline.svg","material-text-box-edit":"material/text-box-edit.svg","material-text-box-minus-outline":"material/text-box-minus-outline.svg","material-text-box-minus":"material/text-box-minus.svg","material-text-box-multiple-outline":"material/text-box-multiple-outline.svg","material-text-box-multiple":"material/text-box-multiple.svg","material-text-box-outline":"material/text-box-outline.svg","material-text-box-plus-outline":"material/text-box-plus-outline.svg","material-text-box-plus":"material/text-box-plus.svg","material-text-box-remove-outline":"material/text-box-remove-outline.svg","material-text-box-remove":"material/text-box-remove.svg","material-text-box-search-outline":"material/text-box-search-outline.svg","material-text-box-search":"material/text-box-search.svg","material-text-box":"material/text-box.svg","material-text-long":"material/text-long.svg","material-text-recognition":"material/text-recognition.svg","material-text-search-variant":"material/text-search-variant.svg","material-text-search":"material/text-search.svg","material-text-shadow":"material/text-shadow.svg","material-text-short":"material/text-short.svg","material-text":"material/text.svg","material-texture-box":"material/texture-box.svg","material-texture":"material/texture.svg","material-theater":"material/theater.svg","material-theme-light-dark":"material/theme-light-dark.svg","material-thermometer-alert":"material/thermometer-alert.svg","material-thermometer-auto":"material/thermometer-auto.svg","material-thermometer-bluetooth":"material/thermometer-bluetooth.svg","material-thermometer-check":"material/thermometer-check.svg","material-thermometer-chevron-down":"material/thermometer-chevron-down.svg","material-thermometer-chevron-up":"material/thermometer-chevron-up.svg","material-thermometer-high":"material/thermometer-high.svg","material-thermometer-lines":"material/thermometer-lines.svg","material-thermometer-low":"material/thermometer-low.svg","material-thermometer-minus":"material/thermometer-minus.svg","material-thermometer-off":"material/thermometer-off.svg","material-thermometer-plus":"material/thermometer-plus.svg","material-thermometer-probe-off":"material/thermometer-probe-off.svg","material-thermometer-probe":"material/thermometer-probe.svg","material-thermometer-water":"material/thermometer-water.svg","material-thermometer":"material/thermometer.svg","material-thermostat-auto":"material/thermostat-auto.svg","material-thermostat-box-auto":"material/thermostat-box-auto.svg","material-thermostat-box":"material/thermostat-box.svg","material-thermostat-cog":"material/thermostat-cog.svg","material-thermostat":"material/thermostat.svg","material-thought-bubble-outline":"material/thought-bubble-outline.svg","material-thought-bubble":"material/thought-bubble.svg","material-thumb-down-outline":"material/thumb-down-outline.svg","material-thumb-down":"material/thumb-down.svg","material-thumb-up-outline":"material/thumb-up-outline.svg","material-thumb-up":"material/thumb-up.svg","material-thumbs-up-down-outline":"material/thumbs-up-down-outline.svg","material-thumbs-up-down":"material/thumbs-up-down.svg","material-ticket-account":"material/ticket-account.svg","material-ticket-confirmation-outline":"material/ticket-confirmation-outline.svg","material-ticket-confirmation":"material/ticket-confirmation.svg","material-ticket-outline":"material/ticket-outline.svg","material-ticket-percent-outline":"material/ticket-percent-outline.svg","material-ticket-percent":"material/ticket-percent.svg","material-ticket":"material/ticket.svg","material-tie":"material/tie.svg","material-tilde-off":"material/tilde-off.svg","material-tilde":"material/tilde.svg","material-timelapse":"material/timelapse.svg","material-timeline-alert-outline":"material/timeline-alert-outline.svg","material-timeline-alert":"material/timeline-alert.svg","material-timeline-check-outline":"material/timeline-check-outline.svg","material-timeline-check":"material/timeline-check.svg","material-timeline-clock-outline":"material/timeline-clock-outline.svg","material-timeline-clock":"material/timeline-clock.svg","material-timeline-minus-outline":"material/timeline-minus-outline.svg","material-timeline-minus":"material/timeline-minus.svg","material-timeline-outline":"material/timeline-outline.svg","material-timeline-plus-outline":"material/timeline-plus-outline.svg","material-timeline-plus":"material/timeline-plus.svg","material-timeline-question-outline":"material/timeline-question-outline.svg","material-timeline-question":"material/timeline-question.svg","material-timeline-remove-outline":"material/timeline-remove-outline.svg","material-timeline-remove":"material/timeline-remove.svg","material-timeline-text-outline":"material/timeline-text-outline.svg","material-timeline-text":"material/timeline-text.svg","material-timeline":"material/timeline.svg","material-timer-10":"material/timer-10.svg","material-timer-3":"material/timer-3.svg","material-timer-alert-outline":"material/timer-alert-outline.svg","material-timer-alert":"material/timer-alert.svg","material-timer-cancel-outline":"material/timer-cancel-outline.svg","material-timer-cancel":"material/timer-cancel.svg","material-timer-check-outline":"material/timer-check-outline.svg","material-timer-check":"material/timer-check.svg","material-timer-cog-outline":"material/timer-cog-outline.svg","material-timer-cog":"material/timer-cog.svg","material-timer-edit-outline":"material/timer-edit-outline.svg","material-timer-edit":"material/timer-edit.svg","material-timer-lock-open-outline":"material/timer-lock-open-outline.svg","material-timer-lock-open":"material/timer-lock-open.svg","material-timer-lock-outline":"material/timer-lock-outline.svg","material-timer-lock":"material/timer-lock.svg","material-timer-marker-outline":"material/timer-marker-outline.svg","material-timer-marker":"material/timer-marker.svg","material-timer-minus-outline":"material/timer-minus-outline.svg","material-timer-minus":"material/timer-minus.svg","material-timer-music-outline":"material/timer-music-outline.svg","material-timer-music":"material/timer-music.svg","material-timer-off-outline":"material/timer-off-outline.svg","material-timer-off":"material/timer-off.svg","material-timer-outline":"material/timer-outline.svg","material-timer-pause-outline":"material/timer-pause-outline.svg","material-timer-pause":"material/timer-pause.svg","material-timer-play-outline":"material/timer-play-outline.svg","material-timer-play":"material/timer-play.svg","material-timer-plus-outline":"material/timer-plus-outline.svg","material-timer-plus":"material/timer-plus.svg","material-timer-refresh-outline":"material/timer-refresh-outline.svg","material-timer-refresh":"material/timer-refresh.svg","material-timer-remove-outline":"material/timer-remove-outline.svg","material-timer-remove":"material/timer-remove.svg","material-timer-sand-complete":"material/timer-sand-complete.svg","material-timer-sand-empty":"material/timer-sand-empty.svg","material-timer-sand-full":"material/timer-sand-full.svg","material-timer-sand-paused":"material/timer-sand-paused.svg","material-timer-sand":"material/timer-sand.svg","material-timer-settings-outline":"material/timer-settings-outline.svg","material-timer-settings":"material/timer-settings.svg","material-timer-star-outline":"material/timer-star-outline.svg","material-timer-star":"material/timer-star.svg","material-timer-stop-outline":"material/timer-stop-outline.svg","material-timer-stop":"material/timer-stop.svg","material-timer-sync-outline":"material/timer-sync-outline.svg","material-timer-sync":"material/timer-sync.svg","material-timer":"material/timer.svg","material-timetable":"material/timetable.svg","material-tire":"material/tire.svg","material-toaster-off":"material/toaster-off.svg","material-toaster-oven":"material/toaster-oven.svg","material-toaster":"material/toaster.svg","material-toggle-switch-off-outline":"material/toggle-switch-off-outline.svg","material-toggle-switch-off":"material/toggle-switch-off.svg","material-toggle-switch-outline":"material/toggle-switch-outline.svg","material-toggle-switch-variant-off":"material/toggle-switch-variant-off.svg","material-toggle-switch-variant":"material/toggle-switch-variant.svg","material-toggle-switch":"material/toggle-switch.svg","material-toilet":"material/toilet.svg","material-toolbox-outline":"material/toolbox-outline.svg","material-toolbox":"material/toolbox.svg","material-tools":"material/tools.svg","material-tooltip-account":"material/tooltip-account.svg","material-tooltip-cellphone":"material/tooltip-cellphone.svg","material-tooltip-check-outline":"material/tooltip-check-outline.svg","material-tooltip-check":"material/tooltip-check.svg","material-tooltip-edit-outline":"material/tooltip-edit-outline.svg","material-tooltip-edit":"material/tooltip-edit.svg","material-tooltip-image-outline":"material/tooltip-image-outline.svg","material-tooltip-image":"material/tooltip-image.svg","material-tooltip-minus-outline":"material/tooltip-minus-outline.svg","material-tooltip-minus":"material/tooltip-minus.svg","material-tooltip-outline":"material/tooltip-outline.svg","material-tooltip-plus-outline":"material/tooltip-plus-outline.svg","material-tooltip-plus":"material/tooltip-plus.svg","material-tooltip-question-outline":"material/tooltip-question-outline.svg","material-tooltip-question":"material/tooltip-question.svg","material-tooltip-remove-outline":"material/tooltip-remove-outline.svg","material-tooltip-remove":"material/tooltip-remove.svg","material-tooltip-text-outline":"material/tooltip-text-outline.svg","material-tooltip-text":"material/tooltip-text.svg","material-tooltip":"material/tooltip.svg","material-tooth-outline":"material/tooth-outline.svg","material-tooth":"material/tooth.svg","material-toothbrush-electric":"material/toothbrush-electric.svg","material-toothbrush-paste":"material/toothbrush-paste.svg","material-toothbrush":"material/toothbrush.svg","material-torch":"material/torch.svg","material-tortoise":"material/tortoise.svg","material-toslink":"material/toslink.svg","material-touch-text-outline":"material/touch-text-outline.svg","material-tournament":"material/tournament.svg","material-tow-truck":"material/tow-truck.svg","material-tower-beach":"material/tower-beach.svg","material-tower-fire":"material/tower-fire.svg","material-town-hall":"material/town-hall.svg","material-toy-brick-marker-outline":"material/toy-brick-marker-outline.svg","material-toy-brick-marker":"material/toy-brick-marker.svg","material-toy-brick-minus-outline":"material/toy-brick-minus-outline.svg","material-toy-brick-minus":"material/toy-brick-minus.svg","material-toy-brick-outline":"material/toy-brick-outline.svg","material-toy-brick-plus-outline":"material/toy-brick-plus-outline.svg","material-toy-brick-plus":"material/toy-brick-plus.svg","material-toy-brick-remove-outline":"material/toy-brick-remove-outline.svg","material-toy-brick-remove":"material/toy-brick-remove.svg","material-toy-brick-search-outline":"material/toy-brick-search-outline.svg","material-toy-brick-search":"material/toy-brick-search.svg","material-toy-brick":"material/toy-brick.svg","material-track-light-off":"material/track-light-off.svg","material-track-light":"material/track-light.svg","material-trackpad-lock":"material/trackpad-lock.svg","material-trackpad":"material/trackpad.svg","material-tractor-variant":"material/tractor-variant.svg","material-tractor":"material/tractor.svg","material-trademark":"material/trademark.svg","material-traffic-cone":"material/traffic-cone.svg","material-traffic-light-outline":"material/traffic-light-outline.svg","material-traffic-light":"material/traffic-light.svg","material-train-car-autorack":"material/train-car-autorack.svg","material-train-car-box-full":"material/train-car-box-full.svg","material-train-car-box-open":"material/train-car-box-open.svg","material-train-car-box":"material/train-car-box.svg","material-train-car-caboose":"material/train-car-caboose.svg","material-train-car-centerbeam-full":"material/train-car-centerbeam-full.svg","material-train-car-centerbeam":"material/train-car-centerbeam.svg","material-train-car-container":"material/train-car-container.svg","material-train-car-flatbed-car":"material/train-car-flatbed-car.svg","material-train-car-flatbed-tank":"material/train-car-flatbed-tank.svg","material-train-car-flatbed":"material/train-car-flatbed.svg","material-train-car-gondola-full":"material/train-car-gondola-full.svg","material-train-car-gondola":"material/train-car-gondola.svg","material-train-car-hopper-covered":"material/train-car-hopper-covered.svg","material-train-car-hopper-full":"material/train-car-hopper-full.svg","material-train-car-hopper":"material/train-car-hopper.svg","material-train-car-intermodal":"material/train-car-intermodal.svg","material-train-car-passenger-door-open":"material/train-car-passenger-door-open.svg","material-train-car-passenger-door":"material/train-car-passenger-door.svg","material-train-car-passenger-variant":"material/train-car-passenger-variant.svg","material-train-car-passenger":"material/train-car-passenger.svg","material-train-car-tank":"material/train-car-tank.svg","material-train-car":"material/train-car.svg","material-train-variant":"material/train-variant.svg","material-train":"material/train.svg","material-tram-side":"material/tram-side.svg","material-tram":"material/tram.svg","material-transcribe-close":"material/transcribe-close.svg","material-transcribe":"material/transcribe.svg","material-transfer-down":"material/transfer-down.svg","material-transfer-left":"material/transfer-left.svg","material-transfer-right":"material/transfer-right.svg","material-transfer-up":"material/transfer-up.svg","material-transfer":"material/transfer.svg","material-transit-connection-horizontal":"material/transit-connection-horizontal.svg","material-transit-connection-variant":"material/transit-connection-variant.svg","material-transit-connection":"material/transit-connection.svg","material-transit-detour":"material/transit-detour.svg","material-transit-skip":"material/transit-skip.svg","material-transit-transfer":"material/transit-transfer.svg","material-transition-masked":"material/transition-masked.svg","material-transition":"material/transition.svg","material-translate-off":"material/translate-off.svg","material-translate-variant":"material/translate-variant.svg","material-translate":"material/translate.svg","material-transmission-tower-export":"material/transmission-tower-export.svg","material-transmission-tower-import":"material/transmission-tower-import.svg","material-transmission-tower-off":"material/transmission-tower-off.svg","material-transmission-tower":"material/transmission-tower.svg","material-trash-can-outline":"material/trash-can-outline.svg","material-trash-can":"material/trash-can.svg","material-tray-alert":"material/tray-alert.svg","material-tray-arrow-down":"material/tray-arrow-down.svg","material-tray-arrow-up":"material/tray-arrow-up.svg","material-tray-full":"material/tray-full.svg","material-tray-minus":"material/tray-minus.svg","material-tray-plus":"material/tray-plus.svg","material-tray-remove":"material/tray-remove.svg","material-tray":"material/tray.svg","material-treasure-chest-outline":"material/treasure-chest-outline.svg","material-treasure-chest":"material/treasure-chest.svg","material-tree-outline":"material/tree-outline.svg","material-tree":"material/tree.svg","material-trello":"material/trello.svg","material-trending-down":"material/trending-down.svg","material-trending-neutral":"material/trending-neutral.svg","material-trending-up":"material/trending-up.svg","material-triangle-down-outline":"material/triangle-down-outline.svg","material-triangle-down":"material/triangle-down.svg","material-triangle-outline":"material/triangle-outline.svg","material-triangle-small-down":"material/triangle-small-down.svg","material-triangle-small-up":"material/triangle-small-up.svg","material-triangle-wave":"material/triangle-wave.svg","material-triangle":"material/triangle.svg","material-triforce":"material/triforce.svg","material-trophy-award":"material/trophy-award.svg","material-trophy-broken":"material/trophy-broken.svg","material-trophy-outline":"material/trophy-outline.svg","material-trophy-variant-outline":"material/trophy-variant-outline.svg","material-trophy-variant":"material/trophy-variant.svg","material-trophy":"material/trophy.svg","material-truck-alert-outline":"material/truck-alert-outline.svg","material-truck-alert":"material/truck-alert.svg","material-truck-cargo-container":"material/truck-cargo-container.svg","material-truck-check-outline":"material/truck-check-outline.svg","material-truck-check":"material/truck-check.svg","material-truck-delivery-outline":"material/truck-delivery-outline.svg","material-truck-delivery":"material/truck-delivery.svg","material-truck-fast-outline":"material/truck-fast-outline.svg","material-truck-fast":"material/truck-fast.svg","material-truck-flatbed":"material/truck-flatbed.svg","material-truck-minus-outline":"material/truck-minus-outline.svg","material-truck-minus":"material/truck-minus.svg","material-truck-outline":"material/truck-outline.svg","material-truck-plus-outline":"material/truck-plus-outline.svg","material-truck-plus":"material/truck-plus.svg","material-truck-remove-outline":"material/truck-remove-outline.svg","material-truck-remove":"material/truck-remove.svg","material-truck-snowflake":"material/truck-snowflake.svg","material-truck-trailer":"material/truck-trailer.svg","material-truck":"material/truck.svg","material-trumpet":"material/trumpet.svg","material-tshirt-crew-outline":"material/tshirt-crew-outline.svg","material-tshirt-crew":"material/tshirt-crew.svg","material-tshirt-v-outline":"material/tshirt-v-outline.svg","material-tshirt-v":"material/tshirt-v.svg","material-tsunami":"material/tsunami.svg","material-tumble-dryer-alert":"material/tumble-dryer-alert.svg","material-tumble-dryer-off":"material/tumble-dryer-off.svg","material-tumble-dryer":"material/tumble-dryer.svg","material-tune-variant":"material/tune-variant.svg","material-tune-vertical-variant":"material/tune-vertical-variant.svg","material-tune-vertical":"material/tune-vertical.svg","material-tune":"material/tune.svg","material-tunnel-outline":"material/tunnel-outline.svg","material-tunnel":"material/tunnel.svg","material-turbine":"material/turbine.svg","material-turkey":"material/turkey.svg","material-turnstile-outline":"material/turnstile-outline.svg","material-turnstile":"material/turnstile.svg","material-turtle":"material/turtle.svg","material-twitch":"material/twitch.svg","material-twitter":"material/twitter.svg","material-two-factor-authentication":"material/two-factor-authentication.svg","material-typewriter":"material/typewriter.svg","material-ubisoft":"material/ubisoft.svg","material-ubuntu":"material/ubuntu.svg","material-ufo-outline":"material/ufo-outline.svg","material-ufo":"material/ufo.svg","material-ultra-high-definition":"material/ultra-high-definition.svg","material-umbraco":"material/umbraco.svg","material-umbrella-beach-outline":"material/umbrella-beach-outline.svg","material-umbrella-beach":"material/umbrella-beach.svg","material-umbrella-closed-outline":"material/umbrella-closed-outline.svg","material-umbrella-closed-variant":"material/umbrella-closed-variant.svg","material-umbrella-closed":"material/umbrella-closed.svg","material-umbrella-outline":"material/umbrella-outline.svg","material-umbrella":"material/umbrella.svg","material-undo-variant":"material/undo-variant.svg","material-undo":"material/undo.svg","material-unfold-less-horizontal":"material/unfold-less-horizontal.svg","material-unfold-less-vertical":"material/unfold-less-vertical.svg","material-unfold-more-horizontal":"material/unfold-more-horizontal.svg","material-unfold-more-vertical":"material/unfold-more-vertical.svg","material-ungroup":"material/ungroup.svg","material-unicode":"material/unicode.svg","material-unicorn-variant":"material/unicorn-variant.svg","material-unicorn":"material/unicorn.svg","material-unicycle":"material/unicycle.svg","material-unity":"material/unity.svg","material-unreal":"material/unreal.svg","material-update":"material/update.svg","material-upload-lock-outline":"material/upload-lock-outline.svg","material-upload-lock":"material/upload-lock.svg","material-upload-multiple":"material/upload-multiple.svg","material-upload-network-outline":"material/upload-network-outline.svg","material-upload-network":"material/upload-network.svg","material-upload-off-outline":"material/upload-off-outline.svg","material-upload-off":"material/upload-off.svg","material-upload-outline":"material/upload-outline.svg","material-upload":"material/upload.svg","material-usb-flash-drive-outline":"material/usb-flash-drive-outline.svg","material-usb-flash-drive":"material/usb-flash-drive.svg","material-usb-port":"material/usb-port.svg","material-usb":"material/usb.svg","material-vacuum-outline":"material/vacuum-outline.svg","material-vacuum":"material/vacuum.svg","material-valve-closed":"material/valve-closed.svg","material-valve-open":"material/valve-open.svg","material-valve":"material/valve.svg","material-van-passenger":"material/van-passenger.svg","material-van-utility":"material/van-utility.svg","material-vanish-quarter":"material/vanish-quarter.svg","material-vanish":"material/vanish.svg","material-vanity-light":"material/vanity-light.svg","material-variable-box":"material/variable-box.svg","material-variable":"material/variable.svg","material-vector-arrange-above":"material/vector-arrange-above.svg","material-vector-arrange-below":"material/vector-arrange-below.svg","material-vector-bezier":"material/vector-bezier.svg","material-vector-circle-variant":"material/vector-circle-variant.svg","material-vector-circle":"material/vector-circle.svg","material-vector-combine":"material/vector-combine.svg","material-vector-curve":"material/vector-curve.svg","material-vector-difference-ab":"material/vector-difference-ab.svg","material-vector-difference-ba":"material/vector-difference-ba.svg","material-vector-difference":"material/vector-difference.svg","material-vector-ellipse":"material/vector-ellipse.svg","material-vector-intersection":"material/vector-intersection.svg","material-vector-line":"material/vector-line.svg","material-vector-link":"material/vector-link.svg","material-vector-point-edit":"material/vector-point-edit.svg","material-vector-point-minus":"material/vector-point-minus.svg","material-vector-point-plus":"material/vector-point-plus.svg","material-vector-point-select":"material/vector-point-select.svg","material-vector-point":"material/vector-point.svg","material-vector-polygon-variant":"material/vector-polygon-variant.svg","material-vector-polygon":"material/vector-polygon.svg","material-vector-polyline-edit":"material/vector-polyline-edit.svg","material-vector-polyline-minus":"material/vector-polyline-minus.svg","material-vector-polyline-plus":"material/vector-polyline-plus.svg","material-vector-polyline-remove":"material/vector-polyline-remove.svg","material-vector-polyline":"material/vector-polyline.svg","material-vector-radius":"material/vector-radius.svg","material-vector-rectangle":"material/vector-rectangle.svg","material-vector-selection":"material/vector-selection.svg","material-vector-square-close":"material/vector-square-close.svg","material-vector-square-edit":"material/vector-square-edit.svg","material-vector-square-minus":"material/vector-square-minus.svg","material-vector-square-open":"material/vector-square-open.svg","material-vector-square-plus":"material/vector-square-plus.svg","material-vector-square-remove":"material/vector-square-remove.svg","material-vector-square":"material/vector-square.svg","material-vector-triangle":"material/vector-triangle.svg","material-vector-union":"material/vector-union.svg","material-vhs":"material/vhs.svg","material-vibrate-off":"material/vibrate-off.svg","material-vibrate":"material/vibrate.svg","material-video-2d":"material/video-2d.svg","material-video-3d-off":"material/video-3d-off.svg","material-video-3d-variant":"material/video-3d-variant.svg","material-video-3d":"material/video-3d.svg","material-video-4k-box":"material/video-4k-box.svg","material-video-account":"material/video-account.svg","material-video-box-off":"material/video-box-off.svg","material-video-box":"material/video-box.svg","material-video-check-outline":"material/video-check-outline.svg","material-video-check":"material/video-check.svg","material-video-high-definition":"material/video-high-definition.svg","material-video-image":"material/video-image.svg","material-video-input-antenna":"material/video-input-antenna.svg","material-video-input-component":"material/video-input-component.svg","material-video-input-hdmi":"material/video-input-hdmi.svg","material-video-input-scart":"material/video-input-scart.svg","material-video-input-svideo":"material/video-input-svideo.svg","material-video-marker-outline":"material/video-marker-outline.svg","material-video-marker":"material/video-marker.svg","material-video-minus-outline":"material/video-minus-outline.svg","material-video-minus":"material/video-minus.svg","material-video-off-outline":"material/video-off-outline.svg","material-video-off":"material/video-off.svg","material-video-outline":"material/video-outline.svg","material-video-plus-outline":"material/video-plus-outline.svg","material-video-plus":"material/video-plus.svg","material-video-stabilization":"material/video-stabilization.svg","material-video-switch-outline":"material/video-switch-outline.svg","material-video-switch":"material/video-switch.svg","material-video-vintage":"material/video-vintage.svg","material-video-wireless-outline":"material/video-wireless-outline.svg","material-video-wireless":"material/video-wireless.svg","material-video":"material/video.svg","material-view-agenda-outline":"material/view-agenda-outline.svg","material-view-agenda":"material/view-agenda.svg","material-view-array-outline":"material/view-array-outline.svg","material-view-array":"material/view-array.svg","material-view-carousel-outline":"material/view-carousel-outline.svg","material-view-carousel":"material/view-carousel.svg","material-view-column-outline":"material/view-column-outline.svg","material-view-column":"material/view-column.svg","material-view-comfy-outline":"material/view-comfy-outline.svg","material-view-comfy":"material/view-comfy.svg","material-view-compact-outline":"material/view-compact-outline.svg","material-view-compact":"material/view-compact.svg","material-view-dashboard-edit-outline":"material/view-dashboard-edit-outline.svg","material-view-dashboard-edit":"material/view-dashboard-edit.svg","material-view-dashboard-outline":"material/view-dashboard-outline.svg","material-view-dashboard-variant-outline":"material/view-dashboard-variant-outline.svg","material-view-dashboard-variant":"material/view-dashboard-variant.svg","material-view-dashboard":"material/view-dashboard.svg","material-view-day-outline":"material/view-day-outline.svg","material-view-day":"material/view-day.svg","material-view-gallery-outline":"material/view-gallery-outline.svg","material-view-gallery":"material/view-gallery.svg","material-view-grid-compact":"material/view-grid-compact.svg","material-view-grid-outline":"material/view-grid-outline.svg","material-view-grid-plus-outline":"material/view-grid-plus-outline.svg","material-view-grid-plus":"material/view-grid-plus.svg","material-view-grid":"material/view-grid.svg","material-view-headline":"material/view-headline.svg","material-view-list-outline":"material/view-list-outline.svg","material-view-list":"material/view-list.svg","material-view-module-outline":"material/view-module-outline.svg","material-view-module":"material/view-module.svg","material-view-parallel-outline":"material/view-parallel-outline.svg","material-view-parallel":"material/view-parallel.svg","material-view-quilt-outline":"material/view-quilt-outline.svg","material-view-quilt":"material/view-quilt.svg","material-view-sequential-outline":"material/view-sequential-outline.svg","material-view-sequential":"material/view-sequential.svg","material-view-split-horizontal":"material/view-split-horizontal.svg","material-view-split-vertical":"material/view-split-vertical.svg","material-view-stream-outline":"material/view-stream-outline.svg","material-view-stream":"material/view-stream.svg","material-view-week-outline":"material/view-week-outline.svg","material-view-week":"material/view-week.svg","material-vimeo":"material/vimeo.svg","material-violin":"material/violin.svg","material-virtual-reality":"material/virtual-reality.svg","material-virus-off-outline":"material/virus-off-outline.svg","material-virus-off":"material/virus-off.svg","material-virus-outline":"material/virus-outline.svg","material-virus":"material/virus.svg","material-vlc":"material/vlc.svg","material-voicemail":"material/voicemail.svg","material-volcano-outline":"material/volcano-outline.svg","material-volcano":"material/volcano.svg","material-volleyball":"material/volleyball.svg","material-volume-equal":"material/volume-equal.svg","material-volume-high":"material/volume-high.svg","material-volume-low":"material/volume-low.svg","material-volume-medium":"material/volume-medium.svg","material-volume-minus":"material/volume-minus.svg","material-volume-mute":"material/volume-mute.svg","material-volume-off":"material/volume-off.svg","material-volume-plus":"material/volume-plus.svg","material-volume-source":"material/volume-source.svg","material-volume-variant-off":"material/volume-variant-off.svg","material-volume-vibrate":"material/volume-vibrate.svg","material-vote-outline":"material/vote-outline.svg","material-vote":"material/vote.svg","material-vpn":"material/vpn.svg","material-vuejs":"material/vuejs.svg","material-vuetify":"material/vuetify.svg","material-walk":"material/walk.svg","material-wall-fire":"material/wall-fire.svg","material-wall-sconce-flat-outline":"material/wall-sconce-flat-outline.svg","material-wall-sconce-flat-variant-outline":"material/wall-sconce-flat-variant-outline.svg","material-wall-sconce-flat-variant":"material/wall-sconce-flat-variant.svg","material-wall-sconce-flat":"material/wall-sconce-flat.svg","material-wall-sconce-outline":"material/wall-sconce-outline.svg","material-wall-sconce-round-outline":"material/wall-sconce-round-outline.svg","material-wall-sconce-round-variant-outline":"material/wall-sconce-round-variant-outline.svg","material-wall-sconce-round-variant":"material/wall-sconce-round-variant.svg","material-wall-sconce-round":"material/wall-sconce-round.svg","material-wall-sconce":"material/wall-sconce.svg","material-wall":"material/wall.svg","material-wallet-bifold-outline":"material/wallet-bifold-outline.svg","material-wallet-bifold":"material/wallet-bifold.svg","material-wallet-giftcard":"material/wallet-giftcard.svg","material-wallet-membership":"material/wallet-membership.svg","material-wallet-outline":"material/wallet-outline.svg","material-wallet-plus-outline":"material/wallet-plus-outline.svg","material-wallet-plus":"material/wallet-plus.svg","material-wallet-travel":"material/wallet-travel.svg","material-wallet":"material/wallet.svg","material-wallpaper":"material/wallpaper.svg","material-wan":"material/wan.svg","material-wardrobe-outline":"material/wardrobe-outline.svg","material-wardrobe":"material/wardrobe.svg","material-warehouse":"material/warehouse.svg","material-washing-machine-alert":"material/washing-machine-alert.svg","material-washing-machine-off":"material/washing-machine-off.svg","material-washing-machine":"material/washing-machine.svg","material-watch-export-variant":"material/watch-export-variant.svg","material-watch-export":"material/watch-export.svg","material-watch-import-variant":"material/watch-import-variant.svg","material-watch-import":"material/watch-import.svg","material-watch-variant":"material/watch-variant.svg","material-watch-vibrate-off":"material/watch-vibrate-off.svg","material-watch-vibrate":"material/watch-vibrate.svg","material-watch":"material/watch.svg","material-water-alert-outline":"material/water-alert-outline.svg","material-water-alert":"material/water-alert.svg","material-water-boiler-alert":"material/water-boiler-alert.svg","material-water-boiler-auto":"material/water-boiler-auto.svg","material-water-boiler-off":"material/water-boiler-off.svg","material-water-boiler":"material/water-boiler.svg","material-water-check-outline":"material/water-check-outline.svg","material-water-check":"material/water-check.svg","material-water-circle":"material/water-circle.svg","material-water-minus-outline":"material/water-minus-outline.svg","material-water-minus":"material/water-minus.svg","material-water-off-outline":"material/water-off-outline.svg","material-water-off":"material/water-off.svg","material-water-opacity":"material/water-opacity.svg","material-water-outline":"material/water-outline.svg","material-water-percent-alert":"material/water-percent-alert.svg","material-water-percent":"material/water-percent.svg","material-water-plus-outline":"material/water-plus-outline.svg","material-water-plus":"material/water-plus.svg","material-water-polo":"material/water-polo.svg","material-water-pump-off":"material/water-pump-off.svg","material-water-pump":"material/water-pump.svg","material-water-remove-outline":"material/water-remove-outline.svg","material-water-remove":"material/water-remove.svg","material-water-sync":"material/water-sync.svg","material-water-thermometer-outline":"material/water-thermometer-outline.svg","material-water-thermometer":"material/water-thermometer.svg","material-water-well-outline":"material/water-well-outline.svg","material-water-well":"material/water-well.svg","material-water":"material/water.svg","material-waterfall":"material/waterfall.svg","material-watering-can-outline":"material/watering-can-outline.svg","material-watering-can":"material/watering-can.svg","material-watermark":"material/watermark.svg","material-wave":"material/wave.svg","material-waveform":"material/waveform.svg","material-waves-arrow-left":"material/waves-arrow-left.svg","material-waves-arrow-right":"material/waves-arrow-right.svg","material-waves-arrow-up":"material/waves-arrow-up.svg","material-waves":"material/waves.svg","material-waze":"material/waze.svg","material-weather-cloudy-alert":"material/weather-cloudy-alert.svg","material-weather-cloudy-arrow-right":"material/weather-cloudy-arrow-right.svg","material-weather-cloudy-clock":"material/weather-cloudy-clock.svg","material-weather-cloudy":"material/weather-cloudy.svg","material-weather-dust":"material/weather-dust.svg","material-weather-fog":"material/weather-fog.svg","material-weather-hail":"material/weather-hail.svg","material-weather-hazy":"material/weather-hazy.svg","material-weather-hurricane-outline":"material/weather-hurricane-outline.svg","material-weather-hurricane":"material/weather-hurricane.svg","material-weather-lightning-rainy":"material/weather-lightning-rainy.svg","material-weather-lightning":"material/weather-lightning.svg","material-weather-night-partly-cloudy":"material/weather-night-partly-cloudy.svg","material-weather-night":"material/weather-night.svg","material-weather-partly-cloudy":"material/weather-partly-cloudy.svg","material-weather-partly-lightning":"material/weather-partly-lightning.svg","material-weather-partly-rainy":"material/weather-partly-rainy.svg","material-weather-partly-snowy-rainy":"material/weather-partly-snowy-rainy.svg","material-weather-partly-snowy":"material/weather-partly-snowy.svg","material-weather-pouring":"material/weather-pouring.svg","material-weather-rainy":"material/weather-rainy.svg","material-weather-snowy-heavy":"material/weather-snowy-heavy.svg","material-weather-snowy-rainy":"material/weather-snowy-rainy.svg","material-weather-snowy":"material/weather-snowy.svg","material-weather-sunny-alert":"material/weather-sunny-alert.svg","material-weather-sunny-off":"material/weather-sunny-off.svg","material-weather-sunny":"material/weather-sunny.svg","material-weather-sunset-down":"material/weather-sunset-down.svg","material-weather-sunset-up":"material/weather-sunset-up.svg","material-weather-sunset":"material/weather-sunset.svg","material-weather-tornado":"material/weather-tornado.svg","material-weather-windy-variant":"material/weather-windy-variant.svg","material-weather-windy":"material/weather-windy.svg","material-web-box":"material/web-box.svg","material-web-cancel":"material/web-cancel.svg","material-web-check":"material/web-check.svg","material-web-clock":"material/web-clock.svg","material-web-minus":"material/web-minus.svg","material-web-off":"material/web-off.svg","material-web-plus":"material/web-plus.svg","material-web-refresh":"material/web-refresh.svg","material-web-remove":"material/web-remove.svg","material-web-sync":"material/web-sync.svg","material-web":"material/web.svg","material-webcam-off":"material/webcam-off.svg","material-webcam":"material/webcam.svg","material-webhook":"material/webhook.svg","material-webpack":"material/webpack.svg","material-webrtc":"material/webrtc.svg","material-wechat":"material/wechat.svg","material-weight-gram":"material/weight-gram.svg","material-weight-kilogram":"material/weight-kilogram.svg","material-weight-lifter":"material/weight-lifter.svg","material-weight-pound":"material/weight-pound.svg","material-weight":"material/weight.svg","material-whatsapp":"material/whatsapp.svg","material-wheel-barrow":"material/wheel-barrow.svg","material-wheelchair-accessibility":"material/wheelchair-accessibility.svg","material-wheelchair":"material/wheelchair.svg","material-whistle-outline":"material/whistle-outline.svg","material-whistle":"material/whistle.svg","material-white-balance-auto":"material/white-balance-auto.svg","material-white-balance-incandescent":"material/white-balance-incandescent.svg","material-white-balance-iridescent":"material/white-balance-iridescent.svg","material-white-balance-sunny":"material/white-balance-sunny.svg","material-widgets-outline":"material/widgets-outline.svg","material-widgets":"material/widgets.svg","material-wifi-alert":"material/wifi-alert.svg","material-wifi-arrow-down":"material/wifi-arrow-down.svg","material-wifi-arrow-left-right":"material/wifi-arrow-left-right.svg","material-wifi-arrow-left":"material/wifi-arrow-left.svg","material-wifi-arrow-right":"material/wifi-arrow-right.svg","material-wifi-arrow-up-down":"material/wifi-arrow-up-down.svg","material-wifi-arrow-up":"material/wifi-arrow-up.svg","material-wifi-cancel":"material/wifi-cancel.svg","material-wifi-check":"material/wifi-check.svg","material-wifi-cog":"material/wifi-cog.svg","material-wifi-lock-open":"material/wifi-lock-open.svg","material-wifi-lock":"material/wifi-lock.svg","material-wifi-marker":"material/wifi-marker.svg","material-wifi-minus":"material/wifi-minus.svg","material-wifi-off":"material/wifi-off.svg","material-wifi-plus":"material/wifi-plus.svg","material-wifi-refresh":"material/wifi-refresh.svg","material-wifi-remove":"material/wifi-remove.svg","material-wifi-settings":"material/wifi-settings.svg","material-wifi-star":"material/wifi-star.svg","material-wifi-strength-1-alert":"material/wifi-strength-1-alert.svg","material-wifi-strength-1-lock-open":"material/wifi-strength-1-lock-open.svg","material-wifi-strength-1-lock":"material/wifi-strength-1-lock.svg","material-wifi-strength-1":"material/wifi-strength-1.svg","material-wifi-strength-2-alert":"material/wifi-strength-2-alert.svg","material-wifi-strength-2-lock-open":"material/wifi-strength-2-lock-open.svg","material-wifi-strength-2-lock":"material/wifi-strength-2-lock.svg","material-wifi-strength-2":"material/wifi-strength-2.svg","material-wifi-strength-3-alert":"material/wifi-strength-3-alert.svg","material-wifi-strength-3-lock-open":"material/wifi-strength-3-lock-open.svg","material-wifi-strength-3-lock":"material/wifi-strength-3-lock.svg","material-wifi-strength-3":"material/wifi-strength-3.svg","material-wifi-strength-4-alert":"material/wifi-strength-4-alert.svg","material-wifi-strength-4-lock-open":"material/wifi-strength-4-lock-open.svg","material-wifi-strength-4-lock":"material/wifi-strength-4-lock.svg","material-wifi-strength-4":"material/wifi-strength-4.svg","material-wifi-strength-alert-outline":"material/wifi-strength-alert-outline.svg","material-wifi-strength-lock-open-outline":"material/wifi-strength-lock-open-outline.svg","material-wifi-strength-lock-outline":"material/wifi-strength-lock-outline.svg","material-wifi-strength-off-outline":"material/wifi-strength-off-outline.svg","material-wifi-strength-off":"material/wifi-strength-off.svg","material-wifi-strength-outline":"material/wifi-strength-outline.svg","material-wifi-sync":"material/wifi-sync.svg","material-wifi":"material/wifi.svg","material-wikipedia":"material/wikipedia.svg","material-wind-power-outline":"material/wind-power-outline.svg","material-wind-power":"material/wind-power.svg","material-wind-turbine-alert":"material/wind-turbine-alert.svg","material-wind-turbine-check":"material/wind-turbine-check.svg","material-wind-turbine":"material/wind-turbine.svg","material-window-close":"material/window-close.svg","material-window-closed-variant":"material/window-closed-variant.svg","material-window-closed":"material/window-closed.svg","material-window-maximize":"material/window-maximize.svg","material-window-minimize":"material/window-minimize.svg","material-window-open-variant":"material/window-open-variant.svg","material-window-open":"material/window-open.svg","material-window-restore":"material/window-restore.svg","material-window-shutter-alert":"material/window-shutter-alert.svg","material-window-shutter-auto":"material/window-shutter-auto.svg","material-window-shutter-cog":"material/window-shutter-cog.svg","material-window-shutter-open":"material/window-shutter-open.svg","material-window-shutter-settings":"material/window-shutter-settings.svg","material-window-shutter":"material/window-shutter.svg","material-windsock":"material/windsock.svg","material-wiper-wash-alert":"material/wiper-wash-alert.svg","material-wiper-wash":"material/wiper-wash.svg","material-wiper":"material/wiper.svg","material-wizard-hat":"material/wizard-hat.svg","material-wordpress":"material/wordpress.svg","material-wrap-disabled":"material/wrap-disabled.svg","material-wrap":"material/wrap.svg","material-wrench-check-outline":"material/wrench-check-outline.svg","material-wrench-check":"material/wrench-check.svg","material-wrench-clock-outline":"material/wrench-clock-outline.svg","material-wrench-clock":"material/wrench-clock.svg","material-wrench-cog-outline":"material/wrench-cog-outline.svg","material-wrench-cog":"material/wrench-cog.svg","material-wrench-outline":"material/wrench-outline.svg","material-wrench":"material/wrench.svg","material-xamarin":"material/xamarin.svg","material-xml":"material/xml.svg","material-xmpp":"material/xmpp.svg","material-yahoo":"material/yahoo.svg","material-yeast":"material/yeast.svg","material-yin-yang":"material/yin-yang.svg","material-yoga":"material/yoga.svg","material-youtube-gaming":"material/youtube-gaming.svg","material-youtube-studio":"material/youtube-studio.svg","material-youtube-subscription":"material/youtube-subscription.svg","material-youtube-tv":"material/youtube-tv.svg","material-youtube":"material/youtube.svg","material-yurt":"material/yurt.svg","material-z-wave":"material/z-wave.svg","material-zend":"material/zend.svg","material-zigbee":"material/zigbee.svg","material-zip-box-outline":"material/zip-box-outline.svg","material-zip-box":"material/zip-box.svg","material-zip-disk":"material/zip-disk.svg","material-zodiac-aquarius":"material/zodiac-aquarius.svg","material-zodiac-aries":"material/zodiac-aries.svg","material-zodiac-cancer":"material/zodiac-cancer.svg","material-zodiac-capricorn":"material/zodiac-capricorn.svg","material-zodiac-gemini":"material/zodiac-gemini.svg","material-zodiac-leo":"material/zodiac-leo.svg","material-zodiac-libra":"material/zodiac-libra.svg","material-zodiac-pisces":"material/zodiac-pisces.svg","material-zodiac-sagittarius":"material/zodiac-sagittarius.svg","material-zodiac-scorpio":"material/zodiac-scorpio.svg","material-zodiac-taurus":"material/zodiac-taurus.svg","material-zodiac-virgo":"material/zodiac-virgo.svg","octicons-accessibility-16":"octicons/accessibility-16.svg","octicons-accessibility-inset-16":"octicons/accessibility-inset-16.svg","octicons-alert-16":"octicons/alert-16.svg","octicons-alert-24":"octicons/alert-24.svg","octicons-alert-fill-12":"octicons/alert-fill-12.svg","octicons-alert-fill-16":"octicons/alert-fill-16.svg","octicons-alert-fill-24":"octicons/alert-fill-24.svg","octicons-apps-16":"octicons/apps-16.svg","octicons-archive-16":"octicons/archive-16.svg","octicons-archive-24":"octicons/archive-24.svg","octicons-arrow-both-16":"octicons/arrow-both-16.svg","octicons-arrow-both-24":"octicons/arrow-both-24.svg","octicons-arrow-down-16":"octicons/arrow-down-16.svg","octicons-arrow-down-24":"octicons/arrow-down-24.svg","octicons-arrow-down-left-16":"octicons/arrow-down-left-16.svg","octicons-arrow-down-left-24":"octicons/arrow-down-left-24.svg","octicons-arrow-down-right-16":"octicons/arrow-down-right-16.svg","octicons-arrow-down-right-24":"octicons/arrow-down-right-24.svg","octicons-arrow-left-16":"octicons/arrow-left-16.svg","octicons-arrow-left-24":"octicons/arrow-left-24.svg","octicons-arrow-right-16":"octicons/arrow-right-16.svg","octicons-arrow-right-24":"octicons/arrow-right-24.svg","octicons-arrow-switch-16":"octicons/arrow-switch-16.svg","octicons-arrow-switch-24":"octicons/arrow-switch-24.svg","octicons-arrow-up-16":"octicons/arrow-up-16.svg","octicons-arrow-up-24":"octicons/arrow-up-24.svg","octicons-arrow-up-left-16":"octicons/arrow-up-left-16.svg","octicons-arrow-up-left-24":"octicons/arrow-up-left-24.svg","octicons-arrow-up-right-16":"octicons/arrow-up-right-16.svg","octicons-arrow-up-right-24":"octicons/arrow-up-right-24.svg","octicons-beaker-16":"octicons/beaker-16.svg","octicons-beaker-24":"octicons/beaker-24.svg","octicons-bell-16":"octicons/bell-16.svg","octicons-bell-24":"octicons/bell-24.svg","octicons-bell-fill-16":"octicons/bell-fill-16.svg","octicons-bell-fill-24":"octicons/bell-fill-24.svg","octicons-bell-slash-16":"octicons/bell-slash-16.svg","octicons-bell-slash-24":"octicons/bell-slash-24.svg","octicons-blocked-16":"octicons/blocked-16.svg","octicons-blocked-24":"octicons/blocked-24.svg","octicons-bold-16":"octicons/bold-16.svg","octicons-bold-24":"octicons/bold-24.svg","octicons-book-16":"octicons/book-16.svg","octicons-book-24":"octicons/book-24.svg","octicons-bookmark-16":"octicons/bookmark-16.svg","octicons-bookmark-24":"octicons/bookmark-24.svg","octicons-bookmark-fill-24":"octicons/bookmark-fill-24.svg","octicons-bookmark-slash-16":"octicons/bookmark-slash-16.svg","octicons-bookmark-slash-24":"octicons/bookmark-slash-24.svg","octicons-bookmark-slash-fill-24":"octicons/bookmark-slash-fill-24.svg","octicons-briefcase-16":"octicons/briefcase-16.svg","octicons-briefcase-24":"octicons/briefcase-24.svg","octicons-broadcast-16":"octicons/broadcast-16.svg","octicons-broadcast-24":"octicons/broadcast-24.svg","octicons-browser-16":"octicons/browser-16.svg","octicons-browser-24":"octicons/browser-24.svg","octicons-bug-16":"octicons/bug-16.svg","octicons-bug-24":"octicons/bug-24.svg","octicons-cache-16":"octicons/cache-16.svg","octicons-calendar-16":"octicons/calendar-16.svg","octicons-calendar-24":"octicons/calendar-24.svg","octicons-check-16":"octicons/check-16.svg","octicons-check-24":"octicons/check-24.svg","octicons-check-circle-16":"octicons/check-circle-16.svg","octicons-check-circle-24":"octicons/check-circle-24.svg","octicons-check-circle-fill-12":"octicons/check-circle-fill-12.svg","octicons-check-circle-fill-16":"octicons/check-circle-fill-16.svg","octicons-check-circle-fill-24":"octicons/check-circle-fill-24.svg","octicons-checkbox-16":"octicons/checkbox-16.svg","octicons-checkbox-24":"octicons/checkbox-24.svg","octicons-checklist-16":"octicons/checklist-16.svg","octicons-checklist-24":"octicons/checklist-24.svg","octicons-chevron-down-12":"octicons/chevron-down-12.svg","octicons-chevron-down-16":"octicons/chevron-down-16.svg","octicons-chevron-down-24":"octicons/chevron-down-24.svg","octicons-chevron-left-16":"octicons/chevron-left-16.svg","octicons-chevron-left-24":"octicons/chevron-left-24.svg","octicons-chevron-right-12":"octicons/chevron-right-12.svg","octicons-chevron-right-16":"octicons/chevron-right-16.svg","octicons-chevron-right-24":"octicons/chevron-right-24.svg","octicons-chevron-up-12":"octicons/chevron-up-12.svg","octicons-chevron-up-16":"octicons/chevron-up-16.svg","octicons-chevron-up-24":"octicons/chevron-up-24.svg","octicons-circle-16":"octicons/circle-16.svg","octicons-circle-24":"octicons/circle-24.svg","octicons-circle-slash-16":"octicons/circle-slash-16.svg","octicons-circle-slash-24":"octicons/circle-slash-24.svg","octicons-clock-16":"octicons/clock-16.svg","octicons-clock-24":"octicons/clock-24.svg","octicons-clock-fill-16":"octicons/clock-fill-16.svg","octicons-clock-fill-24":"octicons/clock-fill-24.svg","octicons-cloud-16":"octicons/cloud-16.svg","octicons-cloud-24":"octicons/cloud-24.svg","octicons-cloud-offline-16":"octicons/cloud-offline-16.svg","octicons-cloud-offline-24":"octicons/cloud-offline-24.svg","octicons-code-16":"octicons/code-16.svg","octicons-code-24":"octicons/code-24.svg","octicons-code-of-conduct-16":"octicons/code-of-conduct-16.svg","octicons-code-of-conduct-24":"octicons/code-of-conduct-24.svg","octicons-code-review-16":"octicons/code-review-16.svg","octicons-code-review-24":"octicons/code-review-24.svg","octicons-code-square-16":"octicons/code-square-16.svg","octicons-code-square-24":"octicons/code-square-24.svg","octicons-codescan-16":"octicons/codescan-16.svg","octicons-codescan-24":"octicons/codescan-24.svg","octicons-codescan-checkmark-16":"octicons/codescan-checkmark-16.svg","octicons-codescan-checkmark-24":"octicons/codescan-checkmark-24.svg","octicons-codespaces-16":"octicons/codespaces-16.svg","octicons-codespaces-24":"octicons/codespaces-24.svg","octicons-columns-16":"octicons/columns-16.svg","octicons-columns-24":"octicons/columns-24.svg","octicons-command-palette-16":"octicons/command-palette-16.svg","octicons-command-palette-24":"octicons/command-palette-24.svg","octicons-comment-16":"octicons/comment-16.svg","octicons-comment-24":"octicons/comment-24.svg","octicons-comment-discussion-16":"octicons/comment-discussion-16.svg","octicons-comment-discussion-24":"octicons/comment-discussion-24.svg","octicons-commit-24":"octicons/commit-24.svg","octicons-container-16":"octicons/container-16.svg","octicons-container-24":"octicons/container-24.svg","octicons-copilot-16":"octicons/copilot-16.svg","octicons-copilot-24":"octicons/copilot-24.svg","octicons-copilot-48":"octicons/copilot-48.svg","octicons-copilot-96":"octicons/copilot-96.svg","octicons-copilot-error-16":"octicons/copilot-error-16.svg","octicons-copilot-warning-16":"octicons/copilot-warning-16.svg","octicons-copy-16":"octicons/copy-16.svg","octicons-copy-24":"octicons/copy-24.svg","octicons-cpu-16":"octicons/cpu-16.svg","octicons-cpu-24":"octicons/cpu-24.svg","octicons-credit-card-16":"octicons/credit-card-16.svg","octicons-credit-card-24":"octicons/credit-card-24.svg","octicons-cross-reference-16":"octicons/cross-reference-16.svg","octicons-cross-reference-24":"octicons/cross-reference-24.svg","octicons-dash-16":"octicons/dash-16.svg","octicons-dash-24":"octicons/dash-24.svg","octicons-database-16":"octicons/database-16.svg","octicons-database-24":"octicons/database-24.svg","octicons-dependabot-16":"octicons/dependabot-16.svg","octicons-dependabot-24":"octicons/dependabot-24.svg","octicons-desktop-download-16":"octicons/desktop-download-16.svg","octicons-desktop-download-24":"octicons/desktop-download-24.svg","octicons-device-camera-16":"octicons/device-camera-16.svg","octicons-device-camera-video-16":"octicons/device-camera-video-16.svg","octicons-device-camera-video-24":"octicons/device-camera-video-24.svg","octicons-device-desktop-16":"octicons/device-desktop-16.svg","octicons-device-desktop-24":"octicons/device-desktop-24.svg","octicons-device-mobile-16":"octicons/device-mobile-16.svg","octicons-device-mobile-24":"octicons/device-mobile-24.svg","octicons-devices-16":"octicons/devices-16.svg","octicons-devices-24":"octicons/devices-24.svg","octicons-diamond-16":"octicons/diamond-16.svg","octicons-diamond-24":"octicons/diamond-24.svg","octicons-diff-16":"octicons/diff-16.svg","octicons-diff-24":"octicons/diff-24.svg","octicons-diff-added-16":"octicons/diff-added-16.svg","octicons-diff-ignored-16":"octicons/diff-ignored-16.svg","octicons-diff-modified-16":"octicons/diff-modified-16.svg","octicons-diff-removed-16":"octicons/diff-removed-16.svg","octicons-diff-renamed-16":"octicons/diff-renamed-16.svg","octicons-discussion-closed-16":"octicons/discussion-closed-16.svg","octicons-discussion-closed-24":"octicons/discussion-closed-24.svg","octicons-discussion-duplicate-16":"octicons/discussion-duplicate-16.svg","octicons-discussion-duplicate-24":"octicons/discussion-duplicate-24.svg","octicons-discussion-outdated-16":"octicons/discussion-outdated-16.svg","octicons-discussion-outdated-24":"octicons/discussion-outdated-24.svg","octicons-dot-16":"octicons/dot-16.svg","octicons-dot-24":"octicons/dot-24.svg","octicons-dot-fill-16":"octicons/dot-fill-16.svg","octicons-dot-fill-24":"octicons/dot-fill-24.svg","octicons-download-16":"octicons/download-16.svg","octicons-download-24":"octicons/download-24.svg","octicons-duplicate-16":"octicons/duplicate-16.svg","octicons-duplicate-24":"octicons/duplicate-24.svg","octicons-ellipsis-16":"octicons/ellipsis-16.svg","octicons-eye-16":"octicons/eye-16.svg","octicons-eye-24":"octicons/eye-24.svg","octicons-eye-closed-16":"octicons/eye-closed-16.svg","octicons-eye-closed-24":"octicons/eye-closed-24.svg","octicons-feed-discussion-16":"octicons/feed-discussion-16.svg","octicons-feed-forked-16":"octicons/feed-forked-16.svg","octicons-feed-heart-16":"octicons/feed-heart-16.svg","octicons-feed-issue-closed-16":"octicons/feed-issue-closed-16.svg","octicons-feed-issue-draft-16":"octicons/feed-issue-draft-16.svg","octicons-feed-issue-open-16":"octicons/feed-issue-open-16.svg","octicons-feed-issue-reopen-16":"octicons/feed-issue-reopen-16.svg","octicons-feed-merged-16":"octicons/feed-merged-16.svg","octicons-feed-person-16":"octicons/feed-person-16.svg","octicons-feed-plus-16":"octicons/feed-plus-16.svg","octicons-feed-public-16":"octicons/feed-public-16.svg","octicons-feed-pull-request-closed-16":"octicons/feed-pull-request-closed-16.svg","octicons-feed-pull-request-draft-16":"octicons/feed-pull-request-draft-16.svg","octicons-feed-pull-request-open-16":"octicons/feed-pull-request-open-16.svg","octicons-feed-repo-16":"octicons/feed-repo-16.svg","octicons-feed-rocket-16":"octicons/feed-rocket-16.svg","octicons-feed-star-16":"octicons/feed-star-16.svg","octicons-feed-tag-16":"octicons/feed-tag-16.svg","octicons-feed-trophy-16":"octicons/feed-trophy-16.svg","octicons-file-16":"octicons/file-16.svg","octicons-file-24":"octicons/file-24.svg","octicons-file-added-16":"octicons/file-added-16.svg","octicons-file-badge-16":"octicons/file-badge-16.svg","octicons-file-binary-16":"octicons/file-binary-16.svg","octicons-file-binary-24":"octicons/file-binary-24.svg","octicons-file-code-16":"octicons/file-code-16.svg","octicons-file-code-24":"octicons/file-code-24.svg","octicons-file-diff-16":"octicons/file-diff-16.svg","octicons-file-diff-24":"octicons/file-diff-24.svg","octicons-file-directory-16":"octicons/file-directory-16.svg","octicons-file-directory-24":"octicons/file-directory-24.svg","octicons-file-directory-fill-16":"octicons/file-directory-fill-16.svg","octicons-file-directory-fill-24":"octicons/file-directory-fill-24.svg","octicons-file-directory-open-fill-16":"octicons/file-directory-open-fill-16.svg","octicons-file-directory-symlink-16":"octicons/file-directory-symlink-16.svg","octicons-file-directory-symlink-24":"octicons/file-directory-symlink-24.svg","octicons-file-media-24":"octicons/file-media-24.svg","octicons-file-moved-16":"octicons/file-moved-16.svg","octicons-file-removed-16":"octicons/file-removed-16.svg","octicons-file-submodule-16":"octicons/file-submodule-16.svg","octicons-file-submodule-24":"octicons/file-submodule-24.svg","octicons-file-symlink-file-16":"octicons/file-symlink-file-16.svg","octicons-file-symlink-file-24":"octicons/file-symlink-file-24.svg","octicons-file-zip-16":"octicons/file-zip-16.svg","octicons-file-zip-24":"octicons/file-zip-24.svg","octicons-filter-16":"octicons/filter-16.svg","octicons-filter-24":"octicons/filter-24.svg","octicons-filter-remove-16":"octicons/filter-remove-16.svg","octicons-filter-remove-24":"octicons/filter-remove-24.svg","octicons-fiscal-host-16":"octicons/fiscal-host-16.svg","octicons-flame-16":"octicons/flame-16.svg","octicons-flame-24":"octicons/flame-24.svg","octicons-fold-16":"octicons/fold-16.svg","octicons-fold-24":"octicons/fold-24.svg","octicons-fold-down-16":"octicons/fold-down-16.svg","octicons-fold-down-24":"octicons/fold-down-24.svg","octicons-fold-up-16":"octicons/fold-up-16.svg","octicons-fold-up-24":"octicons/fold-up-24.svg","octicons-gear-16":"octicons/gear-16.svg","octicons-gear-24":"octicons/gear-24.svg","octicons-gift-16":"octicons/gift-16.svg","octicons-gift-24":"octicons/gift-24.svg","octicons-git-branch-16":"octicons/git-branch-16.svg","octicons-git-branch-24":"octicons/git-branch-24.svg","octicons-git-commit-16":"octicons/git-commit-16.svg","octicons-git-commit-24":"octicons/git-commit-24.svg","octicons-git-compare-16":"octicons/git-compare-16.svg","octicons-git-compare-24":"octicons/git-compare-24.svg","octicons-git-merge-16":"octicons/git-merge-16.svg","octicons-git-merge-24":"octicons/git-merge-24.svg","octicons-git-merge-queue-16":"octicons/git-merge-queue-16.svg","octicons-git-merge-queue-24":"octicons/git-merge-queue-24.svg","octicons-git-pull-request-16":"octicons/git-pull-request-16.svg","octicons-git-pull-request-24":"octicons/git-pull-request-24.svg","octicons-git-pull-request-closed-16":"octicons/git-pull-request-closed-16.svg","octicons-git-pull-request-closed-24":"octicons/git-pull-request-closed-24.svg","octicons-git-pull-request-draft-16":"octicons/git-pull-request-draft-16.svg","octicons-git-pull-request-draft-24":"octicons/git-pull-request-draft-24.svg","octicons-globe-16":"octicons/globe-16.svg","octicons-globe-24":"octicons/globe-24.svg","octicons-goal-16":"octicons/goal-16.svg","octicons-goal-24":"octicons/goal-24.svg","octicons-grabber-16":"octicons/grabber-16.svg","octicons-grabber-24":"octicons/grabber-24.svg","octicons-graph-16":"octicons/graph-16.svg","octicons-graph-24":"octicons/graph-24.svg","octicons-hash-16":"octicons/hash-16.svg","octicons-hash-24":"octicons/hash-24.svg","octicons-heading-16":"octicons/heading-16.svg","octicons-heading-24":"octicons/heading-24.svg","octicons-heart-16":"octicons/heart-16.svg","octicons-heart-24":"octicons/heart-24.svg","octicons-heart-fill-16":"octicons/heart-fill-16.svg","octicons-heart-fill-24":"octicons/heart-fill-24.svg","octicons-history-16":"octicons/history-16.svg","octicons-history-24":"octicons/history-24.svg","octicons-home-16":"octicons/home-16.svg","octicons-home-24":"octicons/home-24.svg","octicons-home-fill-24":"octicons/home-fill-24.svg","octicons-horizontal-rule-16":"octicons/horizontal-rule-16.svg","octicons-horizontal-rule-24":"octicons/horizontal-rule-24.svg","octicons-hourglass-16":"octicons/hourglass-16.svg","octicons-hourglass-24":"octicons/hourglass-24.svg","octicons-hubot-16":"octicons/hubot-16.svg","octicons-hubot-24":"octicons/hubot-24.svg","octicons-id-badge-16":"octicons/id-badge-16.svg","octicons-image-16":"octicons/image-16.svg","octicons-image-24":"octicons/image-24.svg","octicons-inbox-16":"octicons/inbox-16.svg","octicons-inbox-24":"octicons/inbox-24.svg","octicons-infinity-16":"octicons/infinity-16.svg","octicons-infinity-24":"octicons/infinity-24.svg","octicons-info-16":"octicons/info-16.svg","octicons-info-24":"octicons/info-24.svg","octicons-issue-closed-16":"octicons/issue-closed-16.svg","octicons-issue-closed-24":"octicons/issue-closed-24.svg","octicons-issue-draft-16":"octicons/issue-draft-16.svg","octicons-issue-draft-24":"octicons/issue-draft-24.svg","octicons-issue-opened-16":"octicons/issue-opened-16.svg","octicons-issue-opened-24":"octicons/issue-opened-24.svg","octicons-issue-reopened-16":"octicons/issue-reopened-16.svg","octicons-issue-reopened-24":"octicons/issue-reopened-24.svg","octicons-issue-tracked-by-16":"octicons/issue-tracked-by-16.svg","octicons-issue-tracked-by-24":"octicons/issue-tracked-by-24.svg","octicons-issue-tracks-16":"octicons/issue-tracks-16.svg","octicons-issue-tracks-24":"octicons/issue-tracks-24.svg","octicons-italic-16":"octicons/italic-16.svg","octicons-italic-24":"octicons/italic-24.svg","octicons-iterations-16":"octicons/iterations-16.svg","octicons-iterations-24":"octicons/iterations-24.svg","octicons-kebab-horizontal-16":"octicons/kebab-horizontal-16.svg","octicons-kebab-horizontal-24":"octicons/kebab-horizontal-24.svg","octicons-key-16":"octicons/key-16.svg","octicons-key-24":"octicons/key-24.svg","octicons-key-asterisk-16":"octicons/key-asterisk-16.svg","octicons-law-16":"octicons/law-16.svg","octicons-law-24":"octicons/law-24.svg","octicons-light-bulb-16":"octicons/light-bulb-16.svg","octicons-light-bulb-24":"octicons/light-bulb-24.svg","octicons-link-16":"octicons/link-16.svg","octicons-link-24":"octicons/link-24.svg","octicons-link-external-16":"octicons/link-external-16.svg","octicons-link-external-24":"octicons/link-external-24.svg","octicons-list-ordered-16":"octicons/list-ordered-16.svg","octicons-list-ordered-24":"octicons/list-ordered-24.svg","octicons-list-unordered-16":"octicons/list-unordered-16.svg","octicons-list-unordered-24":"octicons/list-unordered-24.svg","octicons-location-16":"octicons/location-16.svg","octicons-location-24":"octicons/location-24.svg","octicons-lock-16":"octicons/lock-16.svg","octicons-lock-24":"octicons/lock-24.svg","octicons-log-16":"octicons/log-16.svg","octicons-log-24":"octicons/log-24.svg","octicons-logo-gist-16":"octicons/logo-gist-16.svg","octicons-logo-github-16":"octicons/logo-github-16.svg","octicons-mail-16":"octicons/mail-16.svg","octicons-mail-24":"octicons/mail-24.svg","octicons-mark-github-16":"octicons/mark-github-16.svg","octicons-markdown-16":"octicons/markdown-16.svg","octicons-megaphone-16":"octicons/megaphone-16.svg","octicons-megaphone-24":"octicons/megaphone-24.svg","octicons-mention-16":"octicons/mention-16.svg","octicons-mention-24":"octicons/mention-24.svg","octicons-meter-16":"octicons/meter-16.svg","octicons-milestone-16":"octicons/milestone-16.svg","octicons-milestone-24":"octicons/milestone-24.svg","octicons-mirror-16":"octicons/mirror-16.svg","octicons-mirror-24":"octicons/mirror-24.svg","octicons-moon-16":"octicons/moon-16.svg","octicons-moon-24":"octicons/moon-24.svg","octicons-mortar-board-16":"octicons/mortar-board-16.svg","octicons-mortar-board-24":"octicons/mortar-board-24.svg","octicons-move-to-bottom-16":"octicons/move-to-bottom-16.svg","octicons-move-to-bottom-24":"octicons/move-to-bottom-24.svg","octicons-move-to-end-16":"octicons/move-to-end-16.svg","octicons-move-to-end-24":"octicons/move-to-end-24.svg","octicons-move-to-start-16":"octicons/move-to-start-16.svg","octicons-move-to-start-24":"octicons/move-to-start-24.svg","octicons-move-to-top-16":"octicons/move-to-top-16.svg","octicons-move-to-top-24":"octicons/move-to-top-24.svg","octicons-multi-select-16":"octicons/multi-select-16.svg","octicons-multi-select-24":"octicons/multi-select-24.svg","octicons-mute-16":"octicons/mute-16.svg","octicons-mute-24":"octicons/mute-24.svg","octicons-no-entry-16":"octicons/no-entry-16.svg","octicons-no-entry-24":"octicons/no-entry-24.svg","octicons-no-entry-fill-12":"octicons/no-entry-fill-12.svg","octicons-north-star-16":"octicons/north-star-16.svg","octicons-north-star-24":"octicons/north-star-24.svg","octicons-note-16":"octicons/note-16.svg","octicons-note-24":"octicons/note-24.svg","octicons-number-16":"octicons/number-16.svg","octicons-number-24":"octicons/number-24.svg","octicons-organization-16":"octicons/organization-16.svg","octicons-organization-24":"octicons/organization-24.svg","octicons-package-16":"octicons/package-16.svg","octicons-package-24":"octicons/package-24.svg","octicons-package-dependencies-16":"octicons/package-dependencies-16.svg","octicons-package-dependencies-24":"octicons/package-dependencies-24.svg","octicons-package-dependents-16":"octicons/package-dependents-16.svg","octicons-package-dependents-24":"octicons/package-dependents-24.svg","octicons-paintbrush-16":"octicons/paintbrush-16.svg","octicons-paper-airplane-16":"octicons/paper-airplane-16.svg","octicons-paper-airplane-24":"octicons/paper-airplane-24.svg","octicons-paperclip-16":"octicons/paperclip-16.svg","octicons-paperclip-24":"octicons/paperclip-24.svg","octicons-passkey-fill-16":"octicons/passkey-fill-16.svg","octicons-passkey-fill-24":"octicons/passkey-fill-24.svg","octicons-paste-16":"octicons/paste-16.svg","octicons-paste-24":"octicons/paste-24.svg","octicons-pencil-16":"octicons/pencil-16.svg","octicons-pencil-24":"octicons/pencil-24.svg","octicons-people-16":"octicons/people-16.svg","octicons-people-24":"octicons/people-24.svg","octicons-person-16":"octicons/person-16.svg","octicons-person-24":"octicons/person-24.svg","octicons-person-add-16":"octicons/person-add-16.svg","octicons-person-add-24":"octicons/person-add-24.svg","octicons-person-fill-16":"octicons/person-fill-16.svg","octicons-person-fill-24":"octicons/person-fill-24.svg","octicons-pin-16":"octicons/pin-16.svg","octicons-pin-24":"octicons/pin-24.svg","octicons-pin-slash-16":"octicons/pin-slash-16.svg","octicons-pin-slash-24":"octicons/pin-slash-24.svg","octicons-pivot-column-16":"octicons/pivot-column-16.svg","octicons-pivot-column-24":"octicons/pivot-column-24.svg","octicons-play-16":"octicons/play-16.svg","octicons-play-24":"octicons/play-24.svg","octicons-plug-16":"octicons/plug-16.svg","octicons-plug-24":"octicons/plug-24.svg","octicons-plus-16":"octicons/plus-16.svg","octicons-plus-24":"octicons/plus-24.svg","octicons-plus-circle-16":"octicons/plus-circle-16.svg","octicons-plus-circle-24":"octicons/plus-circle-24.svg","octicons-project-16":"octicons/project-16.svg","octicons-project-24":"octicons/project-24.svg","octicons-project-roadmap-16":"octicons/project-roadmap-16.svg","octicons-project-roadmap-24":"octicons/project-roadmap-24.svg","octicons-project-symlink-16":"octicons/project-symlink-16.svg","octicons-project-symlink-24":"octicons/project-symlink-24.svg","octicons-project-template-16":"octicons/project-template-16.svg","octicons-project-template-24":"octicons/project-template-24.svg","octicons-pulse-16":"octicons/pulse-16.svg","octicons-pulse-24":"octicons/pulse-24.svg","octicons-question-16":"octicons/question-16.svg","octicons-question-24":"octicons/question-24.svg","octicons-quote-16":"octicons/quote-16.svg","octicons-quote-24":"octicons/quote-24.svg","octicons-read-16":"octicons/read-16.svg","octicons-read-24":"octicons/read-24.svg","octicons-redo-16":"octicons/redo-16.svg","octicons-rel-file-path-16":"octicons/rel-file-path-16.svg","octicons-rel-file-path-24":"octicons/rel-file-path-24.svg","octicons-reply-16":"octicons/reply-16.svg","octicons-reply-24":"octicons/reply-24.svg","octicons-repo-16":"octicons/repo-16.svg","octicons-repo-24":"octicons/repo-24.svg","octicons-repo-clone-16":"octicons/repo-clone-16.svg","octicons-repo-clone-24":"octicons/repo-clone-24.svg","octicons-repo-deleted-16":"octicons/repo-deleted-16.svg","octicons-repo-forked-16":"octicons/repo-forked-16.svg","octicons-repo-forked-24":"octicons/repo-forked-24.svg","octicons-repo-locked-16":"octicons/repo-locked-16.svg","octicons-repo-locked-24":"octicons/repo-locked-24.svg","octicons-repo-pull-16":"octicons/repo-pull-16.svg","octicons-repo-pull-24":"octicons/repo-pull-24.svg","octicons-repo-push-16":"octicons/repo-push-16.svg","octicons-repo-push-24":"octicons/repo-push-24.svg","octicons-repo-template-16":"octicons/repo-template-16.svg","octicons-repo-template-24":"octicons/repo-template-24.svg","octicons-report-16":"octicons/report-16.svg","octicons-report-24":"octicons/report-24.svg","octicons-rocket-16":"octicons/rocket-16.svg","octicons-rocket-24":"octicons/rocket-24.svg","octicons-rows-16":"octicons/rows-16.svg","octicons-rows-24":"octicons/rows-24.svg","octicons-rss-16":"octicons/rss-16.svg","octicons-rss-24":"octicons/rss-24.svg","octicons-ruby-16":"octicons/ruby-16.svg","octicons-ruby-24":"octicons/ruby-24.svg","octicons-screen-full-16":"octicons/screen-full-16.svg","octicons-screen-full-24":"octicons/screen-full-24.svg","octicons-screen-normal-16":"octicons/screen-normal-16.svg","octicons-screen-normal-24":"octicons/screen-normal-24.svg","octicons-search-16":"octicons/search-16.svg","octicons-search-24":"octicons/search-24.svg","octicons-server-16":"octicons/server-16.svg","octicons-server-24":"octicons/server-24.svg","octicons-share-16":"octicons/share-16.svg","octicons-share-24":"octicons/share-24.svg","octicons-share-android-16":"octicons/share-android-16.svg","octicons-share-android-24":"octicons/share-android-24.svg","octicons-shield-16":"octicons/shield-16.svg","octicons-shield-24":"octicons/shield-24.svg","octicons-shield-check-16":"octicons/shield-check-16.svg","octicons-shield-check-24":"octicons/shield-check-24.svg","octicons-shield-lock-16":"octicons/shield-lock-16.svg","octicons-shield-lock-24":"octicons/shield-lock-24.svg","octicons-shield-slash-16":"octicons/shield-slash-16.svg","octicons-shield-slash-24":"octicons/shield-slash-24.svg","octicons-shield-x-16":"octicons/shield-x-16.svg","octicons-shield-x-24":"octicons/shield-x-24.svg","octicons-sidebar-collapse-16":"octicons/sidebar-collapse-16.svg","octicons-sidebar-collapse-24":"octicons/sidebar-collapse-24.svg","octicons-sidebar-expand-16":"octicons/sidebar-expand-16.svg","octicons-sidebar-expand-24":"octicons/sidebar-expand-24.svg","octicons-sign-in-16":"octicons/sign-in-16.svg","octicons-sign-in-24":"octicons/sign-in-24.svg","octicons-sign-out-16":"octicons/sign-out-16.svg","octicons-sign-out-24":"octicons/sign-out-24.svg","octicons-single-select-16":"octicons/single-select-16.svg","octicons-single-select-24":"octicons/single-select-24.svg","octicons-skip-16":"octicons/skip-16.svg","octicons-skip-24":"octicons/skip-24.svg","octicons-skip-fill-16":"octicons/skip-fill-16.svg","octicons-skip-fill-24":"octicons/skip-fill-24.svg","octicons-sliders-16":"octicons/sliders-16.svg","octicons-smiley-16":"octicons/smiley-16.svg","octicons-smiley-24":"octicons/smiley-24.svg","octicons-sort-asc-16":"octicons/sort-asc-16.svg","octicons-sort-asc-24":"octicons/sort-asc-24.svg","octicons-sort-desc-16":"octicons/sort-desc-16.svg","octicons-sort-desc-24":"octicons/sort-desc-24.svg","octicons-sparkle-fill-16":"octicons/sparkle-fill-16.svg","octicons-sponsor-tiers-16":"octicons/sponsor-tiers-16.svg","octicons-sponsor-tiers-24":"octicons/sponsor-tiers-24.svg","octicons-square-16":"octicons/square-16.svg","octicons-square-24":"octicons/square-24.svg","octicons-square-fill-16":"octicons/square-fill-16.svg","octicons-square-fill-24":"octicons/square-fill-24.svg","octicons-squirrel-16":"octicons/squirrel-16.svg","octicons-squirrel-24":"octicons/squirrel-24.svg","octicons-stack-16":"octicons/stack-16.svg","octicons-stack-24":"octicons/stack-24.svg","octicons-star-16":"octicons/star-16.svg","octicons-star-24":"octicons/star-24.svg","octicons-star-fill-16":"octicons/star-fill-16.svg","octicons-star-fill-24":"octicons/star-fill-24.svg","octicons-stop-16":"octicons/stop-16.svg","octicons-stop-24":"octicons/stop-24.svg","octicons-stopwatch-16":"octicons/stopwatch-16.svg","octicons-stopwatch-24":"octicons/stopwatch-24.svg","octicons-strikethrough-16":"octicons/strikethrough-16.svg","octicons-strikethrough-24":"octicons/strikethrough-24.svg","octicons-sun-16":"octicons/sun-16.svg","octicons-sun-24":"octicons/sun-24.svg","octicons-sync-16":"octicons/sync-16.svg","octicons-sync-24":"octicons/sync-24.svg","octicons-tab-24":"octicons/tab-24.svg","octicons-tab-external-16":"octicons/tab-external-16.svg","octicons-table-16":"octicons/table-16.svg","octicons-table-24":"octicons/table-24.svg","octicons-tag-16":"octicons/tag-16.svg","octicons-tag-24":"octicons/tag-24.svg","octicons-tasklist-16":"octicons/tasklist-16.svg","octicons-tasklist-24":"octicons/tasklist-24.svg","octicons-telescope-16":"octicons/telescope-16.svg","octicons-telescope-24":"octicons/telescope-24.svg","octicons-telescope-fill-16":"octicons/telescope-fill-16.svg","octicons-telescope-fill-24":"octicons/telescope-fill-24.svg","octicons-terminal-16":"octicons/terminal-16.svg","octicons-terminal-24":"octicons/terminal-24.svg","octicons-three-bars-16":"octicons/three-bars-16.svg","octicons-thumbsdown-16":"octicons/thumbsdown-16.svg","octicons-thumbsdown-24":"octicons/thumbsdown-24.svg","octicons-thumbsup-16":"octicons/thumbsup-16.svg","octicons-thumbsup-24":"octicons/thumbsup-24.svg","octicons-tools-16":"octicons/tools-16.svg","octicons-tools-24":"octicons/tools-24.svg","octicons-tracked-by-closed-completed-16":"octicons/tracked-by-closed-completed-16.svg","octicons-tracked-by-closed-completed-24":"octicons/tracked-by-closed-completed-24.svg","octicons-tracked-by-closed-not-planned-16":"octicons/tracked-by-closed-not-planned-16.svg","octicons-tracked-by-closed-not-planned-24":"octicons/tracked-by-closed-not-planned-24.svg","octicons-trash-16":"octicons/trash-16.svg","octicons-trash-24":"octicons/trash-24.svg","octicons-triangle-down-16":"octicons/triangle-down-16.svg","octicons-triangle-down-24":"octicons/triangle-down-24.svg","octicons-triangle-left-16":"octicons/triangle-left-16.svg","octicons-triangle-left-24":"octicons/triangle-left-24.svg","octicons-triangle-right-16":"octicons/triangle-right-16.svg","octicons-triangle-right-24":"octicons/triangle-right-24.svg","octicons-triangle-up-16":"octicons/triangle-up-16.svg","octicons-triangle-up-24":"octicons/triangle-up-24.svg","octicons-trophy-16":"octicons/trophy-16.svg","octicons-trophy-24":"octicons/trophy-24.svg","octicons-typography-16":"octicons/typography-16.svg","octicons-typography-24":"octicons/typography-24.svg","octicons-undo-16":"octicons/undo-16.svg","octicons-unfold-16":"octicons/unfold-16.svg","octicons-unfold-24":"octicons/unfold-24.svg","octicons-unlink-16":"octicons/unlink-16.svg","octicons-unlink-24":"octicons/unlink-24.svg","octicons-unlock-16":"octicons/unlock-16.svg","octicons-unlock-24":"octicons/unlock-24.svg","octicons-unmute-16":"octicons/unmute-16.svg","octicons-unmute-24":"octicons/unmute-24.svg","octicons-unread-16":"octicons/unread-16.svg","octicons-unread-24":"octicons/unread-24.svg","octicons-unverified-16":"octicons/unverified-16.svg","octicons-unverified-24":"octicons/unverified-24.svg","octicons-upload-16":"octicons/upload-16.svg","octicons-upload-24":"octicons/upload-24.svg","octicons-verified-16":"octicons/verified-16.svg","octicons-verified-24":"octicons/verified-24.svg","octicons-versions-16":"octicons/versions-16.svg","octicons-versions-24":"octicons/versions-24.svg","octicons-video-16":"octicons/video-16.svg","octicons-video-24":"octicons/video-24.svg","octicons-webhook-16":"octicons/webhook-16.svg","octicons-workflow-16":"octicons/workflow-16.svg","octicons-workflow-24":"octicons/workflow-24.svg","octicons-x-12":"octicons/x-12.svg","octicons-x-16":"octicons/x-16.svg","octicons-x-24":"octicons/x-24.svg","octicons-x-circle-16":"octicons/x-circle-16.svg","octicons-x-circle-24":"octicons/x-circle-24.svg","octicons-x-circle-fill-12":"octicons/x-circle-fill-12.svg","octicons-x-circle-fill-16":"octicons/x-circle-fill-16.svg","octicons-x-circle-fill-24":"octicons/x-circle-fill-24.svg","octicons-zap-16":"octicons/zap-16.svg","octicons-zap-24":"octicons/zap-24.svg","octicons-zoom-in-16":"octicons/zoom-in-16.svg","octicons-zoom-in-24":"octicons/zoom-in-24.svg","octicons-zoom-out-16":"octicons/zoom-out-16.svg","octicons-zoom-out-24":"octicons/zoom-out-24.svg","simple-1001tracklists":"simple/1001tracklists.svg","simple-1password":"simple/1password.svg","simple-3m":"simple/3m.svg","simple-42":"simple/42.svg","simple-4chan":"simple/4chan.svg","simple-4d":"simple/4d.svg","simple-500px":"simple/500px.svg","simple-abbott":"simple/abbott.svg","simple-abbrobotstudio":"simple/abbrobotstudio.svg","simple-abbvie":"simple/abbvie.svg","simple-abletonlive":"simple/abletonlive.svg","simple-aboutdotme":"simple/aboutdotme.svg","simple-abstract":"simple/abstract.svg","simple-academia":"simple/academia.svg","simple-accenture":"simple/accenture.svg","simple-acclaim":"simple/acclaim.svg","simple-accusoft":"simple/accusoft.svg","simple-acer":"simple/acer.svg","simple-acm":"simple/acm.svg","simple-actigraph":"simple/actigraph.svg","simple-activision":"simple/activision.svg","simple-acura":"simple/acura.svg","simple-adafruit":"simple/adafruit.svg","simple-adblock":"simple/adblock.svg","simple-adblockplus":"simple/adblockplus.svg","simple-addthis":"simple/addthis.svg","simple-adguard":"simple/adguard.svg","simple-adidas":"simple/adidas.svg","simple-adminer":"simple/adminer.svg","simple-adobe":"simple/adobe.svg","simple-adobeacrobatreader":"simple/adobeacrobatreader.svg","simple-adobeaftereffects":"simple/adobeaftereffects.svg","simple-adobeaudition":"simple/adobeaudition.svg","simple-adobecreativecloud":"simple/adobecreativecloud.svg","simple-adobedreamweaver":"simple/adobedreamweaver.svg","simple-adobefonts":"simple/adobefonts.svg","simple-adobeillustrator":"simple/adobeillustrator.svg","simple-adobeindesign":"simple/adobeindesign.svg","simple-adobelightroom":"simple/adobelightroom.svg","simple-adobelightroomclassic":"simple/adobelightroomclassic.svg","simple-adobephotoshop":"simple/adobephotoshop.svg","simple-adobepremierepro":"simple/adobepremierepro.svg","simple-adobexd":"simple/adobexd.svg","simple-adonisjs":"simple/adonisjs.svg","simple-adp":"simple/adp.svg","simple-adroll":"simple/adroll.svg","simple-adventofcode":"simple/adventofcode.svg","simple-adyen":"simple/adyen.svg","simple-aerlingus":"simple/aerlingus.svg","simple-aeroflot":"simple/aeroflot.svg","simple-aeromexico":"simple/aeromexico.svg","simple-aerospike":"simple/aerospike.svg","simple-aew":"simple/aew.svg","simple-affine":"simple/affine.svg","simple-affinity":"simple/affinity.svg","simple-affinitydesigner":"simple/affinitydesigner.svg","simple-affinityphoto":"simple/affinityphoto.svg","simple-affinitypublisher":"simple/affinitypublisher.svg","simple-aframe":"simple/aframe.svg","simple-agora":"simple/agora.svg","simple-aib":"simple/aib.svg","simple-aidungeon":"simple/aidungeon.svg","simple-aiohttp":"simple/aiohttp.svg","simple-aiqfome":"simple/aiqfome.svg","simple-airasia":"simple/airasia.svg","simple-airbnb":"simple/airbnb.svg","simple-airbrakedotio":"simple/airbrakedotio.svg","simple-airbus":"simple/airbus.svg","simple-airbyte":"simple/airbyte.svg","simple-aircall":"simple/aircall.svg","simple-aircanada":"simple/aircanada.svg","simple-airchina":"simple/airchina.svg","simple-airfrance":"simple/airfrance.svg","simple-airindia":"simple/airindia.svg","simple-airplayaudio":"simple/airplayaudio.svg","simple-airplayvideo":"simple/airplayvideo.svg","simple-airtable":"simple/airtable.svg","simple-ajv":"simple/ajv.svg","simple-akamai":"simple/akamai.svg","simple-akaunting":"simple/akaunting.svg","simple-alacritty":"simple/alacritty.svg","simple-albertheijn":"simple/albertheijn.svg","simple-alby":"simple/alby.svg","simple-alchemy":"simple/alchemy.svg","simple-aldinord":"simple/aldinord.svg","simple-aldisud":"simple/aldisud.svg","simple-alfaromeo":"simple/alfaromeo.svg","simple-alfred":"simple/alfred.svg","simple-algolia":"simple/algolia.svg","simple-algorand":"simple/algorand.svg","simple-alibabacloud":"simple/alibabacloud.svg","simple-alibabadotcom":"simple/alibabadotcom.svg","simple-alienware":"simple/alienware.svg","simple-aliexpress":"simple/aliexpress.svg","simple-alipay":"simple/alipay.svg","simple-allegro":"simple/allegro.svg","simple-alliedmodders":"simple/alliedmodders.svg","simple-allocine":"simple/allocine.svg","simple-alltrails":"simple/alltrails.svg","simple-alpinedotjs":"simple/alpinedotjs.svg","simple-alpinelinux":"simple/alpinelinux.svg","simple-alteryx":"simple/alteryx.svg","simple-altiumdesigner":"simple/altiumdesigner.svg","simple-alwaysdata":"simple/alwaysdata.svg","simple-amazon":"simple/amazon.svg","simple-amazonalexa":"simple/amazonalexa.svg","simple-amazonapigateway":"simple/amazonapigateway.svg","simple-amazonaws":"simple/amazonaws.svg","simple-amazoncloudwatch":"simple/amazoncloudwatch.svg","simple-amazondocumentdb":"simple/amazondocumentdb.svg","simple-amazondynamodb":"simple/amazondynamodb.svg","simple-amazonec2":"simple/amazonec2.svg","simple-amazonecs":"simple/amazonecs.svg","simple-amazoneks":"simple/amazoneks.svg","simple-amazonfiretv":"simple/amazonfiretv.svg","simple-amazongames":"simple/amazongames.svg","simple-amazoniam":"simple/amazoniam.svg","simple-amazonlumberyard":"simple/amazonlumberyard.svg","simple-amazonluna":"simple/amazonluna.svg","simple-amazonpay":"simple/amazonpay.svg","simple-amazonprime":"simple/amazonprime.svg","simple-amazonrds":"simple/amazonrds.svg","simple-amazonredshift":"simple/amazonredshift.svg","simple-amazonroute53":"simple/amazonroute53.svg","simple-amazons3":"simple/amazons3.svg","simple-amazonsimpleemailservice":"simple/amazonsimpleemailservice.svg","simple-amazonsqs":"simple/amazonsqs.svg","simple-amd":"simple/amd.svg","simple-ameba":"simple/ameba.svg","simple-americanairlines":"simple/americanairlines.svg","simple-americanexpress":"simple/americanexpress.svg","simple-amg":"simple/amg.svg","simple-amp":"simple/amp.svg","simple-amul":"simple/amul.svg","simple-ana":"simple/ana.svg","simple-anaconda":"simple/anaconda.svg","simple-analogue":"simple/analogue.svg","simple-anchor":"simple/anchor.svg","simple-andela":"simple/andela.svg","simple-android":"simple/android.svg","simple-androidauto":"simple/androidauto.svg","simple-androidstudio":"simple/androidstudio.svg","simple-angellist":"simple/angellist.svg","simple-angular":"simple/angular.svg","simple-angularjs":"simple/angularjs.svg","simple-angularuniversal":"simple/angularuniversal.svg","simple-anilist":"simple/anilist.svg","simple-ansible":"simple/ansible.svg","simple-answer":"simple/answer.svg","simple-ansys":"simple/ansys.svg","simple-anta":"simple/anta.svg","simple-antdesign":"simple/antdesign.svg","simple-antena3":"simple/antena3.svg","simple-anydesk":"simple/anydesk.svg","simple-aol":"simple/aol.svg","simple-apache":"simple/apache.svg","simple-apacheairflow":"simple/apacheairflow.svg","simple-apacheant":"simple/apacheant.svg","simple-apachecassandra":"simple/apachecassandra.svg","simple-apachecloudstack":"simple/apachecloudstack.svg","simple-apachecordova":"simple/apachecordova.svg","simple-apachecouchdb":"simple/apachecouchdb.svg","simple-apachedruid":"simple/apachedruid.svg","simple-apacheecharts":"simple/apacheecharts.svg","simple-apacheflink":"simple/apacheflink.svg","simple-apachegroovy":"simple/apachegroovy.svg","simple-apachehadoop":"simple/apachehadoop.svg","simple-apachehive":"simple/apachehive.svg","simple-apachejmeter":"simple/apachejmeter.svg","simple-apachekafka":"simple/apachekafka.svg","simple-apachekylin":"simple/apachekylin.svg","simple-apachemaven":"simple/apachemaven.svg","simple-apachenetbeanside":"simple/apachenetbeanside.svg","simple-apacheopenoffice":"simple/apacheopenoffice.svg","simple-apacheparquet":"simple/apacheparquet.svg","simple-apachepulsar":"simple/apachepulsar.svg","simple-apacherocketmq":"simple/apacherocketmq.svg","simple-apachesolr":"simple/apachesolr.svg","simple-apachespark":"simple/apachespark.svg","simple-apachestorm":"simple/apachestorm.svg","simple-apachetomcat":"simple/apachetomcat.svg","simple-aparat":"simple/aparat.svg","simple-apifox":"simple/apifox.svg","simple-apollographql":"simple/apollographql.svg","simple-apostrophe":"simple/apostrophe.svg","simple-appian":"simple/appian.svg","simple-apple":"simple/apple.svg","simple-applearcade":"simple/applearcade.svg","simple-applemusic":"simple/applemusic.svg","simple-applenews":"simple/applenews.svg","simple-applepay":"simple/applepay.svg","simple-applepodcasts":"simple/applepodcasts.svg","simple-appletv":"simple/appletv.svg","simple-appsignal":"simple/appsignal.svg","simple-appsmith":"simple/appsmith.svg","simple-appstore":"simple/appstore.svg","simple-appveyor":"simple/appveyor.svg","simple-appwrite":"simple/appwrite.svg","simple-aqua":"simple/aqua.svg","simple-aral":"simple/aral.svg","simple-arangodb":"simple/arangodb.svg","simple-arcgis":"simple/arcgis.svg","simple-archicad":"simple/archicad.svg","simple-archiveofourown":"simple/archiveofourown.svg","simple-archlinux":"simple/archlinux.svg","simple-ardour":"simple/ardour.svg","simple-arduino":"simple/arduino.svg","simple-argo":"simple/argo.svg","simple-argos":"simple/argos.svg","simple-ariakit":"simple/ariakit.svg","simple-arkecosystem":"simple/arkecosystem.svg","simple-arlo":"simple/arlo.svg","simple-arm":"simple/arm.svg","simple-armkeil":"simple/armkeil.svg","simple-arstechnica":"simple/arstechnica.svg","simple-artifacthub":"simple/artifacthub.svg","simple-artixlinux":"simple/artixlinux.svg","simple-artstation":"simple/artstation.svg","simple-arxiv":"simple/arxiv.svg","simple-asana":"simple/asana.svg","simple-asciidoctor":"simple/asciidoctor.svg","simple-asciinema":"simple/asciinema.svg","simple-asda":"simple/asda.svg","simple-aseprite":"simple/aseprite.svg","simple-askfm":"simple/askfm.svg","simple-askubuntu":"simple/askubuntu.svg","simple-assemblyscript":"simple/assemblyscript.svg","simple-astonmartin":"simple/astonmartin.svg","simple-astro":"simple/astro.svg","simple-asus":"simple/asus.svg","simple-atandt":"simple/atandt.svg","simple-atari":"simple/atari.svg","simple-atlassian":"simple/atlassian.svg","simple-atom":"simple/atom.svg","simple-auchan":"simple/auchan.svg","simple-audacity":"simple/audacity.svg","simple-audi":"simple/audi.svg","simple-audible":"simple/audible.svg","simple-audioboom":"simple/audioboom.svg","simple-audiomack":"simple/audiomack.svg","simple-audiotechnica":"simple/audiotechnica.svg","simple-aurelia":"simple/aurelia.svg","simple-auth0":"simple/auth0.svg","simple-authelia":"simple/authelia.svg","simple-authy":"simple/authy.svg","simple-autodesk":"simple/autodesk.svg","simple-autodeskrevit":"simple/autodeskrevit.svg","simple-autohotkey":"simple/autohotkey.svg","simple-automattic":"simple/automattic.svg","simple-autoprefixer":"simple/autoprefixer.svg","simple-avajs":"simple/avajs.svg","simple-avast":"simple/avast.svg","simple-avira":"simple/avira.svg","simple-awesomelists":"simple/awesomelists.svg","simple-awesomewm":"simple/awesomewm.svg","simple-awsamplify":"simple/awsamplify.svg","simple-awsfargate":"simple/awsfargate.svg","simple-awslambda":"simple/awslambda.svg","simple-awsorganizations":"simple/awsorganizations.svg","simple-axios":"simple/axios.svg","simple-azureartifacts":"simple/azureartifacts.svg","simple-azuredataexplorer":"simple/azuredataexplorer.svg","simple-azuredevops":"simple/azuredevops.svg","simple-azurefunctions":"simple/azurefunctions.svg","simple-azurepipelines":"simple/azurepipelines.svg","simple-babel":"simple/babel.svg","simple-babylondotjs":"simple/babylondotjs.svg","simple-backblaze":"simple/backblaze.svg","simple-backbonedotjs":"simple/backbonedotjs.svg","simple-backendless":"simple/backendless.svg","simple-backstage":"simple/backstage.svg","simple-badgr":"simple/badgr.svg","simple-badoo":"simple/badoo.svg","simple-baidu":"simple/baidu.svg","simple-bamboo":"simple/bamboo.svg","simple-bandcamp":"simple/bandcamp.svg","simple-bandlab":"simple/bandlab.svg","simple-bandrautomation":"simple/bandrautomation.svg","simple-bandsintown":"simple/bandsintown.svg","simple-bankofamerica":"simple/bankofamerica.svg","simple-barclays":"simple/barclays.svg","simple-baremetrics":"simple/baremetrics.svg","simple-basecamp":"simple/basecamp.svg","simple-bastyon":"simple/bastyon.svg","simple-bata":"simple/bata.svg","simple-bathasu":"simple/bathasu.svg","simple-battledotnet":"simple/battledotnet.svg","simple-bbc":"simple/bbc.svg","simple-bbciplayer":"simple/bbciplayer.svg","simple-beatport":"simple/beatport.svg","simple-beats":"simple/beats.svg","simple-beatsbydre":"simple/beatsbydre.svg","simple-behance":"simple/behance.svg","simple-beijingsubway":"simple/beijingsubway.svg","simple-bem":"simple/bem.svg","simple-bentley":"simple/bentley.svg","simple-bento":"simple/bento.svg","simple-bentoml":"simple/bentoml.svg","simple-betfair":"simple/betfair.svg","simple-bigbasket":"simple/bigbasket.svg","simple-bigbluebutton":"simple/bigbluebutton.svg","simple-bigcartel":"simple/bigcartel.svg","simple-bigcommerce":"simple/bigcommerce.svg","simple-bilibili":"simple/bilibili.svg","simple-billboard":"simple/billboard.svg","simple-bim":"simple/bim.svg","simple-binance":"simple/binance.svg","simple-biolink":"simple/biolink.svg","simple-bisecthosting":"simple/bisecthosting.svg","simple-bit":"simple/bit.svg","simple-bitbucket":"simple/bitbucket.svg","simple-bitcoin":"simple/bitcoin.svg","simple-bitcoincash":"simple/bitcoincash.svg","simple-bitcoinsv":"simple/bitcoinsv.svg","simple-bitdefender":"simple/bitdefender.svg","simple-bitly":"simple/bitly.svg","simple-bitrise":"simple/bitrise.svg","simple-bitwarden":"simple/bitwarden.svg","simple-bitwig":"simple/bitwig.svg","simple-blackberry":"simple/blackberry.svg","simple-blazemeter":"simple/blazemeter.svg","simple-blazor":"simple/blazor.svg","simple-blender":"simple/blender.svg","simple-blockchaindotcom":"simple/blockchaindotcom.svg","simple-blogger":"simple/blogger.svg","simple-bloglovin":"simple/bloglovin.svg","simple-blueprint":"simple/blueprint.svg","simple-bluetooth":"simple/bluetooth.svg","simple-bmcsoftware":"simple/bmcsoftware.svg","simple-bmw":"simple/bmw.svg","simple-boardgamegeek":"simple/boardgamegeek.svg","simple-boehringeringelheim":"simple/boehringeringelheim.svg","simple-boeing":"simple/boeing.svg","simple-bombardier":"simple/bombardier.svg","simple-bookalope":"simple/bookalope.svg","simple-bookbub":"simple/bookbub.svg","simple-bookmeter":"simple/bookmeter.svg","simple-bookmyshow":"simple/bookmyshow.svg","simple-bookstack":"simple/bookstack.svg","simple-boost":"simple/boost.svg","simple-boots":"simple/boots.svg","simple-bootstrap":"simple/bootstrap.svg","simple-borgbackup":"simple/borgbackup.svg","simple-bosch":"simple/bosch.svg","simple-bose":"simple/bose.svg","simple-botblecms":"simple/botblecms.svg","simple-boulanger":"simple/boulanger.svg","simple-bower":"simple/bower.svg","simple-box":"simple/box.svg","simple-boxysvg":"simple/boxysvg.svg","simple-brandfolder":"simple/brandfolder.svg","simple-brave":"simple/brave.svg","simple-breaker":"simple/breaker.svg","simple-brevo":"simple/brevo.svg","simple-britishairways":"simple/britishairways.svg","simple-broadcom":"simple/broadcom.svg","simple-bsd":"simple/bsd.svg","simple-bspwm":"simple/bspwm.svg","simple-bt":"simple/bt.svg","simple-buddy":"simple/buddy.svg","simple-budibase":"simple/budibase.svg","simple-buefy":"simple/buefy.svg","simple-buffer":"simple/buffer.svg","simple-bugatti":"simple/bugatti.svg","simple-bugcrowd":"simple/bugcrowd.svg","simple-bugsnag":"simple/bugsnag.svg","simple-buildkite":"simple/buildkite.svg","simple-bukalapak":"simple/bukalapak.svg","simple-bulma":"simple/bulma.svg","simple-bun":"simple/bun.svg","simple-bunq":"simple/bunq.svg","simple-burgerking":"simple/burgerking.svg","simple-burton":"simple/burton.svg","simple-buymeacoffee":"simple/buymeacoffee.svg","simple-buzzfeed":"simple/buzzfeed.svg","simple-bvg":"simple/bvg.svg","simple-byjus":"simple/byjus.svg","simple-byte":"simple/byte.svg","simple-bytedance":"simple/bytedance.svg","simple-c":"simple/c.svg","simple-cachet":"simple/cachet.svg","simple-caddy":"simple/caddy.svg","simple-cadillac":"simple/cadillac.svg","simple-cafepress":"simple/cafepress.svg","simple-caffeine":"simple/caffeine.svg","simple-cairographics":"simple/cairographics.svg","simple-cairometro":"simple/cairometro.svg","simple-cakephp":"simple/cakephp.svg","simple-campaignmonitor":"simple/campaignmonitor.svg","simple-canonical":"simple/canonical.svg","simple-canva":"simple/canva.svg","simple-capacitor":"simple/capacitor.svg","simple-cardano":"simple/cardano.svg","simple-carrd":"simple/carrd.svg","simple-carrefour":"simple/carrefour.svg","simple-carthrottle":"simple/carthrottle.svg","simple-carto":"simple/carto.svg","simple-cashapp":"simple/cashapp.svg","simple-castbox":"simple/castbox.svg","simple-castorama":"simple/castorama.svg","simple-castro":"simple/castro.svg","simple-caterpillar":"simple/caterpillar.svg","simple-cbs":"simple/cbs.svg","simple-cdprojekt":"simple/cdprojekt.svg","simple-celery":"simple/celery.svg","simple-centos":"simple/centos.svg","simple-ceph":"simple/ceph.svg","simple-cesium":"simple/cesium.svg","simple-chai":"simple/chai.svg","simple-chainguard":"simple/chainguard.svg","simple-chainlink":"simple/chainlink.svg","simple-chakraui":"simple/chakraui.svg","simple-channel4":"simple/channel4.svg","simple-chartdotjs":"simple/chartdotjs.svg","simple-chartmogul":"simple/chartmogul.svg","simple-chase":"simple/chase.svg","simple-chatbot":"simple/chatbot.svg","simple-chatwoot":"simple/chatwoot.svg","simple-checkio":"simple/checkio.svg","simple-checkmarx":"simple/checkmarx.svg","simple-checkmk":"simple/checkmk.svg","simple-chef":"simple/chef.svg","simple-chemex":"simple/chemex.svg","simple-chevrolet":"simple/chevrolet.svg","simple-chianetwork":"simple/chianetwork.svg","simple-chinaeasternairlines":"simple/chinaeasternairlines.svg","simple-chinasouthernairlines":"simple/chinasouthernairlines.svg","simple-chocolatey":"simple/chocolatey.svg","simple-chromatic":"simple/chromatic.svg","simple-chromecast":"simple/chromecast.svg","simple-chrysler":"simple/chrysler.svg","simple-chupachups":"simple/chupachups.svg","simple-cilium":"simple/cilium.svg","simple-cinema4d":"simple/cinema4d.svg","simple-circle":"simple/circle.svg","simple-circleci":"simple/circleci.svg","simple-circuitverse":"simple/circuitverse.svg","simple-cirrusci":"simple/cirrusci.svg","simple-cisco":"simple/cisco.svg","simple-citrix":"simple/citrix.svg","simple-citroen":"simple/citroen.svg","simple-civicrm":"simple/civicrm.svg","simple-civo":"simple/civo.svg","simple-ckeditor4":"simple/ckeditor4.svg","simple-clarifai":"simple/clarifai.svg","simple-claris":"simple/claris.svg","simple-clarivate":"simple/clarivate.svg","simple-clickhouse":"simple/clickhouse.svg","simple-clickup":"simple/clickup.svg","simple-clion":"simple/clion.svg","simple-cliqz":"simple/cliqz.svg","simple-clockify":"simple/clockify.svg","simple-clojure":"simple/clojure.svg","simple-cloud66":"simple/cloud66.svg","simple-cloudbees":"simple/cloudbees.svg","simple-cloudcannon":"simple/cloudcannon.svg","simple-cloudera":"simple/cloudera.svg","simple-cloudflare":"simple/cloudflare.svg","simple-cloudflarepages":"simple/cloudflarepages.svg","simple-cloudfoundry":"simple/cloudfoundry.svg","simple-cloudsmith":"simple/cloudsmith.svg","simple-cloudways":"simple/cloudways.svg","simple-clubhouse":"simple/clubhouse.svg","simple-clyp":"simple/clyp.svg","simple-cmake":"simple/cmake.svg","simple-cncf":"simple/cncf.svg","simple-cnn":"simple/cnn.svg","simple-cocacola":"simple/cocacola.svg","simple-cockpit":"simple/cockpit.svg","simple-cockroachlabs":"simple/cockroachlabs.svg","simple-cocoapods":"simple/cocoapods.svg","simple-cocos":"simple/cocos.svg","simple-coda":"simple/coda.svg","simple-codacy":"simple/codacy.svg","simple-codeberg":"simple/codeberg.svg","simple-codecademy":"simple/codecademy.svg","simple-codeceptjs":"simple/codeceptjs.svg","simple-codechef":"simple/codechef.svg","simple-codeclimate":"simple/codeclimate.svg","simple-codecov":"simple/codecov.svg","simple-codefactor":"simple/codefactor.svg","simple-codeforces":"simple/codeforces.svg","simple-codeigniter":"simple/codeigniter.svg","simple-codemagic":"simple/codemagic.svg","simple-codemirror":"simple/codemirror.svg","simple-codenewbie":"simple/codenewbie.svg","simple-codepen":"simple/codepen.svg","simple-codeproject":"simple/codeproject.svg","simple-codereview":"simple/codereview.svg","simple-codersrank":"simple/codersrank.svg","simple-coderwall":"simple/coderwall.svg","simple-codesandbox":"simple/codesandbox.svg","simple-codeship":"simple/codeship.svg","simple-codesignal":"simple/codesignal.svg","simple-codestream":"simple/codestream.svg","simple-codewars":"simple/codewars.svg","simple-codingame":"simple/codingame.svg","simple-codingninjas":"simple/codingninjas.svg","simple-codio":"simple/codio.svg","simple-coffeescript":"simple/coffeescript.svg","simple-cognizant":"simple/cognizant.svg","simple-coil":"simple/coil.svg","simple-coinbase":"simple/coinbase.svg","simple-coinmarketcap":"simple/coinmarketcap.svg","simple-commerzbank":"simple/commerzbank.svg","simple-commitlint":"simple/commitlint.svg","simple-commodore":"simple/commodore.svg","simple-commonworkflowlanguage":"simple/commonworkflowlanguage.svg","simple-compilerexplorer":"simple/compilerexplorer.svg","simple-composer":"simple/composer.svg","simple-comptia":"simple/comptia.svg","simple-comsol":"simple/comsol.svg","simple-conan":"simple/conan.svg","simple-concourse":"simple/concourse.svg","simple-condaforge":"simple/condaforge.svg","simple-conekta":"simple/conekta.svg","simple-confluence":"simple/confluence.svg","simple-construct3":"simple/construct3.svg","simple-consul":"simple/consul.svg","simple-contactlesspayment":"simple/contactlesspayment.svg","simple-containerd":"simple/containerd.svg","simple-contao":"simple/contao.svg","simple-contentful":"simple/contentful.svg","simple-conventionalcommits":"simple/conventionalcommits.svg","simple-convertio":"simple/convertio.svg","simple-cookiecutter":"simple/cookiecutter.svg","simple-coop":"simple/coop.svg","simple-cora":"simple/cora.svg","simple-coronaengine":"simple/coronaengine.svg","simple-coronarenderer":"simple/coronarenderer.svg","simple-corsair":"simple/corsair.svg","simple-couchbase":"simple/couchbase.svg","simple-counterstrike":"simple/counterstrike.svg","simple-countingworkspro":"simple/countingworkspro.svg","simple-coursera":"simple/coursera.svg","simple-coveralls":"simple/coveralls.svg","simple-cpanel":"simple/cpanel.svg","simple-cplusplus":"simple/cplusplus.svg","simple-cplusplusbuilder":"simple/cplusplusbuilder.svg","simple-craftcms":"simple/craftcms.svg","simple-craftsman":"simple/craftsman.svg","simple-cratedb":"simple/cratedb.svg","simple-crayon":"simple/crayon.svg","simple-creality":"simple/creality.svg","simple-createreactapp":"simple/createreactapp.svg","simple-creativecommons":"simple/creativecommons.svg","simple-creativetechnology":"simple/creativetechnology.svg","simple-credly":"simple/credly.svg","simple-crehana":"simple/crehana.svg","simple-criticalrole":"simple/criticalrole.svg","simple-crowdin":"simple/crowdin.svg","simple-crowdsource":"simple/crowdsource.svg","simple-crunchbase":"simple/crunchbase.svg","simple-crunchyroll":"simple/crunchyroll.svg","simple-cryengine":"simple/cryengine.svg","simple-crystal":"simple/crystal.svg","simple-csharp":"simple/csharp.svg","simple-css3":"simple/css3.svg","simple-cssmodules":"simple/cssmodules.svg","simple-csswizardry":"simple/csswizardry.svg","simple-cts":"simple/cts.svg","simple-cucumber":"simple/cucumber.svg","simple-cultura":"simple/cultura.svg","simple-curl":"simple/curl.svg","simple-curseforge":"simple/curseforge.svg","simple-cyberdefenders":"simple/cyberdefenders.svg","simple-cycling74":"simple/cycling74.svg","simple-cypress":"simple/cypress.svg","simple-cytoscapedotjs":"simple/cytoscapedotjs.svg","simple-d":"simple/d.svg","simple-d3dotjs":"simple/d3dotjs.svg","simple-dacia":"simple/dacia.svg","simple-daf":"simple/daf.svg","simple-dailymotion":"simple/dailymotion.svg","simple-daimler":"simple/daimler.svg","simple-daisyui":"simple/daisyui.svg","simple-dapr":"simple/dapr.svg","simple-darkreader":"simple/darkreader.svg","simple-dart":"simple/dart.svg","simple-darty":"simple/darty.svg","simple-daserste":"simple/daserste.svg","simple-dash":"simple/dash.svg","simple-dashlane":"simple/dashlane.svg","simple-dask":"simple/dask.svg","simple-dassaultsystemes":"simple/dassaultsystemes.svg","simple-databricks":"simple/databricks.svg","simple-datacamp":"simple/datacamp.svg","simple-datadog":"simple/datadog.svg","simple-datadotai":"simple/datadotai.svg","simple-datagrip":"simple/datagrip.svg","simple-dataiku":"simple/dataiku.svg","simple-datastax":"simple/datastax.svg","simple-dataverse":"simple/dataverse.svg","simple-datocms":"simple/datocms.svg","simple-datto":"simple/datto.svg","simple-dazn":"simple/dazn.svg","simple-dblp":"simple/dblp.svg","simple-dbt":"simple/dbt.svg","simple-dcentertainment":"simple/dcentertainment.svg","simple-debian":"simple/debian.svg","simple-decapcms":"simple/decapcms.svg","simple-dedge":"simple/dedge.svg","simple-deepin":"simple/deepin.svg","simple-deepnote":"simple/deepnote.svg","simple-deezer":"simple/deezer.svg","simple-delicious":"simple/delicious.svg","simple-deliveroo":"simple/deliveroo.svg","simple-dell":"simple/dell.svg","simple-delonghi":"simple/delonghi.svg","simple-delphi":"simple/delphi.svg","simple-delta":"simple/delta.svg","simple-deno":"simple/deno.svg","simple-denon":"simple/denon.svg","simple-dependabot":"simple/dependabot.svg","simple-dependencycheck":"simple/dependencycheck.svg","simple-derspiegel":"simple/derspiegel.svg","simple-designernews":"simple/designernews.svg","simple-deutschebahn":"simple/deutschebahn.svg","simple-deutschebank":"simple/deutschebank.svg","simple-devdotto":"simple/devdotto.svg","simple-devexpress":"simple/devexpress.svg","simple-deviantart":"simple/deviantart.svg","simple-devpost":"simple/devpost.svg","simple-devrant":"simple/devrant.svg","simple-dgraph":"simple/dgraph.svg","simple-dhl":"simple/dhl.svg","simple-diagramsdotnet":"simple/diagramsdotnet.svg","simple-dialogflow":"simple/dialogflow.svg","simple-diaspora":"simple/diaspora.svg","simple-digg":"simple/digg.svg","simple-digikeyelectronics":"simple/digikeyelectronics.svg","simple-digitalocean":"simple/digitalocean.svg","simple-dior":"simple/dior.svg","simple-directus":"simple/directus.svg","simple-discogs":"simple/discogs.svg","simple-discord":"simple/discord.svg","simple-discourse":"simple/discourse.svg","simple-discover":"simple/discover.svg","simple-disqus":"simple/disqus.svg","simple-disroot":"simple/disroot.svg","simple-distrokid":"simple/distrokid.svg","simple-django":"simple/django.svg","simple-dlib":"simple/dlib.svg","simple-dlna":"simple/dlna.svg","simple-dm":"simple/dm.svg","simple-docker":"simple/docker.svg","simple-docsdotrs":"simple/docsdotrs.svg","simple-docsify":"simple/docsify.svg","simple-docusaurus":"simple/docusaurus.svg","simple-docusign":"simple/docusign.svg","simple-dogecoin":"simple/dogecoin.svg","simple-doi":"simple/doi.svg","simple-dolby":"simple/dolby.svg","simple-doordash":"simple/doordash.svg","simple-dotenv":"simple/dotenv.svg","simple-dotnet":"simple/dotnet.svg","simple-douban":"simple/douban.svg","simple-doubanread":"simple/doubanread.svg","simple-dovecot":"simple/dovecot.svg","simple-dpd":"simple/dpd.svg","simple-dragonframe":"simple/dragonframe.svg","simple-draugiemdotlv":"simple/draugiemdotlv.svg","simple-dribbble":"simple/dribbble.svg","simple-drone":"simple/drone.svg","simple-drooble":"simple/drooble.svg","simple-dropbox":"simple/dropbox.svg","simple-drupal":"simple/drupal.svg","simple-dsautomobiles":"simple/dsautomobiles.svg","simple-dts":"simple/dts.svg","simple-dtube":"simple/dtube.svg","simple-ducati":"simple/ducati.svg","simple-duckdb":"simple/duckdb.svg","simple-duckduckgo":"simple/duckduckgo.svg","simple-dungeonsanddragons":"simple/dungeonsanddragons.svg","simple-dunked":"simple/dunked.svg","simple-duolingo":"simple/duolingo.svg","simple-dvc":"simple/dvc.svg","simple-dwavesystems":"simple/dwavesystems.svg","simple-dwm":"simple/dwm.svg","simple-dynamics365":"simple/dynamics365.svg","simple-dynatrace":"simple/dynatrace.svg","simple-e":"simple/e.svg","simple-e3":"simple/e3.svg","simple-ea":"simple/ea.svg","simple-eagle":"simple/eagle.svg","simple-easyeda":"simple/easyeda.svg","simple-easyjet":"simple/easyjet.svg","simple-ebay":"simple/ebay.svg","simple-ebox":"simple/ebox.svg","simple-eclipseadoptium":"simple/eclipseadoptium.svg","simple-eclipseche":"simple/eclipseche.svg","simple-eclipseide":"simple/eclipseide.svg","simple-eclipsejetty":"simple/eclipsejetty.svg","simple-eclipsemosquitto":"simple/eclipsemosquitto.svg","simple-eclipsevertdotx":"simple/eclipsevertdotx.svg","simple-edeka":"simple/edeka.svg","simple-editorconfig":"simple/editorconfig.svg","simple-edotleclerc":"simple/edotleclerc.svg","simple-edx":"simple/edx.svg","simple-egghead":"simple/egghead.svg","simple-egnyte":"simple/egnyte.svg","simple-eightsleep":"simple/eightsleep.svg","simple-elastic":"simple/elastic.svg","simple-elasticcloud":"simple/elasticcloud.svg","simple-elasticsearch":"simple/elasticsearch.svg","simple-elasticstack":"simple/elasticstack.svg","simple-elavon":"simple/elavon.svg","simple-electron":"simple/electron.svg","simple-electronbuilder":"simple/electronbuilder.svg","simple-electronfiddle":"simple/electronfiddle.svg","simple-element":"simple/element.svg","simple-elementary":"simple/elementary.svg","simple-elementor":"simple/elementor.svg","simple-eleventy":"simple/eleventy.svg","simple-elgato":"simple/elgato.svg","simple-elixir":"simple/elixir.svg","simple-eljueves":"simple/eljueves.svg","simple-ello":"simple/ello.svg","simple-elm":"simple/elm.svg","simple-elsevier":"simple/elsevier.svg","simple-embarcadero":"simple/embarcadero.svg","simple-emberdotjs":"simple/emberdotjs.svg","simple-emby":"simple/emby.svg","simple-emirates":"simple/emirates.svg","simple-emlakjet":"simple/emlakjet.svg","simple-empirekred":"simple/empirekred.svg","simple-engadget":"simple/engadget.svg","simple-enpass":"simple/enpass.svg","simple-enterprisedb":"simple/enterprisedb.svg","simple-envato":"simple/envato.svg","simple-envoyproxy":"simple/envoyproxy.svg","simple-epel":"simple/epel.svg","simple-epicgames":"simple/epicgames.svg","simple-epson":"simple/epson.svg","simple-equinixmetal":"simple/equinixmetal.svg","simple-ericsson":"simple/ericsson.svg","simple-erlang":"simple/erlang.svg","simple-esbuild":"simple/esbuild.svg","simple-esea":"simple/esea.svg","simple-eslgaming":"simple/eslgaming.svg","simple-eslint":"simple/eslint.svg","simple-esphome":"simple/esphome.svg","simple-espressif":"simple/espressif.svg","simple-esri":"simple/esri.svg","simple-etcd":"simple/etcd.svg","simple-ethereum":"simple/ethereum.svg","simple-ethiopianairlines":"simple/ethiopianairlines.svg","simple-etihadairways":"simple/etihadairways.svg","simple-etsy":"simple/etsy.svg","simple-eventbrite":"simple/eventbrite.svg","simple-eventstore":"simple/eventstore.svg","simple-evernote":"simple/evernote.svg","simple-exercism":"simple/exercism.svg","simple-exordo":"simple/exordo.svg","simple-exoscale":"simple/exoscale.svg","simple-expensify":"simple/expensify.svg","simple-expertsexchange":"simple/expertsexchange.svg","simple-expo":"simple/expo.svg","simple-express":"simple/express.svg","simple-expressvpn":"simple/expressvpn.svg","simple-eyeem":"simple/eyeem.svg","simple-f1":"simple/f1.svg","simple-f5":"simple/f5.svg","simple-facebook":"simple/facebook.svg","simple-facebookgaming":"simple/facebookgaming.svg","simple-facebooklive":"simple/facebooklive.svg","simple-faceit":"simple/faceit.svg","simple-facepunch":"simple/facepunch.svg","simple-falco":"simple/falco.svg","simple-falcon":"simple/falcon.svg","simple-fampay":"simple/fampay.svg","simple-fandango":"simple/fandango.svg","simple-fandom":"simple/fandom.svg","simple-fanfou":"simple/fanfou.svg","simple-fantom":"simple/fantom.svg","simple-fareharbor":"simple/fareharbor.svg","simple-farfetch":"simple/farfetch.svg","simple-fastapi":"simple/fastapi.svg","simple-fastify":"simple/fastify.svg","simple-fastlane":"simple/fastlane.svg","simple-fastly":"simple/fastly.svg","simple-fathom":"simple/fathom.svg","simple-fauna":"simple/fauna.svg","simple-favro":"simple/favro.svg","simple-fdroid":"simple/fdroid.svg","simple-feathub":"simple/feathub.svg","simple-fedex":"simple/fedex.svg","simple-fedora":"simple/fedora.svg","simple-feedly":"simple/feedly.svg","simple-ferrari":"simple/ferrari.svg","simple-ferrarinv":"simple/ferrarinv.svg","simple-ferretdb":"simple/ferretdb.svg","simple-ffmpeg":"simple/ffmpeg.svg","simple-fi":"simple/fi.svg","simple-fiat":"simple/fiat.svg","simple-fidoalliance":"simple/fidoalliance.svg","simple-fifa":"simple/fifa.svg","simple-fig":"simple/fig.svg","simple-figma":"simple/figma.svg","simple-figshare":"simple/figshare.svg","simple-fila":"simple/fila.svg","simple-files":"simple/files.svg","simple-filezilla":"simple/filezilla.svg","simple-fing":"simple/fing.svg","simple-firebase":"simple/firebase.svg","simple-firefish":"simple/firefish.svg","simple-fireflyiii":"simple/fireflyiii.svg","simple-firefox":"simple/firefox.svg","simple-firefoxbrowser":"simple/firefoxbrowser.svg","simple-fireship":"simple/fireship.svg","simple-firewalla":"simple/firewalla.svg","simple-first":"simple/first.svg","simple-fitbit":"simple/fitbit.svg","simple-fite":"simple/fite.svg","simple-fivem":"simple/fivem.svg","simple-fiverr":"simple/fiverr.svg","simple-flask":"simple/flask.svg","simple-flat":"simple/flat.svg","simple-flathub":"simple/flathub.svg","simple-flatpak":"simple/flatpak.svg","simple-flattr":"simple/flattr.svg","simple-flickr":"simple/flickr.svg","simple-flightaware":"simple/flightaware.svg","simple-flipboard":"simple/flipboard.svg","simple-flipkart":"simple/flipkart.svg","simple-floatplane":"simple/floatplane.svg","simple-flood":"simple/flood.svg","simple-fluentbit":"simple/fluentbit.svg","simple-fluentd":"simple/fluentd.svg","simple-fluke":"simple/fluke.svg","simple-flutter":"simple/flutter.svg","simple-flux":"simple/flux.svg","simple-fluxus":"simple/fluxus.svg","simple-flyway":"simple/flyway.svg","simple-fmod":"simple/fmod.svg","simple-fnac":"simple/fnac.svg","simple-folium":"simple/folium.svg","simple-fonoma":"simple/fonoma.svg","simple-fontawesome":"simple/fontawesome.svg","simple-fontbase":"simple/fontbase.svg","simple-fontforge":"simple/fontforge.svg","simple-foodpanda":"simple/foodpanda.svg","simple-ford":"simple/ford.svg","simple-forestry":"simple/forestry.svg","simple-forgejo":"simple/forgejo.svg","simple-formstack":"simple/formstack.svg","simple-fortinet":"simple/fortinet.svg","simple-fortran":"simple/fortran.svg","simple-fossa":"simple/fossa.svg","simple-fossilscm":"simple/fossilscm.svg","simple-foursquare":"simple/foursquare.svg","simple-foursquarecityguide":"simple/foursquarecityguide.svg","simple-fox":"simple/fox.svg","simple-foxtel":"simple/foxtel.svg","simple-fozzy":"simple/fozzy.svg","simple-framer":"simple/framer.svg","simple-framework7":"simple/framework7.svg","simple-franprix":"simple/franprix.svg","simple-fraunhofergesellschaft":"simple/fraunhofergesellschaft.svg","simple-freebsd":"simple/freebsd.svg","simple-freecodecamp":"simple/freecodecamp.svg","simple-freedesktopdotorg":"simple/freedesktopdotorg.svg","simple-freelancer":"simple/freelancer.svg","simple-freenas":"simple/freenas.svg","simple-freepik":"simple/freepik.svg","simple-frontendmentor":"simple/frontendmentor.svg","simple-frontify":"simple/frontify.svg","simple-fsecure":"simple/fsecure.svg","simple-fsharp":"simple/fsharp.svg","simple-fugacloud":"simple/fugacloud.svg","simple-fujifilm":"simple/fujifilm.svg","simple-fujitsu":"simple/fujitsu.svg","simple-funimation":"simple/funimation.svg","simple-furaffinity":"simple/furaffinity.svg","simple-furrynetwork":"simple/furrynetwork.svg","simple-futurelearn":"simple/futurelearn.svg","simple-g2":"simple/g2.svg","simple-g2a":"simple/g2a.svg","simple-gameandwatch":"simple/gameandwatch.svg","simple-gamebanana":"simple/gamebanana.svg","simple-gamedeveloper":"simple/gamedeveloper.svg","simple-gamejolt":"simple/gamejolt.svg","simple-gamemaker":"simple/gamemaker.svg","simple-garmin":"simple/garmin.svg","simple-gatling":"simple/gatling.svg","simple-gatsby":"simple/gatsby.svg","simple-gdal":"simple/gdal.svg","simple-geant":"simple/geant.svg","simple-geeksforgeeks":"simple/geeksforgeeks.svg","simple-generalelectric":"simple/generalelectric.svg","simple-generalmotors":"simple/generalmotors.svg","simple-genius":"simple/genius.svg","simple-gentoo":"simple/gentoo.svg","simple-geocaching":"simple/geocaching.svg","simple-gerrit":"simple/gerrit.svg","simple-ghost":"simple/ghost.svg","simple-ghostery":"simple/ghostery.svg","simple-gimp":"simple/gimp.svg","simple-giphy":"simple/giphy.svg","simple-git":"simple/git.svg","simple-gitbook":"simple/gitbook.svg","simple-gitea":"simple/gitea.svg","simple-gitee":"simple/gitee.svg","simple-gitextensions":"simple/gitextensions.svg","simple-github":"simple/github.svg","simple-githubactions":"simple/githubactions.svg","simple-githubpages":"simple/githubpages.svg","simple-githubsponsors":"simple/githubsponsors.svg","simple-gitignoredotio":"simple/gitignoredotio.svg","simple-gitkraken":"simple/gitkraken.svg","simple-gitlab":"simple/gitlab.svg","simple-gitlfs":"simple/gitlfs.svg","simple-gitpod":"simple/gitpod.svg","simple-gitter":"simple/gitter.svg","simple-glassdoor":"simple/glassdoor.svg","simple-glitch":"simple/glitch.svg","simple-globus":"simple/globus.svg","simple-gmail":"simple/gmail.svg","simple-gnome":"simple/gnome.svg","simple-gnometerminal":"simple/gnometerminal.svg","simple-gnu":"simple/gnu.svg","simple-gnubash":"simple/gnubash.svg","simple-gnuemacs":"simple/gnuemacs.svg","simple-gnuicecat":"simple/gnuicecat.svg","simple-gnuprivacyguard":"simple/gnuprivacyguard.svg","simple-gnusocial":"simple/gnusocial.svg","simple-go":"simple/go.svg","simple-gocd":"simple/gocd.svg","simple-godaddy":"simple/godaddy.svg","simple-godotengine":"simple/godotengine.svg","simple-gofundme":"simple/gofundme.svg","simple-gogdotcom":"simple/gogdotcom.svg","simple-goland":"simple/goland.svg","simple-goldenline":"simple/goldenline.svg","simple-goodreads":"simple/goodreads.svg","simple-google":"simple/google.svg","simple-googleadmob":"simple/googleadmob.svg","simple-googleads":"simple/googleads.svg","simple-googleadsense":"simple/googleadsense.svg","simple-googleanalytics":"simple/googleanalytics.svg","simple-googleappsscript":"simple/googleappsscript.svg","simple-googleassistant":"simple/googleassistant.svg","simple-googlebard":"simple/googlebard.svg","simple-googlebigquery":"simple/googlebigquery.svg","simple-googlecalendar":"simple/googlecalendar.svg","simple-googlecardboard":"simple/googlecardboard.svg","simple-googlechat":"simple/googlechat.svg","simple-googlechrome":"simple/googlechrome.svg","simple-googleclassroom":"simple/googleclassroom.svg","simple-googlecloud":"simple/googlecloud.svg","simple-googlecloudcomposer":"simple/googlecloudcomposer.svg","simple-googlecolab":"simple/googlecolab.svg","simple-googlecontaineroptimizedos":"simple/googlecontaineroptimizedos.svg","simple-googledatastudio":"simple/googledatastudio.svg","simple-googledocs":"simple/googledocs.svg","simple-googledomains":"simple/googledomains.svg","simple-googledrive":"simple/googledrive.svg","simple-googleearth":"simple/googleearth.svg","simple-googleearthengine":"simple/googleearthengine.svg","simple-googlefit":"simple/googlefit.svg","simple-googlefonts":"simple/googlefonts.svg","simple-googleforms":"simple/googleforms.svg","simple-googlehangouts":"simple/googlehangouts.svg","simple-googlehome":"simple/googlehome.svg","simple-googlekeep":"simple/googlekeep.svg","simple-googlelens":"simple/googlelens.svg","simple-googlemaps":"simple/googlemaps.svg","simple-googlemarketingplatform":"simple/googlemarketingplatform.svg","simple-googlemeet":"simple/googlemeet.svg","simple-googlemessages":"simple/googlemessages.svg","simple-googlemybusiness":"simple/googlemybusiness.svg","simple-googlenearby":"simple/googlenearby.svg","simple-googlenews":"simple/googlenews.svg","simple-googleoptimize":"simple/googleoptimize.svg","simple-googlepay":"simple/googlepay.svg","simple-googlephotos":"simple/googlephotos.svg","simple-googleplay":"simple/googleplay.svg","simple-googlepodcasts":"simple/googlepodcasts.svg","simple-googlescholar":"simple/googlescholar.svg","simple-googlesearchconsole":"simple/googlesearchconsole.svg","simple-googlesheets":"simple/googlesheets.svg","simple-googleslides":"simple/googleslides.svg","simple-googlestreetview":"simple/googlestreetview.svg","simple-googletagmanager":"simple/googletagmanager.svg","simple-googletranslate":"simple/googletranslate.svg","simple-gotomeeting":"simple/gotomeeting.svg","simple-grab":"simple/grab.svg","simple-gradle":"simple/gradle.svg","simple-gradleplaypublisher":"simple/gradleplaypublisher.svg","simple-grafana":"simple/grafana.svg","simple-grammarly":"simple/grammarly.svg","simple-grandfrais":"simple/grandfrais.svg","simple-graphql":"simple/graphql.svg","simple-grav":"simple/grav.svg","simple-gravatar":"simple/gravatar.svg","simple-graylog":"simple/graylog.svg","simple-greenhouse":"simple/greenhouse.svg","simple-greensock":"simple/greensock.svg","simple-griddotai":"simple/griddotai.svg","simple-gridsome":"simple/gridsome.svg","simple-groupme":"simple/groupme.svg","simple-groupon":"simple/groupon.svg","simple-grubhub":"simple/grubhub.svg","simple-grunt":"simple/grunt.svg","simple-gsk":"simple/gsk.svg","simple-gstreamer":"simple/gstreamer.svg","simple-gtk":"simple/gtk.svg","simple-guangzhoumetro":"simple/guangzhoumetro.svg","simple-guilded":"simple/guilded.svg","simple-gulp":"simple/gulp.svg","simple-gumroad":"simple/gumroad.svg","simple-gumtree":"simple/gumtree.svg","simple-gunicorn":"simple/gunicorn.svg","simple-gurobi":"simple/gurobi.svg","simple-gutenberg":"simple/gutenberg.svg","simple-h3":"simple/h3.svg","simple-habr":"simple/habr.svg","simple-hackaday":"simple/hackaday.svg","simple-hackclub":"simple/hackclub.svg","simple-hackerearth":"simple/hackerearth.svg","simple-hackernoon":"simple/hackernoon.svg","simple-hackerone":"simple/hackerone.svg","simple-hackerrank":"simple/hackerrank.svg","simple-hackster":"simple/hackster.svg","simple-hackthebox":"simple/hackthebox.svg","simple-hal":"simple/hal.svg","simple-handlebarsdotjs":"simple/handlebarsdotjs.svg","simple-handm":"simple/handm.svg","simple-handshake":"simple/handshake.svg","simple-handshake_protocol":"simple/handshake_protocol.svg","simple-happycow":"simple/happycow.svg","simple-harbor":"simple/harbor.svg","simple-harmonyos":"simple/harmonyos.svg","simple-hashicorp":"simple/hashicorp.svg","simple-hashnode":"simple/hashnode.svg","simple-haskell":"simple/haskell.svg","simple-hasura":"simple/hasura.svg","simple-hatenabookmark":"simple/hatenabookmark.svg","simple-haveibeenpwned":"simple/haveibeenpwned.svg","simple-haxe":"simple/haxe.svg","simple-hbo":"simple/hbo.svg","simple-hcl":"simple/hcl.svg","simple-headlessui":"simple/headlessui.svg","simple-headspace":"simple/headspace.svg","simple-hearth":"simple/hearth.svg","simple-hearthisdotat":"simple/hearthisdotat.svg","simple-hedera":"simple/hedera.svg","simple-hellofresh":"simple/hellofresh.svg","simple-hellyhansen":"simple/hellyhansen.svg","simple-helm":"simple/helm.svg","simple-helpdesk":"simple/helpdesk.svg","simple-helpscout":"simple/helpscout.svg","simple-here":"simple/here.svg","simple-heroku":"simple/heroku.svg","simple-hetzner":"simple/hetzner.svg","simple-hexlet":"simple/hexlet.svg","simple-hexo":"simple/hexo.svg","simple-hey":"simple/hey.svg","simple-hibernate":"simple/hibernate.svg","simple-hibob":"simple/hibob.svg","simple-hilton":"simple/hilton.svg","simple-hitachi":"simple/hitachi.svg","simple-hive":"simple/hive.svg","simple-hive_blockchain":"simple/hive_blockchain.svg","simple-homeadvisor":"simple/homeadvisor.svg","simple-homeassistant":"simple/homeassistant.svg","simple-homeassistantcommunitystore":"simple/homeassistantcommunitystore.svg","simple-homebrew":"simple/homebrew.svg","simple-homebridge":"simple/homebridge.svg","simple-homify":"simple/homify.svg","simple-honda":"simple/honda.svg","simple-honey":"simple/honey.svg","simple-honor":"simple/honor.svg","simple-hootsuite":"simple/hootsuite.svg","simple-hoppscotch":"simple/hoppscotch.svg","simple-hotelsdotcom":"simple/hotelsdotcom.svg","simple-hotjar":"simple/hotjar.svg","simple-hotwire":"simple/hotwire.svg","simple-houdini":"simple/houdini.svg","simple-houzz":"simple/houzz.svg","simple-hp":"simple/hp.svg","simple-hsbc":"simple/hsbc.svg","simple-html5":"simple/html5.svg","simple-htmlacademy":"simple/htmlacademy.svg","simple-htop":"simple/htop.svg","simple-httpie":"simple/httpie.svg","simple-huawei":"simple/huawei.svg","simple-hubspot":"simple/hubspot.svg","simple-hugo":"simple/hugo.svg","simple-hulu":"simple/hulu.svg","simple-humblebundle":"simple/humblebundle.svg","simple-hungryjacks":"simple/hungryjacks.svg","simple-hurriyetemlak":"simple/hurriyetemlak.svg","simple-husqvarna":"simple/husqvarna.svg","simple-hyper":"simple/hyper.svg","simple-hyperledger":"simple/hyperledger.svg","simple-hypothesis":"simple/hypothesis.svg","simple-hyundai":"simple/hyundai.svg","simple-i18next":"simple/i18next.svg","simple-i3":"simple/i3.svg","simple-iata":"simple/iata.svg","simple-ibeacon":"simple/ibeacon.svg","simple-ibm":"simple/ibm.svg","simple-ibmcloud":"simple/ibmcloud.svg","simple-ibmwatson":"simple/ibmwatson.svg","simple-iced":"simple/iced.svg","simple-iceland":"simple/iceland.svg","simple-icinga":"simple/icinga.svg","simple-icloud":"simple/icloud.svg","simple-icomoon":"simple/icomoon.svg","simple-icon":"simple/icon.svg","simple-iconfinder":"simple/iconfinder.svg","simple-iconify":"simple/iconify.svg","simple-iconjar":"simple/iconjar.svg","simple-icons8":"simple/icons8.svg","simple-icq":"simple/icq.svg","simple-ieee":"simple/ieee.svg","simple-ifixit":"simple/ifixit.svg","simple-ifood":"simple/ifood.svg","simple-ifttt":"simple/ifttt.svg","simple-igdb":"simple/igdb.svg","simple-iheartradio":"simple/iheartradio.svg","simple-ikea":"simple/ikea.svg","simple-iledefrancemobilites":"simple/iledefrancemobilites.svg","simple-imagej":"simple/imagej.svg","simple-imdb":"simple/imdb.svg","simple-imgur":"simple/imgur.svg","simple-immer":"simple/immer.svg","simple-immich":"simple/immich.svg","simple-imou":"simple/imou.svg","simple-improvmx":"simple/improvmx.svg","simple-indeed":"simple/indeed.svg","simple-indigo":"simple/indigo.svg","simple-inertia":"simple/inertia.svg","simple-infiniti":"simple/infiniti.svg","simple-influxdb":"simple/influxdb.svg","simple-infoq":"simple/infoq.svg","simple-informatica":"simple/informatica.svg","simple-infosys":"simple/infosys.svg","simple-infracost":"simple/infracost.svg","simple-ingress":"simple/ingress.svg","simple-inkdrop":"simple/inkdrop.svg","simple-inkscape":"simple/inkscape.svg","simple-insomnia":"simple/insomnia.svg","simple-instacart":"simple/instacart.svg","simple-instagram":"simple/instagram.svg","simple-instapaper":"simple/instapaper.svg","simple-instatus":"simple/instatus.svg","simple-instructables":"simple/instructables.svg","simple-instructure":"simple/instructure.svg","simple-integromat":"simple/integromat.svg","simple-intel":"simple/intel.svg","simple-intellijidea":"simple/intellijidea.svg","simple-interactiondesignfoundation":"simple/interactiondesignfoundation.svg","simple-interactjs":"simple/interactjs.svg","simple-interbase":"simple/interbase.svg","simple-intercom":"simple/intercom.svg","simple-intermarche":"simple/intermarche.svg","simple-internetarchive":"simple/internetarchive.svg","simple-internetcomputer":"simple/internetcomputer.svg","simple-internetexplorer":"simple/internetexplorer.svg","simple-intigriti":"simple/intigriti.svg","simple-intuit":"simple/intuit.svg","simple-invision":"simple/invision.svg","simple-invoiceninja":"simple/invoiceninja.svg","simple-iobroker":"simple/iobroker.svg","simple-ionic":"simple/ionic.svg","simple-ionos":"simple/ionos.svg","simple-ios":"simple/ios.svg","simple-iota":"simple/iota.svg","simple-ipfs":"simple/ipfs.svg","simple-iris":"simple/iris.svg","simple-isc2":"simple/isc2.svg","simple-iscsquared":"simple/iscsquared.svg","simple-issuu":"simple/issuu.svg","simple-istio":"simple/istio.svg","simple-itchdotio":"simple/itchdotio.svg","simple-iterm2":"simple/iterm2.svg","simple-itunes":"simple/itunes.svg","simple-itvx":"simple/itvx.svg","simple-iveco":"simple/iveco.svg","simple-jabber":"simple/jabber.svg","simple-jaguar":"simple/jaguar.svg","simple-jamboard":"simple/jamboard.svg","simple-jameson":"simple/jameson.svg","simple-jamstack":"simple/jamstack.svg","simple-jasmine":"simple/jasmine.svg","simple-javascript":"simple/javascript.svg","simple-jbl":"simple/jbl.svg","simple-jcb":"simple/jcb.svg","simple-jeep":"simple/jeep.svg","simple-jekyll":"simple/jekyll.svg","simple-jellyfin":"simple/jellyfin.svg","simple-jenkins":"simple/jenkins.svg","simple-jenkinsx":"simple/jenkinsx.svg","simple-jest":"simple/jest.svg","simple-jet":"simple/jet.svg","simple-jetblue":"simple/jetblue.svg","simple-jetbrains":"simple/jetbrains.svg","simple-jetpackcompose":"simple/jetpackcompose.svg","simple-jfrog":"simple/jfrog.svg","simple-jfrogbintray":"simple/jfrogbintray.svg","simple-jfrogpipelines":"simple/jfrogpipelines.svg","simple-jinja":"simple/jinja.svg","simple-jira":"simple/jira.svg","simple-jirasoftware":"simple/jirasoftware.svg","simple-jitsi":"simple/jitsi.svg","simple-johndeere":"simple/johndeere.svg","simple-joomla":"simple/joomla.svg","simple-joplin":"simple/joplin.svg","simple-jordan":"simple/jordan.svg","simple-jovian":"simple/jovian.svg","simple-jpeg":"simple/jpeg.svg","simple-jquery":"simple/jquery.svg","simple-jrgroup":"simple/jrgroup.svg","simple-jsdelivr":"simple/jsdelivr.svg","simple-jsfiddle":"simple/jsfiddle.svg","simple-json":"simple/json.svg","simple-jsonwebtokens":"simple/jsonwebtokens.svg","simple-jss":"simple/jss.svg","simple-juce":"simple/juce.svg","simple-juejin":"simple/juejin.svg","simple-juke":"simple/juke.svg","simple-julia":"simple/julia.svg","simple-junipernetworks":"simple/junipernetworks.svg","simple-junit5":"simple/junit5.svg","simple-jupyter":"simple/jupyter.svg","simple-justeat":"simple/justeat.svg","simple-justgiving":"simple/justgiving.svg","simple-k3s":"simple/k3s.svg","simple-k6":"simple/k6.svg","simple-kaggle":"simple/kaggle.svg","simple-kahoot":"simple/kahoot.svg","simple-kaios":"simple/kaios.svg","simple-kakao":"simple/kakao.svg","simple-kakaotalk":"simple/kakaotalk.svg","simple-kalilinux":"simple/kalilinux.svg","simple-kamailio":"simple/kamailio.svg","simple-kaniko":"simple/kaniko.svg","simple-karlsruherverkehrsverbund":"simple/karlsruherverkehrsverbund.svg","simple-kasasmart":"simple/kasasmart.svg","simple-kashflow":"simple/kashflow.svg","simple-kaspersky":"simple/kaspersky.svg","simple-katacoda":"simple/katacoda.svg","simple-katana":"simple/katana.svg","simple-kaufland":"simple/kaufland.svg","simple-kde":"simple/kde.svg","simple-kdenlive":"simple/kdenlive.svg","simple-kedro":"simple/kedro.svg","simple-keepachangelog":"simple/keepachangelog.svg","simple-keepassxc":"simple/keepassxc.svg","simple-kentico":"simple/kentico.svg","simple-keras":"simple/keras.svg","simple-keybase":"simple/keybase.svg","simple-keycdn":"simple/keycdn.svg","simple-keystone":"simple/keystone.svg","simple-kfc":"simple/kfc.svg","simple-khanacademy":"simple/khanacademy.svg","simple-khronosgroup":"simple/khronosgroup.svg","simple-kia":"simple/kia.svg","simple-kibana":"simple/kibana.svg","simple-kicad":"simple/kicad.svg","simple-kickstarter":"simple/kickstarter.svg","simple-kik":"simple/kik.svg","simple-kingstontechnology":"simple/kingstontechnology.svg","simple-kinopoisk":"simple/kinopoisk.svg","simple-kinsta":"simple/kinsta.svg","simple-kirby":"simple/kirby.svg","simple-kit":"simple/kit.svg","simple-kitsu":"simple/kitsu.svg","simple-klarna":"simple/klarna.svg","simple-klm":"simple/klm.svg","simple-klook":"simple/klook.svg","simple-knative":"simple/knative.svg","simple-knowledgebase":"simple/knowledgebase.svg","simple-known":"simple/known.svg","simple-koa":"simple/koa.svg","simple-koc":"simple/koc.svg","simple-kodak":"simple/kodak.svg","simple-kodi":"simple/kodi.svg","simple-kofax":"simple/kofax.svg","simple-kofi":"simple/kofi.svg","simple-komoot":"simple/komoot.svg","simple-konami":"simple/konami.svg","simple-kong":"simple/kong.svg","simple-kongregate":"simple/kongregate.svg","simple-konva":"simple/konva.svg","simple-kotlin":"simple/kotlin.svg","simple-koyeb":"simple/koyeb.svg","simple-krita":"simple/krita.svg","simple-ktm":"simple/ktm.svg","simple-kuaishou":"simple/kuaishou.svg","simple-kubernetes":"simple/kubernetes.svg","simple-kubuntu":"simple/kubuntu.svg","simple-kuma":"simple/kuma.svg","simple-kuula":"simple/kuula.svg","simple-kyocera":"simple/kyocera.svg","simple-labview":"simple/labview.svg","simple-lada":"simple/lada.svg","simple-lamborghini":"simple/lamborghini.svg","simple-landrover":"simple/landrover.svg","simple-lapce":"simple/lapce.svg","simple-laragon":"simple/laragon.svg","simple-laravel":"simple/laravel.svg","simple-laravelhorizon":"simple/laravelhorizon.svg","simple-laravelnova":"simple/laravelnova.svg","simple-lastdotfm":"simple/lastdotfm.svg","simple-lastpass":"simple/lastpass.svg","simple-latex":"simple/latex.svg","simple-launchpad":"simple/launchpad.svg","simple-lazarus":"simple/lazarus.svg","simple-lbry":"simple/lbry.svg","simple-leaderprice":"simple/leaderprice.svg","simple-leaflet":"simple/leaflet.svg","simple-leagueoflegends":"simple/leagueoflegends.svg","simple-leanpub":"simple/leanpub.svg","simple-leetcode":"simple/leetcode.svg","simple-legacygames":"simple/legacygames.svg","simple-leica":"simple/leica.svg","simple-lemmy":"simple/lemmy.svg","simple-lenovo":"simple/lenovo.svg","simple-lens":"simple/lens.svg","simple-leptos":"simple/leptos.svg","simple-lerna":"simple/lerna.svg","simple-leroymerlin":"simple/leroymerlin.svg","simple-less":"simple/less.svg","simple-letsencrypt":"simple/letsencrypt.svg","simple-letterboxd":"simple/letterboxd.svg","simple-levelsdotfyi":"simple/levelsdotfyi.svg","simple-lg":"simple/lg.svg","simple-lgtm":"simple/lgtm.svg","simple-liberadotchat":"simple/liberadotchat.svg","simple-liberapay":"simple/liberapay.svg","simple-librariesdotio":"simple/librariesdotio.svg","simple-librarything":"simple/librarything.svg","simple-libreoffice":"simple/libreoffice.svg","simple-libuv":"simple/libuv.svg","simple-lichess":"simple/lichess.svg","simple-lidl":"simple/lidl.svg","simple-lifx":"simple/lifx.svg","simple-lightburn":"simple/lightburn.svg","simple-lighthouse":"simple/lighthouse.svg","simple-lightning":"simple/lightning.svg","simple-line":"simple/line.svg","simple-lineageos":"simple/lineageos.svg","simple-linear":"simple/linear.svg","simple-linkedin":"simple/linkedin.svg","simple-linkerd":"simple/linkerd.svg","simple-linkfire":"simple/linkfire.svg","simple-linktree":"simple/linktree.svg","simple-linux":"simple/linux.svg","simple-linuxcontainers":"simple/linuxcontainers.svg","simple-linuxfoundation":"simple/linuxfoundation.svg","simple-linuxmint":"simple/linuxmint.svg","simple-lionair":"simple/lionair.svg","simple-liquibase":"simple/liquibase.svg","simple-lit":"simple/lit.svg","simple-litecoin":"simple/litecoin.svg","simple-litiengine":"simple/litiengine.svg","simple-livechat":"simple/livechat.svg","simple-livejournal":"simple/livejournal.svg","simple-livewire":"simple/livewire.svg","simple-llvm":"simple/llvm.svg","simple-lmms":"simple/lmms.svg","simple-local":"simple/local.svg","simple-lodash":"simple/lodash.svg","simple-logitech":"simple/logitech.svg","simple-logmein":"simple/logmein.svg","simple-logseq":"simple/logseq.svg","simple-logstash":"simple/logstash.svg","simple-looker":"simple/looker.svg","simple-loom":"simple/loom.svg","simple-loop":"simple/loop.svg","simple-loopback":"simple/loopback.svg","simple-lospec":"simple/lospec.svg","simple-lotpolishairlines":"simple/lotpolishairlines.svg","simple-ltspice":"simple/ltspice.svg","simple-lua":"simple/lua.svg","simple-lubuntu":"simple/lubuntu.svg","simple-ludwig":"simple/ludwig.svg","simple-lufthansa":"simple/lufthansa.svg","simple-lumen":"simple/lumen.svg","simple-lunacy":"simple/lunacy.svg","simple-lutris":"simple/lutris.svg","simple-lydia":"simple/lydia.svg","simple-lyft":"simple/lyft.svg","simple-maas":"simple/maas.svg","simple-macos":"simple/macos.svg","simple-macpaw":"simple/macpaw.svg","simple-macys":"simple/macys.svg","simple-magasinsu":"simple/magasinsu.svg","simple-magento":"simple/magento.svg","simple-magisk":"simple/magisk.svg","simple-mailchimp":"simple/mailchimp.svg","simple-maildotcom":"simple/maildotcom.svg","simple-maildotru":"simple/maildotru.svg","simple-mailgun":"simple/mailgun.svg","simple-majorleaguehacking":"simple/majorleaguehacking.svg","simple-makerbot":"simple/makerbot.svg","simple-mambaui":"simple/mambaui.svg","simple-mamp":"simple/mamp.svg","simple-man":"simple/man.svg","simple-manageiq":"simple/manageiq.svg","simple-manjaro":"simple/manjaro.svg","simple-mantine":"simple/mantine.svg","simple-mapbox":"simple/mapbox.svg","simple-maplibre":"simple/maplibre.svg","simple-mariadb":"simple/mariadb.svg","simple-mariadbfoundation":"simple/mariadbfoundation.svg","simple-markdown":"simple/markdown.svg","simple-marketo":"simple/marketo.svg","simple-marko":"simple/marko.svg","simple-marriott":"simple/marriott.svg","simple-marvelapp":"simple/marvelapp.svg","simple-maserati":"simple/maserati.svg","simple-mastercard":"simple/mastercard.svg","simple-mastercomfig":"simple/mastercomfig.svg","simple-mastodon":"simple/mastodon.svg","simple-materialdesign":"simple/materialdesign.svg","simple-materialdesignicons":"simple/materialdesignicons.svg","simple-matillion":"simple/matillion.svg","simple-matomo":"simple/matomo.svg","simple-matrix":"simple/matrix.svg","simple-matterdotjs":"simple/matterdotjs.svg","simple-mattermost":"simple/mattermost.svg","simple-matternet":"simple/matternet.svg","simple-mautic":"simple/mautic.svg","simple-max":"simple/max.svg","simple-maxplanckgesellschaft":"simple/maxplanckgesellschaft.svg","simple-maytag":"simple/maytag.svg","simple-mazda":"simple/mazda.svg","simple-mcafee":"simple/mcafee.svg","simple-mcdonalds":"simple/mcdonalds.svg","simple-mclaren":"simple/mclaren.svg","simple-mdbook":"simple/mdbook.svg","simple-mdnwebdocs":"simple/mdnwebdocs.svg","simple-mdx":"simple/mdx.svg","simple-mediafire":"simple/mediafire.svg","simple-mediamarkt":"simple/mediamarkt.svg","simple-mediatek":"simple/mediatek.svg","simple-mediatemple":"simple/mediatemple.svg","simple-medibangpaint":"simple/medibangpaint.svg","simple-medium":"simple/medium.svg","simple-meetup":"simple/meetup.svg","simple-mega":"simple/mega.svg","simple-meilisearch":"simple/meilisearch.svg","simple-mendeley":"simple/mendeley.svg","simple-mercadopago":"simple/mercadopago.svg","simple-mercedes":"simple/mercedes.svg","simple-merck":"simple/merck.svg","simple-mercurial":"simple/mercurial.svg","simple-messenger":"simple/messenger.svg","simple-meta":"simple/meta.svg","simple-metabase":"simple/metabase.svg","simple-metafilter":"simple/metafilter.svg","simple-meteor":"simple/meteor.svg","simple-metro":"simple/metro.svg","simple-metrodelaciudaddemexico":"simple/metrodelaciudaddemexico.svg","simple-metrodemadrid":"simple/metrodemadrid.svg","simple-metrodeparis":"simple/metrodeparis.svg","simple-mewe":"simple/mewe.svg","simple-mg":"simple/mg.svg","simple-microbit":"simple/microbit.svg","simple-microdotblog":"simple/microdotblog.svg","simple-microeditor":"simple/microeditor.svg","simple-microgenetics":"simple/microgenetics.svg","simple-micropython":"simple/micropython.svg","simple-microsoft":"simple/microsoft.svg","simple-microsoftacademic":"simple/microsoftacademic.svg","simple-microsoftaccess":"simple/microsoftaccess.svg","simple-microsoftazure":"simple/microsoftazure.svg","simple-microsoftbing":"simple/microsoftbing.svg","simple-microsoftedge":"simple/microsoftedge.svg","simple-microsoftexcel":"simple/microsoftexcel.svg","simple-microsoftexchange":"simple/microsoftexchange.svg","simple-microsoftoffice":"simple/microsoftoffice.svg","simple-microsoftonedrive":"simple/microsoftonedrive.svg","simple-microsoftonenote":"simple/microsoftonenote.svg","simple-microsoftoutlook":"simple/microsoftoutlook.svg","simple-microsoftpowerpoint":"simple/microsoftpowerpoint.svg","simple-microsoftsharepoint":"simple/microsoftsharepoint.svg","simple-microsoftsqlserver":"simple/microsoftsqlserver.svg","simple-microsoftteams":"simple/microsoftteams.svg","simple-microsofttranslator":"simple/microsofttranslator.svg","simple-microsoftvisio":"simple/microsoftvisio.svg","simple-microsoftword":"simple/microsoftword.svg","simple-microstation":"simple/microstation.svg","simple-microstrategy":"simple/microstrategy.svg","simple-midi":"simple/midi.svg","simple-mikrotik":"simple/mikrotik.svg","simple-milvus":"simple/milvus.svg","simple-minds":"simple/minds.svg","simple-minecraft":"simple/minecraft.svg","simple-minetest":"simple/minetest.svg","simple-mini":"simple/mini.svg","simple-minio":"simple/minio.svg","simple-minutemailer":"simple/minutemailer.svg","simple-miraheze":"simple/miraheze.svg","simple-miro":"simple/miro.svg","simple-misskey":"simple/misskey.svg","simple-mitsubishi":"simple/mitsubishi.svg","simple-mix":"simple/mix.svg","simple-mixcloud":"simple/mixcloud.svg","simple-mixpanel":"simple/mixpanel.svg","simple-mlb":"simple/mlb.svg","simple-mlflow":"simple/mlflow.svg","simple-mobx":"simple/mobx.svg","simple-mobxstatetree":"simple/mobxstatetree.svg","simple-mocha":"simple/mocha.svg","simple-mockserviceworker":"simple/mockserviceworker.svg","simple-modin":"simple/modin.svg","simple-modrinth":"simple/modrinth.svg","simple-modx":"simple/modx.svg","simple-mojangstudios":"simple/mojangstudios.svg","simple-moleculer":"simple/moleculer.svg","simple-momenteo":"simple/momenteo.svg","simple-monero":"simple/monero.svg","simple-moneygram":"simple/moneygram.svg","simple-mongodb":"simple/mongodb.svg","simple-mongoose":"simple/mongoose.svg","simple-mongoosedotws":"simple/mongoosedotws.svg","simple-monica":"simple/monica.svg","simple-monkeytie":"simple/monkeytie.svg","simple-monkeytype":"simple/monkeytype.svg","simple-monogame":"simple/monogame.svg","simple-monoprix":"simple/monoprix.svg","simple-monster":"simple/monster.svg","simple-monzo":"simple/monzo.svg","simple-moo":"simple/moo.svg","simple-moonrepo":"simple/moonrepo.svg","simple-morrisons":"simple/morrisons.svg","simple-moscowmetro":"simple/moscowmetro.svg","simple-motorola":"simple/motorola.svg","simple-mozilla":"simple/mozilla.svg","simple-mqtt":"simple/mqtt.svg","simple-msi":"simple/msi.svg","simple-msibusiness":"simple/msibusiness.svg","simple-mta":"simple/mta.svg","simple-mtr":"simple/mtr.svg","simple-mubi":"simple/mubi.svg","simple-mui":"simple/mui.svg","simple-mulesoft":"simple/mulesoft.svg","simple-muller":"simple/muller.svg","simple-multisim":"simple/multisim.svg","simple-mumble":"simple/mumble.svg","simple-musescore":"simple/musescore.svg","simple-musicbrainz":"simple/musicbrainz.svg","simple-mxlinux":"simple/mxlinux.svg","simple-myanimelist":"simple/myanimelist.svg","simple-myob":"simple/myob.svg","simple-myspace":"simple/myspace.svg","simple-mysql":"simple/mysql.svg","simple-n26":"simple/n26.svg","simple-namebase":"simple/namebase.svg","simple-namecheap":"simple/namecheap.svg","simple-nano":"simple/nano.svg","simple-nasa":"simple/nasa.svg","simple-nationalgrid":"simple/nationalgrid.svg","simple-nativescript":"simple/nativescript.svg","simple-natsdotio":"simple/natsdotio.svg","simple-naver":"simple/naver.svg","simple-nba":"simple/nba.svg","simple-nbb":"simple/nbb.svg","simple-nbc":"simple/nbc.svg","simple-ndr":"simple/ndr.svg","simple-near":"simple/near.svg","simple-nec":"simple/nec.svg","simple-neo4j":"simple/neo4j.svg","simple-neovim":"simple/neovim.svg","simple-nestjs":"simple/nestjs.svg","simple-netapp":"simple/netapp.svg","simple-netbsd":"simple/netbsd.svg","simple-netflix":"simple/netflix.svg","simple-netlify":"simple/netlify.svg","simple-nette":"simple/nette.svg","simple-netto":"simple/netto.svg","simple-neutralinojs":"simple/neutralinojs.svg","simple-newbalance":"simple/newbalance.svg","simple-newegg":"simple/newegg.svg","simple-newjapanprowrestling":"simple/newjapanprowrestling.svg","simple-newrelic":"simple/newrelic.svg","simple-newyorktimes":"simple/newyorktimes.svg","simple-nextbilliondotai":"simple/nextbilliondotai.svg","simple-nextcloud":"simple/nextcloud.svg","simple-nextdoor":"simple/nextdoor.svg","simple-nextdotjs":"simple/nextdotjs.svg","simple-nextra":"simple/nextra.svg","simple-nfc":"simple/nfc.svg","simple-nginx":"simple/nginx.svg","simple-nginxproxymanager":"simple/nginxproxymanager.svg","simple-ngrok":"simple/ngrok.svg","simple-ngrx":"simple/ngrx.svg","simple-niconico":"simple/niconico.svg","simple-nike":"simple/nike.svg","simple-nikon":"simple/nikon.svg","simple-nim":"simple/nim.svg","simple-nintendo":"simple/nintendo.svg","simple-nintendo3ds":"simple/nintendo3ds.svg","simple-nintendogamecube":"simple/nintendogamecube.svg","simple-nintendonetwork":"simple/nintendonetwork.svg","simple-nintendoswitch":"simple/nintendoswitch.svg","simple-nissan":"simple/nissan.svg","simple-nixos":"simple/nixos.svg","simple-nodedotjs":"simple/nodedotjs.svg","simple-nodemon":"simple/nodemon.svg","simple-nodered":"simple/nodered.svg","simple-nokia":"simple/nokia.svg","simple-norco":"simple/norco.svg","simple-nordvpn":"simple/nordvpn.svg","simple-normalizedotcss":"simple/normalizedotcss.svg","simple-norwegian":"simple/norwegian.svg","simple-notepadplusplus":"simple/notepadplusplus.svg","simple-notion":"simple/notion.svg","simple-notist":"simple/notist.svg","simple-nounproject":"simple/nounproject.svg","simple-novu":"simple/novu.svg","simple-now":"simple/now.svg","simple-npm":"simple/npm.svg","simple-nrwl":"simple/nrwl.svg","simple-nubank":"simple/nubank.svg","simple-nucleo":"simple/nucleo.svg","simple-nuget":"simple/nuget.svg","simple-nuke":"simple/nuke.svg","simple-numba":"simple/numba.svg","simple-numpy":"simple/numpy.svg","simple-nunjucks":"simple/nunjucks.svg","simple-nutanix":"simple/nutanix.svg","simple-nuxtdotjs":"simple/nuxtdotjs.svg","simple-nvidia":"simple/nvidia.svg","simple-nx":"simple/nx.svg","simple-nxp":"simple/nxp.svg","simple-nzxt":"simple/nzxt.svg","simple-observable":"simple/observable.svg","simple-obsidian":"simple/obsidian.svg","simple-obsstudio":"simple/obsstudio.svg","simple-ocaml":"simple/ocaml.svg","simple-octanerender":"simple/octanerender.svg","simple-octave":"simple/octave.svg","simple-octobercms":"simple/octobercms.svg","simple-octoprint":"simple/octoprint.svg","simple-octopusdeploy":"simple/octopusdeploy.svg","simple-oculus":"simple/oculus.svg","simple-odnoklassniki":"simple/odnoklassniki.svg","simple-odysee":"simple/odysee.svg","simple-ohdear":"simple/ohdear.svg","simple-okcupid":"simple/okcupid.svg","simple-okta":"simple/okta.svg","simple-oneplus":"simple/oneplus.svg","simple-onlyfans":"simple/onlyfans.svg","simple-onlyoffice":"simple/onlyoffice.svg","simple-onnx":"simple/onnx.svg","simple-onstar":"simple/onstar.svg","simple-opel":"simple/opel.svg","simple-openaccess":"simple/openaccess.svg","simple-openai":"simple/openai.svg","simple-openaigym":"simple/openaigym.svg","simple-openapiinitiative":"simple/openapiinitiative.svg","simple-openbadges":"simple/openbadges.svg","simple-openbsd":"simple/openbsd.svg","simple-openbugbounty":"simple/openbugbounty.svg","simple-opencollective":"simple/opencollective.svg","simple-opencontainersinitiative":"simple/opencontainersinitiative.svg","simple-opencv":"simple/opencv.svg","simple-openfaas":"simple/openfaas.svg","simple-opengl":"simple/opengl.svg","simple-openid":"simple/openid.svg","simple-openjdk":"simple/openjdk.svg","simple-openlayers":"simple/openlayers.svg","simple-openmined":"simple/openmined.svg","simple-opennebula":"simple/opennebula.svg","simple-openproject":"simple/openproject.svg","simple-openscad":"simple/openscad.svg","simple-opensea":"simple/opensea.svg","simple-opensearch":"simple/opensearch.svg","simple-opensourcehardware":"simple/opensourcehardware.svg","simple-opensourceinitiative":"simple/opensourceinitiative.svg","simple-openssl":"simple/openssl.svg","simple-openstack":"simple/openstack.svg","simple-openstreetmap":"simple/openstreetmap.svg","simple-opensuse":"simple/opensuse.svg","simple-opentelemetry":"simple/opentelemetry.svg","simple-opentf":"simple/opentf.svg","simple-openverse":"simple/openverse.svg","simple-openvpn":"simple/openvpn.svg","simple-openwrt":"simple/openwrt.svg","simple-openzeppelin":"simple/openzeppelin.svg","simple-openzfs":"simple/openzfs.svg","simple-opera":"simple/opera.svg","simple-operagx":"simple/operagx.svg","simple-opnsense":"simple/opnsense.svg","simple-opsgenie":"simple/opsgenie.svg","simple-opslevel":"simple/opslevel.svg","simple-oracle":"simple/oracle.svg","simple-orcid":"simple/orcid.svg","simple-oreilly":"simple/oreilly.svg","simple-org":"simple/org.svg","simple-origin":"simple/origin.svg","simple-osano":"simple/osano.svg","simple-osgeo":"simple/osgeo.svg","simple-oshkosh":"simple/oshkosh.svg","simple-osmc":"simple/osmc.svg","simple-osu":"simple/osu.svg","simple-otto":"simple/otto.svg","simple-overcast":"simple/overcast.svg","simple-overleaf":"simple/overleaf.svg","simple-ovh":"simple/ovh.svg","simple-owasp":"simple/owasp.svg","simple-owncloud":"simple/owncloud.svg","simple-oxygen":"simple/oxygen.svg","simple-oyo":"simple/oyo.svg","simple-p5dotjs":"simple/p5dotjs.svg","simple-packagist":"simple/packagist.svg","simple-packer":"simple/packer.svg","simple-paddlepaddle":"simple/paddlepaddle.svg","simple-paddypower":"simple/paddypower.svg","simple-pagekit":"simple/pagekit.svg","simple-pagerduty":"simple/pagerduty.svg","simple-pagespeedinsights":"simple/pagespeedinsights.svg","simple-pagseguro":"simple/pagseguro.svg","simple-palantir":"simple/palantir.svg","simple-paloaltonetworks":"simple/paloaltonetworks.svg","simple-paloaltosoftware":"simple/paloaltosoftware.svg","simple-panasonic":"simple/panasonic.svg","simple-pandas":"simple/pandas.svg","simple-pandora":"simple/pandora.svg","simple-pantheon":"simple/pantheon.svg","simple-paperspace":"simple/paperspace.svg","simple-paritysubstrate":"simple/paritysubstrate.svg","simple-parsedotly":"simple/parsedotly.svg","simple-passport":"simple/passport.svg","simple-pastebin":"simple/pastebin.svg","simple-patreon":"simple/patreon.svg","simple-paychex":"simple/paychex.svg","simple-payloadcms":"simple/payloadcms.svg","simple-payoneer":"simple/payoneer.svg","simple-paypal":"simple/paypal.svg","simple-paytm":"simple/paytm.svg","simple-pcgamingwiki":"simple/pcgamingwiki.svg","simple-peakdesign":"simple/peakdesign.svg","simple-pearson":"simple/pearson.svg","simple-peerlist":"simple/peerlist.svg","simple-peertube":"simple/peertube.svg","simple-pegasusairlines":"simple/pegasusairlines.svg","simple-pelican":"simple/pelican.svg","simple-peloton":"simple/peloton.svg","simple-penny":"simple/penny.svg","simple-penpot":"simple/penpot.svg","simple-pepsi":"simple/pepsi.svg","simple-percy":"simple/percy.svg","simple-perforce":"simple/perforce.svg","simple-perl":"simple/perl.svg","simple-persistent":"simple/persistent.svg","simple-personio":"simple/personio.svg","simple-petsathome":"simple/petsathome.svg","simple-peugeot":"simple/peugeot.svg","simple-pexels":"simple/pexels.svg","simple-pfsense":"simple/pfsense.svg","simple-phabricator":"simple/phabricator.svg","simple-philipshue":"simple/philipshue.svg","simple-phoenixframework":"simple/phoenixframework.svg","simple-phonepe":"simple/phonepe.svg","simple-photobucket":"simple/photobucket.svg","simple-photocrowd":"simple/photocrowd.svg","simple-photopea":"simple/photopea.svg","simple-php":"simple/php.svg","simple-phpmyadmin":"simple/phpmyadmin.svg","simple-phpstorm":"simple/phpstorm.svg","simple-piaggiogroup":"simple/piaggiogroup.svg","simple-picardsurgeles":"simple/picardsurgeles.svg","simple-picartodottv":"simple/picartodottv.svg","simple-picnic":"simple/picnic.svg","simple-picpay":"simple/picpay.svg","simple-pihole":"simple/pihole.svg","simple-pimcore":"simple/pimcore.svg","simple-pinboard":"simple/pinboard.svg","simple-pingdom":"simple/pingdom.svg","simple-pinterest":"simple/pinterest.svg","simple-pioneerdj":"simple/pioneerdj.svg","simple-pivotaltracker":"simple/pivotaltracker.svg","simple-piwigo":"simple/piwigo.svg","simple-pix":"simple/pix.svg","simple-pixabay":"simple/pixabay.svg","simple-pixiv":"simple/pixiv.svg","simple-pkgsrc":"simple/pkgsrc.svg","simple-planet":"simple/planet.svg","simple-planetscale":"simple/planetscale.svg","simple-plangrid":"simple/plangrid.svg","simple-platformdotsh":"simple/platformdotsh.svg","simple-platzi":"simple/platzi.svg","simple-plausibleanalytics":"simple/plausibleanalytics.svg","simple-playcanvas":"simple/playcanvas.svg","simple-playerdotme":"simple/playerdotme.svg","simple-playerfm":"simple/playerfm.svg","simple-playstation":"simple/playstation.svg","simple-playstation2":"simple/playstation2.svg","simple-playstation3":"simple/playstation3.svg","simple-playstation4":"simple/playstation4.svg","simple-playstation5":"simple/playstation5.svg","simple-playstationvita":"simple/playstationvita.svg","simple-playwright":"simple/playwright.svg","simple-pleroma":"simple/pleroma.svg","simple-plesk":"simple/plesk.svg","simple-plex":"simple/plex.svg","simple-plotly":"simple/plotly.svg","simple-pluralsight":"simple/pluralsight.svg","simple-plurk":"simple/plurk.svg","simple-pluscodes":"simple/pluscodes.svg","simple-pm2":"simple/pm2.svg","simple-pnpm":"simple/pnpm.svg","simple-pocket":"simple/pocket.svg","simple-pocketbase":"simple/pocketbase.svg","simple-pocketcasts":"simple/pocketcasts.svg","simple-podcastaddict":"simple/podcastaddict.svg","simple-podcastindex":"simple/podcastindex.svg","simple-podman":"simple/podman.svg","simple-poe":"simple/poe.svg","simple-poetry":"simple/poetry.svg","simple-pointy":"simple/pointy.svg","simple-pokemon":"simple/pokemon.svg","simple-polars":"simple/polars.svg","simple-polkadot":"simple/polkadot.svg","simple-poly":"simple/poly.svg","simple-polymerproject":"simple/polymerproject.svg","simple-polywork":"simple/polywork.svg","simple-popos":"simple/popos.svg","simple-porsche":"simple/porsche.svg","simple-portainer":"simple/portainer.svg","simple-postcss":"simple/postcss.svg","simple-postgresql":"simple/postgresql.svg","simple-posthog":"simple/posthog.svg","simple-postman":"simple/postman.svg","simple-postmates":"simple/postmates.svg","simple-powerapps":"simple/powerapps.svg","simple-powerautomate":"simple/powerautomate.svg","simple-powerbi":"simple/powerbi.svg","simple-powerfx":"simple/powerfx.svg","simple-powerpages":"simple/powerpages.svg","simple-powers":"simple/powers.svg","simple-powershell":"simple/powershell.svg","simple-powervirtualagents":"simple/powervirtualagents.svg","simple-prdotco":"simple/prdotco.svg","simple-preact":"simple/preact.svg","simple-precommit":"simple/precommit.svg","simple-prefect":"simple/prefect.svg","simple-premierleague":"simple/premierleague.svg","simple-prestashop":"simple/prestashop.svg","simple-presto":"simple/presto.svg","simple-prettier":"simple/prettier.svg","simple-pretzel":"simple/pretzel.svg","simple-prevention":"simple/prevention.svg","simple-prezi":"simple/prezi.svg","simple-prime":"simple/prime.svg","simple-primevideo":"simple/primevideo.svg","simple-printables":"simple/printables.svg","simple-prisma":"simple/prisma.svg","simple-prismic":"simple/prismic.svg","simple-privateinternetaccess":"simple/privateinternetaccess.svg","simple-probot":"simple/probot.svg","simple-processingfoundation":"simple/processingfoundation.svg","simple-processwire":"simple/processwire.svg","simple-producthunt":"simple/producthunt.svg","simple-progate":"simple/progate.svg","simple-progress":"simple/progress.svg","simple-prometheus":"simple/prometheus.svg","simple-prosieben":"simple/prosieben.svg","simple-protocolsdotio":"simple/protocolsdotio.svg","simple-protodotio":"simple/protodotio.svg","simple-proton":"simple/proton.svg","simple-protoncalendar":"simple/protoncalendar.svg","simple-protondb":"simple/protondb.svg","simple-protondrive":"simple/protondrive.svg","simple-protonmail":"simple/protonmail.svg","simple-protonvpn":"simple/protonvpn.svg","simple-protools":"simple/protools.svg","simple-protractor":"simple/protractor.svg","simple-proxmox":"simple/proxmox.svg","simple-pterodactyl":"simple/pterodactyl.svg","simple-pubg":"simple/pubg.svg","simple-publons":"simple/publons.svg","simple-pubmed":"simple/pubmed.svg","simple-pug":"simple/pug.svg","simple-pulumi":"simple/pulumi.svg","simple-puma":"simple/puma.svg","simple-puppet":"simple/puppet.svg","simple-puppeteer":"simple/puppeteer.svg","simple-purescript":"simple/purescript.svg","simple-purgecss":"simple/purgecss.svg","simple-purism":"simple/purism.svg","simple-pusher":"simple/pusher.svg","simple-pwa":"simple/pwa.svg","simple-pycharm":"simple/pycharm.svg","simple-pydantic":"simple/pydantic.svg","simple-pyg":"simple/pyg.svg","simple-pypi":"simple/pypi.svg","simple-pypy":"simple/pypy.svg","simple-pyscaffold":"simple/pyscaffold.svg","simple-pysyft":"simple/pysyft.svg","simple-pytest":"simple/pytest.svg","simple-python":"simple/python.svg","simple-pythonanywhere":"simple/pythonanywhere.svg","simple-pytorch":"simple/pytorch.svg","simple-pyup":"simple/pyup.svg","simple-qantas":"simple/qantas.svg","simple-qatarairways":"simple/qatarairways.svg","simple-qemu":"simple/qemu.svg","simple-qgis":"simple/qgis.svg","simple-qi":"simple/qi.svg","simple-qiita":"simple/qiita.svg","simple-qiskit":"simple/qiskit.svg","simple-qiwi":"simple/qiwi.svg","simple-qlik":"simple/qlik.svg","simple-qmk":"simple/qmk.svg","simple-qt":"simple/qt.svg","simple-qualcomm":"simple/qualcomm.svg","simple-qualtrics":"simple/qualtrics.svg","simple-qualys":"simple/qualys.svg","simple-quantcast":"simple/quantcast.svg","simple-quantconnect":"simple/quantconnect.svg","simple-quarkus":"simple/quarkus.svg","simple-quasar":"simple/quasar.svg","simple-qubesos":"simple/qubesos.svg","simple-quest":"simple/quest.svg","simple-quickbooks":"simple/quickbooks.svg","simple-quicklook":"simple/quicklook.svg","simple-quicktime":"simple/quicktime.svg","simple-quip":"simple/quip.svg","simple-quora":"simple/quora.svg","simple-qwant":"simple/qwant.svg","simple-qwiklabs":"simple/qwiklabs.svg","simple-qzone":"simple/qzone.svg","simple-r":"simple/r.svg","simple-r3":"simple/r3.svg","simple-rabbitmq":"simple/rabbitmq.svg","simple-racket":"simple/racket.svg","simple-radar":"simple/radar.svg","simple-radiopublic":"simple/radiopublic.svg","simple-radixui":"simple/radixui.svg","simple-radstudio":"simple/radstudio.svg","simple-railway":"simple/railway.svg","simple-rainmeter":"simple/rainmeter.svg","simple-rakuten":"simple/rakuten.svg","simple-ram":"simple/ram.svg","simple-rancher":"simple/rancher.svg","simple-rarible":"simple/rarible.svg","simple-rasa":"simple/rasa.svg","simple-raspberrypi":"simple/raspberrypi.svg","simple-ravelry":"simple/ravelry.svg","simple-ray":"simple/ray.svg","simple-razer":"simple/razer.svg","simple-razorpay":"simple/razorpay.svg","simple-react":"simple/react.svg","simple-reacthookform":"simple/reacthookform.svg","simple-reactivex":"simple/reactivex.svg","simple-reactos":"simple/reactos.svg","simple-reactquery":"simple/reactquery.svg","simple-reactrouter":"simple/reactrouter.svg","simple-reacttable":"simple/reacttable.svg","simple-readdotcv":"simple/readdotcv.svg","simple-readme":"simple/readme.svg","simple-readthedocs":"simple/readthedocs.svg","simple-realm":"simple/realm.svg","simple-reason":"simple/reason.svg","simple-reasonstudios":"simple/reasonstudios.svg","simple-recoil":"simple/recoil.svg","simple-red":"simple/red.svg","simple-redbubble":"simple/redbubble.svg","simple-reddit":"simple/reddit.svg","simple-redhat":"simple/redhat.svg","simple-redhatopenshift":"simple/redhatopenshift.svg","simple-redis":"simple/redis.svg","simple-redmine":"simple/redmine.svg","simple-redox":"simple/redox.svg","simple-redux":"simple/redux.svg","simple-reduxsaga":"simple/reduxsaga.svg","simple-redwoodjs":"simple/redwoodjs.svg","simple-reebok":"simple/reebok.svg","simple-relay":"simple/relay.svg","simple-relianceindustrieslimited":"simple/relianceindustrieslimited.svg","simple-remark":"simple/remark.svg","simple-remix":"simple/remix.svg","simple-renault":"simple/renault.svg","simple-render":"simple/render.svg","simple-renovatebot":"simple/renovatebot.svg","simple-renpy":"simple/renpy.svg","simple-renren":"simple/renren.svg","simple-replit":"simple/replit.svg","simple-republicofgamers":"simple/republicofgamers.svg","simple-rescript":"simple/rescript.svg","simple-rescuetime":"simple/rescuetime.svg","simple-researchgate":"simple/researchgate.svg","simple-resharper":"simple/resharper.svg","simple-resurrectionremixos":"simple/resurrectionremixos.svg","simple-retool":"simple/retool.svg","simple-retroarch":"simple/retroarch.svg","simple-retropie":"simple/retropie.svg","simple-revanced":"simple/revanced.svg","simple-revealdotjs":"simple/revealdotjs.svg","simple-reverbnation":"simple/reverbnation.svg","simple-revoltdotchat":"simple/revoltdotchat.svg","simple-revolut":"simple/revolut.svg","simple-revue":"simple/revue.svg","simple-rewe":"simple/rewe.svg","simple-rezgo":"simple/rezgo.svg","simple-rhinoceros":"simple/rhinoceros.svg","simple-rider":"simple/rider.svg","simple-rimacautomobili":"simple/rimacautomobili.svg","simple-ring":"simple/ring.svg","simple-riotgames":"simple/riotgames.svg","simple-ripple":"simple/ripple.svg","simple-riscv":"simple/riscv.svg","simple-riseup":"simple/riseup.svg","simple-roadmapdotsh":"simple/roadmapdotsh.svg","simple-roamresearch":"simple/roamresearch.svg","simple-robinhood":"simple/robinhood.svg","simple-roblox":"simple/roblox.svg","simple-robloxstudio":"simple/robloxstudio.svg","simple-robotframework":"simple/robotframework.svg","simple-rocketdotchat":"simple/rocketdotchat.svg","simple-rocksdb":"simple/rocksdb.svg","simple-rockylinux":"simple/rockylinux.svg","simple-roku":"simple/roku.svg","simple-rollsroyce":"simple/rollsroyce.svg","simple-rollupdotjs":"simple/rollupdotjs.svg","simple-rome":"simple/rome.svg","simple-rootme":"simple/rootme.svg","simple-roots":"simple/roots.svg","simple-rootsbedrock":"simple/rootsbedrock.svg","simple-rootssage":"simple/rootssage.svg","simple-ros":"simple/ros.svg","simple-rossmann":"simple/rossmann.svg","simple-rotaryinternational":"simple/rotaryinternational.svg","simple-rottentomatoes":"simple/rottentomatoes.svg","simple-roundcube":"simple/roundcube.svg","simple-rsocket":"simple/rsocket.svg","simple-rss":"simple/rss.svg","simple-rstudio":"simple/rstudio.svg","simple-rte":"simple/rte.svg","simple-rtl":"simple/rtl.svg","simple-rtlzwei":"simple/rtlzwei.svg","simple-rubocop":"simple/rubocop.svg","simple-ruby":"simple/ruby.svg","simple-rubygems":"simple/rubygems.svg","simple-rubyonrails":"simple/rubyonrails.svg","simple-rubysinatra":"simple/rubysinatra.svg","simple-ruff":"simple/ruff.svg","simple-rumble":"simple/rumble.svg","simple-rundeck":"simple/rundeck.svg","simple-runkeeper":"simple/runkeeper.svg","simple-runkit":"simple/runkit.svg","simple-rust":"simple/rust.svg","simple-rxdb":"simple/rxdb.svg","simple-ryanair":"simple/ryanair.svg","simple-s7airlines":"simple/s7airlines.svg","simple-sabanci":"simple/sabanci.svg","simple-safari":"simple/safari.svg","simple-sage":"simple/sage.svg","simple-sahibinden":"simple/sahibinden.svg","simple-sailfishos":"simple/sailfishos.svg","simple-sailsdotjs":"simple/sailsdotjs.svg","simple-salesforce":"simple/salesforce.svg","simple-saltproject":"simple/saltproject.svg","simple-samsung":"simple/samsung.svg","simple-samsungpay":"simple/samsungpay.svg","simple-sandisk":"simple/sandisk.svg","simple-sanfranciscomunicipalrailway":"simple/sanfranciscomunicipalrailway.svg","simple-sanic":"simple/sanic.svg","simple-sanity":"simple/sanity.svg","simple-saopaulometro":"simple/saopaulometro.svg","simple-sap":"simple/sap.svg","simple-sass":"simple/sass.svg","simple-sat1":"simple/sat1.svg","simple-saturn":"simple/saturn.svg","simple-saucelabs":"simple/saucelabs.svg","simple-scala":"simple/scala.svg","simple-scaleway":"simple/scaleway.svg","simple-scania":"simple/scania.svg","simple-schneiderelectric":"simple/schneiderelectric.svg","simple-scikitlearn":"simple/scikitlearn.svg","simple-scipy":"simple/scipy.svg","simple-scopus":"simple/scopus.svg","simple-scpfoundation":"simple/scpfoundation.svg","simple-scrapbox":"simple/scrapbox.svg","simple-scratch":"simple/scratch.svg","simple-screencastify":"simple/screencastify.svg","simple-scribd":"simple/scribd.svg","simple-scrimba":"simple/scrimba.svg","simple-scrollreveal":"simple/scrollreveal.svg","simple-scrumalliance":"simple/scrumalliance.svg","simple-scrutinizerci":"simple/scrutinizerci.svg","simple-scylladb":"simple/scylladb.svg","simple-seagate":"simple/seagate.svg","simple-searxng":"simple/searxng.svg","simple-seat":"simple/seat.svg","simple-securityscorecard":"simple/securityscorecard.svg","simple-sefaria":"simple/sefaria.svg","simple-sega":"simple/sega.svg","simple-selenium":"simple/selenium.svg","simple-sellfy":"simple/sellfy.svg","simple-semanticrelease":"simple/semanticrelease.svg","simple-semanticscholar":"simple/semanticscholar.svg","simple-semanticuireact":"simple/semanticuireact.svg","simple-semanticweb":"simple/semanticweb.svg","simple-semaphoreci":"simple/semaphoreci.svg","simple-semrush":"simple/semrush.svg","simple-semver":"simple/semver.svg","simple-sencha":"simple/sencha.svg","simple-sendinblue":"simple/sendinblue.svg","simple-sennheiser":"simple/sennheiser.svg","simple-sensu":"simple/sensu.svg","simple-sentry":"simple/sentry.svg","simple-sepa":"simple/sepa.svg","simple-sequelize":"simple/sequelize.svg","simple-serverfault":"simple/serverfault.svg","simple-serverless":"simple/serverless.svg","simple-sessionize":"simple/sessionize.svg","simple-setapp":"simple/setapp.svg","simple-sfml":"simple/sfml.svg","simple-shadow":"simple/shadow.svg","simple-shanghaimetro":"simple/shanghaimetro.svg","simple-sharex":"simple/sharex.svg","simple-sharp":"simple/sharp.svg","simple-shazam":"simple/shazam.svg","simple-shell":"simple/shell.svg","simple-shelly":"simple/shelly.svg","simple-shenzhenmetro":"simple/shenzhenmetro.svg","simple-shieldsdotio":"simple/shieldsdotio.svg","simple-shikimori":"simple/shikimori.svg","simple-shopee":"simple/shopee.svg","simple-shopify":"simple/shopify.svg","simple-shopware":"simple/shopware.svg","simple-shortcut":"simple/shortcut.svg","simple-shotcut":"simple/shotcut.svg","simple-showpad":"simple/showpad.svg","simple-showtime":"simple/showtime.svg","simple-shutterstock":"simple/shutterstock.svg","simple-siemens":"simple/siemens.svg","simple-sifive":"simple/sifive.svg","simple-signal":"simple/signal.svg","simple-similarweb":"simple/similarweb.svg","simple-simkl":"simple/simkl.svg","simple-simpleanalytics":"simple/simpleanalytics.svg","simple-simpleicons":"simple/simpleicons.svg","simple-simplenote":"simple/simplenote.svg","simple-sinaweibo":"simple/sinaweibo.svg","simple-singaporeairlines":"simple/singaporeairlines.svg","simple-singlestore":"simple/singlestore.svg","simple-sitecore":"simple/sitecore.svg","simple-sitepoint":"simple/sitepoint.svg","simple-sketch":"simple/sketch.svg","simple-sketchfab":"simple/sketchfab.svg","simple-sketchup":"simple/sketchup.svg","simple-skillshare":"simple/skillshare.svg","simple-skoda":"simple/skoda.svg","simple-sky":"simple/sky.svg","simple-skynet":"simple/skynet.svg","simple-skypack":"simple/skypack.svg","simple-skype":"simple/skype.svg","simple-skypeforbusiness":"simple/skypeforbusiness.svg","simple-skyrock":"simple/skyrock.svg","simple-slack":"simple/slack.svg","simple-slackware":"simple/slackware.svg","simple-slashdot":"simple/slashdot.svg","simple-slickpic":"simple/slickpic.svg","simple-slides":"simple/slides.svg","simple-slideshare":"simple/slideshare.svg","simple-smart":"simple/smart.svg","simple-smartthings":"simple/smartthings.svg","simple-smashdotgg":"simple/smashdotgg.svg","simple-smashingmagazine":"simple/smashingmagazine.svg","simple-smrt":"simple/smrt.svg","simple-smugmug":"simple/smugmug.svg","simple-snapchat":"simple/snapchat.svg","simple-snapcraft":"simple/snapcraft.svg","simple-sncf":"simple/sncf.svg","simple-snowflake":"simple/snowflake.svg","simple-snowpack":"simple/snowpack.svg","simple-snyk":"simple/snyk.svg","simple-socialblade":"simple/socialblade.svg","simple-society6":"simple/society6.svg","simple-socketdotio":"simple/socketdotio.svg","simple-sogou":"simple/sogou.svg","simple-solid":"simple/solid.svg","simple-solidity":"simple/solidity.svg","simple-sololearn":"simple/sololearn.svg","simple-solus":"simple/solus.svg","simple-sonar":"simple/sonar.svg","simple-sonarcloud":"simple/sonarcloud.svg","simple-sonarlint":"simple/sonarlint.svg","simple-sonarqube":"simple/sonarqube.svg","simple-sonarsource":"simple/sonarsource.svg","simple-sonatype":"simple/sonatype.svg","simple-songkick":"simple/songkick.svg","simple-songoda":"simple/songoda.svg","simple-sonicwall":"simple/sonicwall.svg","simple-sonos":"simple/sonos.svg","simple-sony":"simple/sony.svg","simple-soundcharts":"simple/soundcharts.svg","simple-soundcloud":"simple/soundcloud.svg","simple-sourceengine":"simple/sourceengine.svg","simple-sourceforge":"simple/sourceforge.svg","simple-sourcegraph":"simple/sourcegraph.svg","simple-sourcehut":"simple/sourcehut.svg","simple-sourcetree":"simple/sourcetree.svg","simple-southwestairlines":"simple/southwestairlines.svg","simple-spacemacs":"simple/spacemacs.svg","simple-spacex":"simple/spacex.svg","simple-spacy":"simple/spacy.svg","simple-sparkar":"simple/sparkar.svg","simple-sparkasse":"simple/sparkasse.svg","simple-sparkfun":"simple/sparkfun.svg","simple-sparkpost":"simple/sparkpost.svg","simple-spdx":"simple/spdx.svg","simple-speakerdeck":"simple/speakerdeck.svg","simple-spectrum":"simple/spectrum.svg","simple-speedtest":"simple/speedtest.svg","simple-speedypage":"simple/speedypage.svg","simple-sphinx":"simple/sphinx.svg","simple-spigotmc":"simple/spigotmc.svg","simple-spinnaker":"simple/spinnaker.svg","simple-spinrilla":"simple/spinrilla.svg","simple-splunk":"simple/splunk.svg","simple-spoj":"simple/spoj.svg","simple-spond":"simple/spond.svg","simple-spotify":"simple/spotify.svg","simple-spotlight":"simple/spotlight.svg","simple-spreadshirt":"simple/spreadshirt.svg","simple-spreaker":"simple/spreaker.svg","simple-spring":"simple/spring.svg","simple-spring_creators":"simple/spring_creators.svg","simple-springboot":"simple/springboot.svg","simple-springsecurity":"simple/springsecurity.svg","simple-spyderide":"simple/spyderide.svg","simple-sqlite":"simple/sqlite.svg","simple-square":"simple/square.svg","simple-squareenix":"simple/squareenix.svg","simple-squarespace":"simple/squarespace.svg","simple-ssrn":"simple/ssrn.svg","simple-sst":"simple/sst.svg","simple-stackbit":"simple/stackbit.svg","simple-stackblitz":"simple/stackblitz.svg","simple-stackedit":"simple/stackedit.svg","simple-stackexchange":"simple/stackexchange.svg","simple-stackhawk":"simple/stackhawk.svg","simple-stackoverflow":"simple/stackoverflow.svg","simple-stackpath":"simple/stackpath.svg","simple-stackshare":"simple/stackshare.svg","simple-stadia":"simple/stadia.svg","simple-staffbase":"simple/staffbase.svg","simple-standardjs":"simple/standardjs.svg","simple-standardresume":"simple/standardresume.svg","simple-starbucks":"simple/starbucks.svg","simple-stardock":"simple/stardock.svg","simple-starlingbank":"simple/starlingbank.svg","simple-starship":"simple/starship.svg","simple-startrek":"simple/startrek.svg","simple-starz":"simple/starz.svg","simple-statamic":"simple/statamic.svg","simple-statuspage":"simple/statuspage.svg","simple-statuspal":"simple/statuspal.svg","simple-steam":"simple/steam.svg","simple-steamdb":"simple/steamdb.svg","simple-steamdeck":"simple/steamdeck.svg","simple-steamworks":"simple/steamworks.svg","simple-steelseries":"simple/steelseries.svg","simple-steem":"simple/steem.svg","simple-steemit":"simple/steemit.svg","simple-steinberg":"simple/steinberg.svg","simple-stellar":"simple/stellar.svg","simple-stencyl":"simple/stencyl.svg","simple-stimulus":"simple/stimulus.svg","simple-stitcher":"simple/stitcher.svg","simple-stmicroelectronics":"simple/stmicroelectronics.svg","simple-stopstalk":"simple/stopstalk.svg","simple-storyblok":"simple/storyblok.svg","simple-storybook":"simple/storybook.svg","simple-strapi":"simple/strapi.svg","simple-strava":"simple/strava.svg","simple-streamlit":"simple/streamlit.svg","simple-stripe":"simple/stripe.svg","simple-strongswan":"simple/strongswan.svg","simple-stryker":"simple/stryker.svg","simple-stubhub":"simple/stubhub.svg","simple-studio3t":"simple/studio3t.svg","simple-styledcomponents":"simple/styledcomponents.svg","simple-stylelint":"simple/stylelint.svg","simple-styleshare":"simple/styleshare.svg","simple-stylus":"simple/stylus.svg","simple-subaru":"simple/subaru.svg","simple-sublimetext":"simple/sublimetext.svg","simple-substack":"simple/substack.svg","simple-subtitleedit":"simple/subtitleedit.svg","simple-subversion":"simple/subversion.svg","simple-suckless":"simple/suckless.svg","simple-sumologic":"simple/sumologic.svg","simple-supabase":"simple/supabase.svg","simple-supercrease":"simple/supercrease.svg","simple-supermicro":"simple/supermicro.svg","simple-superuser":"simple/superuser.svg","simple-surrealdb":"simple/surrealdb.svg","simple-surveymonkey":"simple/surveymonkey.svg","simple-suse":"simple/suse.svg","simple-suzuki":"simple/suzuki.svg","simple-svelte":"simple/svelte.svg","simple-svg":"simple/svg.svg","simple-svgdotjs":"simple/svgdotjs.svg","simple-svgo":"simple/svgo.svg","simple-swagger":"simple/swagger.svg","simple-swarm":"simple/swarm.svg","simple-swc":"simple/swc.svg","simple-swift":"simple/swift.svg","simple-swiggy":"simple/swiggy.svg","simple-swiper":"simple/swiper.svg","simple-swr":"simple/swr.svg","simple-symantec":"simple/symantec.svg","simple-symbolab":"simple/symbolab.svg","simple-symfony":"simple/symfony.svg","simple-symphony":"simple/symphony.svg","simple-sympy":"simple/sympy.svg","simple-synology":"simple/synology.svg","simple-system76":"simple/system76.svg","simple-tableau":"simple/tableau.svg","simple-tablecheck":"simple/tablecheck.svg","simple-tacobell":"simple/tacobell.svg","simple-tado":"simple/tado.svg","simple-taichigraphics":"simple/taichigraphics.svg","simple-taichilang":"simple/taichilang.svg","simple-tails":"simple/tails.svg","simple-tailwindcss":"simple/tailwindcss.svg","simple-talend":"simple/talend.svg","simple-talenthouse":"simple/talenthouse.svg","simple-tamiya":"simple/tamiya.svg","simple-tampermonkey":"simple/tampermonkey.svg","simple-taobao":"simple/taobao.svg","simple-tapas":"simple/tapas.svg","simple-target":"simple/target.svg","simple-task":"simple/task.svg","simple-tasmota":"simple/tasmota.svg","simple-tata":"simple/tata.svg","simple-tauri":"simple/tauri.svg","simple-taxbuzz":"simple/taxbuzz.svg","simple-tcs":"simple/tcs.svg","simple-teamcity":"simple/teamcity.svg","simple-teamspeak":"simple/teamspeak.svg","simple-teamviewer":"simple/teamviewer.svg","simple-ted":"simple/ted.svg","simple-teespring":"simple/teespring.svg","simple-tekton":"simple/tekton.svg","simple-tele5":"simple/tele5.svg","simple-telegram":"simple/telegram.svg","simple-telegraph":"simple/telegraph.svg","simple-temporal":"simple/temporal.svg","simple-tencentqq":"simple/tencentqq.svg","simple-tensorflow":"simple/tensorflow.svg","simple-teradata":"simple/teradata.svg","simple-teratail":"simple/teratail.svg","simple-termius":"simple/termius.svg","simple-terraform":"simple/terraform.svg","simple-tesco":"simple/tesco.svg","simple-tesla":"simple/tesla.svg","simple-testcafe":"simple/testcafe.svg","simple-testin":"simple/testin.svg","simple-testinglibrary":"simple/testinglibrary.svg","simple-testrail":"simple/testrail.svg","simple-tether":"simple/tether.svg","simple-textpattern":"simple/textpattern.svg","simple-tga":"simple/tga.svg","simple-thangs":"simple/thangs.svg","simple-thealgorithms":"simple/thealgorithms.svg","simple-theconversation":"simple/theconversation.svg","simple-theirishtimes":"simple/theirishtimes.svg","simple-themighty":"simple/themighty.svg","simple-themodelsresource":"simple/themodelsresource.svg","simple-themoviedatabase":"simple/themoviedatabase.svg","simple-thenorthface":"simple/thenorthface.svg","simple-theregister":"simple/theregister.svg","simple-thesoundsresource":"simple/thesoundsresource.svg","simple-thespritersresource":"simple/thespritersresource.svg","simple-thewashingtonpost":"simple/thewashingtonpost.svg","simple-thingiverse":"simple/thingiverse.svg","simple-thinkpad":"simple/thinkpad.svg","simple-threadless":"simple/threadless.svg","simple-threads":"simple/threads.svg","simple-threedotjs":"simple/threedotjs.svg","simple-threema":"simple/threema.svg","simple-thumbtack":"simple/thumbtack.svg","simple-thunderbird":"simple/thunderbird.svg","simple-thurgauerkantonalbank":"simple/thurgauerkantonalbank.svg","simple-thymeleaf":"simple/thymeleaf.svg","simple-ticketmaster":"simple/ticketmaster.svg","simple-tidal":"simple/tidal.svg","simple-tiddlywiki":"simple/tiddlywiki.svg","simple-tide":"simple/tide.svg","simple-tidyverse":"simple/tidyverse.svg","simple-tietoevry":"simple/tietoevry.svg","simple-tiktok":"simple/tiktok.svg","simple-tile":"simple/tile.svg","simple-timescale":"simple/timescale.svg","simple-tina":"simple/tina.svg","simple-tinder":"simple/tinder.svg","simple-tinyletter":"simple/tinyletter.svg","simple-tistory":"simple/tistory.svg","simple-tmobile":"simple/tmobile.svg","simple-tmux":"simple/tmux.svg","simple-tnt":"simple/tnt.svg","simple-todoist":"simple/todoist.svg","simple-toggl":"simple/toggl.svg","simple-toggltrack":"simple/toggltrack.svg","simple-tokyometro":"simple/tokyometro.svg","simple-toml":"simple/toml.svg","simple-tomorrowland":"simple/tomorrowland.svg","simple-topcoder":"simple/topcoder.svg","simple-toptal":"simple/toptal.svg","simple-torbrowser":"simple/torbrowser.svg","simple-torproject":"simple/torproject.svg","simple-toshiba":"simple/toshiba.svg","simple-tourbox":"simple/tourbox.svg","simple-toyota":"simple/toyota.svg","simple-tplink":"simple/tplink.svg","simple-tqdm":"simple/tqdm.svg","simple-traefikmesh":"simple/traefikmesh.svg","simple-traefikproxy":"simple/traefikproxy.svg","simple-trailforks":"simple/trailforks.svg","simple-trainerroad":"simple/trainerroad.svg","simple-trakt":"simple/trakt.svg","simple-transportforireland":"simple/transportforireland.svg","simple-transportforlondon":"simple/transportforlondon.svg","simple-travisci":"simple/travisci.svg","simple-treehouse":"simple/treehouse.svg","simple-trello":"simple/trello.svg","simple-trendmicro":"simple/trendmicro.svg","simple-treyarch":"simple/treyarch.svg","simple-trilium":"simple/trilium.svg","simple-triller":"simple/triller.svg","simple-trino":"simple/trino.svg","simple-tripadvisor":"simple/tripadvisor.svg","simple-tripdotcom":"simple/tripdotcom.svg","simple-trivy":"simple/trivy.svg","simple-trove":"simple/trove.svg","simple-trpc":"simple/trpc.svg","simple-truenas":"simple/truenas.svg","simple-trulia":"simple/trulia.svg","simple-trustedshops":"simple/trustedshops.svg","simple-trustpilot":"simple/trustpilot.svg","simple-tryhackme":"simple/tryhackme.svg","simple-tryitonline":"simple/tryitonline.svg","simple-tsnode":"simple/tsnode.svg","simple-tubi":"simple/tubi.svg","simple-tui":"simple/tui.svg","simple-tumblr":"simple/tumblr.svg","simple-tunein":"simple/tunein.svg","simple-turbo":"simple/turbo.svg","simple-turborepo":"simple/turborepo.svg","simple-turbosquid":"simple/turbosquid.svg","simple-turkishairlines":"simple/turkishairlines.svg","simple-tutanota":"simple/tutanota.svg","simple-tvtime":"simple/tvtime.svg","simple-twilio":"simple/twilio.svg","simple-twitch":"simple/twitch.svg","simple-twitter":"simple/twitter.svg","simple-twoo":"simple/twoo.svg","simple-typeform":"simple/typeform.svg","simple-typescript":"simple/typescript.svg","simple-typo3":"simple/typo3.svg","simple-uber":"simple/uber.svg","simple-ubereats":"simple/ubereats.svg","simple-ubiquiti":"simple/ubiquiti.svg","simple-ubisoft":"simple/ubisoft.svg","simple-ublockorigin":"simple/ublockorigin.svg","simple-ubuntu":"simple/ubuntu.svg","simple-ubuntumate":"simple/ubuntumate.svg","simple-udacity":"simple/udacity.svg","simple-udemy":"simple/udemy.svg","simple-ufc":"simple/ufc.svg","simple-uikit":"simple/uikit.svg","simple-ulule":"simple/ulule.svg","simple-umami":"simple/umami.svg","simple-umbraco":"simple/umbraco.svg","simple-uml":"simple/uml.svg","simple-unacademy":"simple/unacademy.svg","simple-underarmour":"simple/underarmour.svg","simple-underscoredotjs":"simple/underscoredotjs.svg","simple-undertale":"simple/undertale.svg","simple-unicode":"simple/unicode.svg","simple-unilever":"simple/unilever.svg","simple-unitedairlines":"simple/unitedairlines.svg","simple-unitednations":"simple/unitednations.svg","simple-unity":"simple/unity.svg","simple-unlicense":"simple/unlicense.svg","simple-uno":"simple/uno.svg","simple-unocss":"simple/unocss.svg","simple-unraid":"simple/unraid.svg","simple-unrealengine":"simple/unrealengine.svg","simple-unsplash":"simple/unsplash.svg","simple-untangle":"simple/untangle.svg","simple-untappd":"simple/untappd.svg","simple-upcloud":"simple/upcloud.svg","simple-uplabs":"simple/uplabs.svg","simple-uploaded":"simple/uploaded.svg","simple-ups":"simple/ups.svg","simple-upstash":"simple/upstash.svg","simple-uptimekuma":"simple/uptimekuma.svg","simple-uptobox":"simple/uptobox.svg","simple-upwork":"simple/upwork.svg","simple-usps":"simple/usps.svg","simple-utorrent":"simple/utorrent.svg","simple-v":"simple/v.svg","simple-v2ex":"simple/v2ex.svg","simple-v8":"simple/v8.svg","simple-vaadin":"simple/vaadin.svg","simple-vagrant":"simple/vagrant.svg","simple-vala":"simple/vala.svg","simple-valorant":"simple/valorant.svg","simple-valve":"simple/valve.svg","simple-vapor":"simple/vapor.svg","simple-vault":"simple/vault.svg","simple-vaultwarden":"simple/vaultwarden.svg","simple-vauxhall":"simple/vauxhall.svg","simple-vbulletin":"simple/vbulletin.svg","simple-vectorlogozone":"simple/vectorlogozone.svg","simple-vectorworks":"simple/vectorworks.svg","simple-veeam":"simple/veeam.svg","simple-veepee":"simple/veepee.svg","simple-vega":"simple/vega.svg","simple-velog":"simple/velog.svg","simple-venmo":"simple/venmo.svg","simple-vercel":"simple/vercel.svg","simple-verdaccio":"simple/verdaccio.svg","simple-veritas":"simple/veritas.svg","simple-verizon":"simple/verizon.svg","simple-vespa":"simple/vespa.svg","simple-vexxhost":"simple/vexxhost.svg","simple-vfairs":"simple/vfairs.svg","simple-viadeo":"simple/viadeo.svg","simple-viaplay":"simple/viaplay.svg","simple-viber":"simple/viber.svg","simple-vim":"simple/vim.svg","simple-vimeo":"simple/vimeo.svg","simple-vimeolivestream":"simple/vimeolivestream.svg","simple-virgin":"simple/virgin.svg","simple-virginmedia":"simple/virginmedia.svg","simple-virtualbox":"simple/virtualbox.svg","simple-virustotal":"simple/virustotal.svg","simple-visa":"simple/visa.svg","simple-visualbasic":"simple/visualbasic.svg","simple-visualstudio":"simple/visualstudio.svg","simple-visualstudiocode":"simple/visualstudiocode.svg","simple-vite":"simple/vite.svg","simple-vitess":"simple/vitess.svg","simple-vitest":"simple/vitest.svg","simple-vivaldi":"simple/vivaldi.svg","simple-vivawallet":"simple/vivawallet.svg","simple-vivino":"simple/vivino.svg","simple-vk":"simple/vk.svg","simple-vlcmediaplayer":"simple/vlcmediaplayer.svg","simple-vmware":"simple/vmware.svg","simple-vodafone":"simple/vodafone.svg","simple-voipdotms":"simple/voipdotms.svg","simple-volkswagen":"simple/volkswagen.svg","simple-volvo":"simple/volvo.svg","simple-vonage":"simple/vonage.svg","simple-vorondesign":"simple/vorondesign.svg","simple-vowpalwabbit":"simple/vowpalwabbit.svg","simple-vox":"simple/vox.svg","simple-vsco":"simple/vsco.svg","simple-vscodium":"simple/vscodium.svg","simple-vtex":"simple/vtex.svg","simple-vuedotjs":"simple/vuedotjs.svg","simple-vuetify":"simple/vuetify.svg","simple-vulkan":"simple/vulkan.svg","simple-vultr":"simple/vultr.svg","simple-vyond":"simple/vyond.svg","simple-w3c":"simple/w3c.svg","simple-wacom":"simple/wacom.svg","simple-wagtail":"simple/wagtail.svg","simple-wails":"simple/wails.svg","simple-wakatime":"simple/wakatime.svg","simple-walkman":"simple/walkman.svg","simple-wallabag":"simple/wallabag.svg","simple-walletconnect":"simple/walletconnect.svg","simple-walmart":"simple/walmart.svg","simple-wantedly":"simple/wantedly.svg","simple-wappalyzer":"simple/wappalyzer.svg","simple-warnerbros":"simple/warnerbros.svg","simple-warp":"simple/warp.svg","simple-wasabi":"simple/wasabi.svg","simple-wasmcloud":"simple/wasmcloud.svg","simple-wasmer":"simple/wasmer.svg","simple-wattpad":"simple/wattpad.svg","simple-wayland":"simple/wayland.svg","simple-waze":"simple/waze.svg","simple-wearos":"simple/wearos.svg","simple-weasyl":"simple/weasyl.svg","simple-web3dotjs":"simple/web3dotjs.svg","simple-webassembly":"simple/webassembly.svg","simple-webauthn":"simple/webauthn.svg","simple-webcomponentsdotorg":"simple/webcomponentsdotorg.svg","simple-webdriverio":"simple/webdriverio.svg","simple-webflow":"simple/webflow.svg","simple-webgl":"simple/webgl.svg","simple-webhint":"simple/webhint.svg","simple-weblate":"simple/weblate.svg","simple-webmin":"simple/webmin.svg","simple-webmoney":"simple/webmoney.svg","simple-webpack":"simple/webpack.svg","simple-webrtc":"simple/webrtc.svg","simple-webstorm":"simple/webstorm.svg","simple-webtoon":"simple/webtoon.svg","simple-webtrees":"simple/webtrees.svg","simple-wechat":"simple/wechat.svg","simple-wegame":"simple/wegame.svg","simple-weightsandbiases":"simple/weightsandbiases.svg","simple-welcometothejungle":"simple/welcometothejungle.svg","simple-wellfound":"simple/wellfound.svg","simple-wemo":"simple/wemo.svg","simple-westerndigital":"simple/westerndigital.svg","simple-wetransfer":"simple/wetransfer.svg","simple-whatsapp":"simple/whatsapp.svg","simple-wheniwork":"simple/wheniwork.svg","simple-whitesource":"simple/whitesource.svg","simple-wii":"simple/wii.svg","simple-wiiu":"simple/wiiu.svg","simple-wikidata":"simple/wikidata.svg","simple-wikidotgg":"simple/wikidotgg.svg","simple-wikidotjs":"simple/wikidotjs.svg","simple-wikimediacommons":"simple/wikimediacommons.svg","simple-wikipedia":"simple/wikipedia.svg","simple-wikiquote":"simple/wikiquote.svg","simple-wikivoyage":"simple/wikivoyage.svg","simple-winamp":"simple/winamp.svg","simple-windicss":"simple/windicss.svg","simple-windows":"simple/windows.svg","simple-windows10":"simple/windows10.svg","simple-windows11":"simple/windows11.svg","simple-windows95":"simple/windows95.svg","simple-windowsterminal":"simple/windowsterminal.svg","simple-windowsxp":"simple/windowsxp.svg","simple-winmate":"simple/winmate.svg","simple-wipro":"simple/wipro.svg","simple-wire":"simple/wire.svg","simple-wireguard":"simple/wireguard.svg","simple-wireshark":"simple/wireshark.svg","simple-wise":"simple/wise.svg","simple-wish":"simple/wish.svg","simple-wistia":"simple/wistia.svg","simple-wix":"simple/wix.svg","simple-wizzair":"simple/wizzair.svg","simple-wolfram":"simple/wolfram.svg","simple-wolframlanguage":"simple/wolframlanguage.svg","simple-wolframmathematica":"simple/wolframmathematica.svg","simple-woo":"simple/woo.svg","simple-woocommerce":"simple/woocommerce.svg","simple-wordpress":"simple/wordpress.svg","simple-workplace":"simple/workplace.svg","simple-worldhealthorganization":"simple/worldhealthorganization.svg","simple-wpengine":"simple/wpengine.svg","simple-wpexplorer":"simple/wpexplorer.svg","simple-wprocket":"simple/wprocket.svg","simple-writedotas":"simple/writedotas.svg","simple-wwe":"simple/wwe.svg","simple-wwise":"simple/wwise.svg","simple-x":"simple/x.svg","simple-xamarin":"simple/xamarin.svg","simple-xaml":"simple/xaml.svg","simple-xampp":"simple/xampp.svg","simple-xbox":"simple/xbox.svg","simple-xcode":"simple/xcode.svg","simple-xdadevelopers":"simple/xdadevelopers.svg","simple-xdotorg":"simple/xdotorg.svg","simple-xero":"simple/xero.svg","simple-xfce":"simple/xfce.svg","simple-xiaomi":"simple/xiaomi.svg","simple-xilinx":"simple/xilinx.svg","simple-xing":"simple/xing.svg","simple-xmpp":"simple/xmpp.svg","simple-xo":"simple/xo.svg","simple-xrp":"simple/xrp.svg","simple-xsplit":"simple/xsplit.svg","simple-xstate":"simple/xstate.svg","simple-yahoo":"simple/yahoo.svg","simple-yale":"simple/yale.svg","simple-yamahacorporation":"simple/yamahacorporation.svg","simple-yamahamotorcorporation":"simple/yamahamotorcorporation.svg","simple-yaml":"simple/yaml.svg","simple-yammer":"simple/yammer.svg","simple-yarn":"simple/yarn.svg","simple-ycombinator":"simple/ycombinator.svg","simple-yelp":"simple/yelp.svg","simple-yeti":"simple/yeti.svg","simple-yoast":"simple/yoast.svg","simple-yolo":"simple/yolo.svg","simple-yourtraveldottv":"simple/yourtraveldottv.svg","simple-youtube":"simple/youtube.svg","simple-youtubegaming":"simple/youtubegaming.svg","simple-youtubemusic":"simple/youtubemusic.svg","simple-youtubestudio":"simple/youtubestudio.svg","simple-youtubetv":"simple/youtubetv.svg","simple-yubico":"simple/yubico.svg","simple-zabka":"simple/zabka.svg","simple-zalando":"simple/zalando.svg","simple-zalo":"simple/zalo.svg","simple-zapier":"simple/zapier.svg","simple-zara":"simple/zara.svg","simple-zazzle":"simple/zazzle.svg","simple-zcash":"simple/zcash.svg","simple-zdf":"simple/zdf.svg","simple-zebratechnologies":"simple/zebratechnologies.svg","simple-zelle":"simple/zelle.svg","simple-zend":"simple/zend.svg","simple-zendesk":"simple/zendesk.svg","simple-zendframework":"simple/zendframework.svg","simple-zenn":"simple/zenn.svg","simple-zenodo":"simple/zenodo.svg","simple-zensar":"simple/zensar.svg","simple-zerodha":"simple/zerodha.svg","simple-zeromq":"simple/zeromq.svg","simple-zerply":"simple/zerply.svg","simple-zettlr":"simple/zettlr.svg","simple-zhihu":"simple/zhihu.svg","simple-zig":"simple/zig.svg","simple-zigbee":"simple/zigbee.svg","simple-zilch":"simple/zilch.svg","simple-zillow":"simple/zillow.svg","simple-zincsearch":"simple/zincsearch.svg","simple-zingat":"simple/zingat.svg","simple-zod":"simple/zod.svg","simple-zoho":"simple/zoho.svg","simple-zoiper":"simple/zoiper.svg","simple-zomato":"simple/zomato.svg","simple-zoom":"simple/zoom.svg","simple-zorin":"simple/zorin.svg","simple-zotero":"simple/zotero.svg","simple-zulip":"simple/zulip.svg","simple-zwave":"simple/zwave.svg","simple-zyte":"simple/zyte.svg"}},"emojis":{"base":"https://raw.githubusercontent.com/twitter/twemoji/master/assets/svg/","data":{"100":"1f4af.svg","1234":"1f522.svg","8ball":"1f3b1.svg","a":"1f170.svg","ab":"1f18e.svg","abacus":"1f9ee.svg","abc":"1f524.svg","abcd":"1f521.svg","accept":"1f251.svg","accordion":"1fa97.svg","adhesive_bandage":"1fa79.svg","adult":"1f9d1.svg","adult_tone1":"1f9d1-1f3fb.svg","adult_tone2":"1f9d1-1f3fc.svg","adult_tone3":"1f9d1-1f3fd.svg","adult_tone4":"1f9d1-1f3fe.svg","adult_tone5":"1f9d1-1f3ff.svg","aerial_tramway":"1f6a1.svg","airplane":"2708.svg","airplane_arriving":"1f6ec.svg","airplane_departure":"1f6eb.svg","airplane_small":"1f6e9.svg","alarm_clock":"23f0.svg","alembic":"2697.svg","alien":"1f47d.svg","ambulance":"1f691.svg","amphora":"1f3fa.svg","anatomical_heart":"1fac0.svg","anchor":"2693.svg","angel":"1f47c.svg","angel_tone1":"1f47c-1f3fb.svg","angel_tone2":"1f47c-1f3fc.svg","angel_tone3":"1f47c-1f3fd.svg","angel_tone4":"1f47c-1f3fe.svg","angel_tone5":"1f47c-1f3ff.svg","anger":"1f4a2.svg","anger_right":"1f5ef.svg","angry":"1f620.svg","anguished":"1f627.svg","ant":"1f41c.svg","apple":"1f34e.svg","aquarius":"2652.svg","aries":"2648.svg","arrow_backward":"25c0.svg","arrow_double_down":"23ec.svg","arrow_double_up":"23eb.svg","arrow_down":"2b07.svg","arrow_down_small":"1f53d.svg","arrow_forward":"25b6.svg","arrow_heading_down":"2935.svg","arrow_heading_up":"2934.svg","arrow_left":"2b05.svg","arrow_lower_left":"2199.svg","arrow_lower_right":"2198.svg","arrow_right":"27a1.svg","arrow_right_hook":"21aa.svg","arrow_up":"2b06.svg","arrow_up_down":"2195.svg","arrow_up_small":"1f53c.svg","arrow_upper_left":"2196.svg","arrow_upper_right":"2197.svg","arrows_clockwise":"1f503.svg","arrows_counterclockwise":"1f504.svg","art":"1f3a8.svg","articulated_lorry":"1f69b.svg","artist":"1f9d1-200d-1f3a8.svg","artist_tone1":"1f9d1-1f3fb-200d-1f3a8.svg","artist_tone2":"1f9d1-1f3fc-200d-1f3a8.svg","artist_tone3":"1f9d1-1f3fd-200d-1f3a8.svg","artist_tone4":"1f9d1-1f3fe-200d-1f3a8.svg","artist_tone5":"1f9d1-1f3ff-200d-1f3a8.svg","asterisk":"2a-20e3.svg","astonished":"1f632.svg","astronaut":"1f9d1-200d-1f680.svg","astronaut_tone1":"1f9d1-1f3fb-200d-1f680.svg","astronaut_tone2":"1f9d1-1f3fc-200d-1f680.svg","astronaut_tone3":"1f9d1-1f3fd-200d-1f680.svg","astronaut_tone4":"1f9d1-1f3fe-200d-1f680.svg","astronaut_tone5":"1f9d1-1f3ff-200d-1f680.svg","athletic_shoe":"1f45f.svg","atm":"1f3e7.svg","atom":"269b.svg","auto_rickshaw":"1f6fa.svg","avocado":"1f951.svg","axe":"1fa93.svg","b":"1f171.svg","baby":"1f476.svg","baby_bottle":"1f37c.svg","baby_chick":"1f424.svg","baby_symbol":"1f6bc.svg","baby_tone1":"1f476-1f3fb.svg","baby_tone2":"1f476-1f3fc.svg","baby_tone3":"1f476-1f3fd.svg","baby_tone4":"1f476-1f3fe.svg","baby_tone5":"1f476-1f3ff.svg","back":"1f519.svg","bacon":"1f953.svg","badger":"1f9a1.svg","badminton":"1f3f8.svg","bagel":"1f96f.svg","baggage_claim":"1f6c4.svg","bald":"1f9b2.svg","ballet_shoes":"1fa70.svg","balloon":"1f388.svg","ballot_box":"1f5f3.svg","ballot_box_with_check":"2611.svg","bamboo":"1f38d.svg","banana":"1f34c.svg","bangbang":"203c.svg","banjo":"1fa95.svg","bank":"1f3e6.svg","bar_chart":"1f4ca.svg","barber":"1f488.svg","baseball":"26be.svg","basket":"1f9fa.svg","basketball":"1f3c0.svg","bat":"1f987.svg","bath":"1f6c0.svg","bath_tone1":"1f6c0-1f3fb.svg","bath_tone2":"1f6c0-1f3fc.svg","bath_tone3":"1f6c0-1f3fd.svg","bath_tone4":"1f6c0-1f3fe.svg","bath_tone5":"1f6c0-1f3ff.svg","bathtub":"1f6c1.svg","battery":"1f50b.svg","beach":"1f3d6.svg","beach_umbrella":"26f1.svg","beans":"1fad8.svg","bear":"1f43b.svg","bearded_person":"1f9d4.svg","bearded_person_tone1":"1f9d4-1f3fb.svg","bearded_person_tone2":"1f9d4-1f3fc.svg","bearded_person_tone3":"1f9d4-1f3fd.svg","bearded_person_tone4":"1f9d4-1f3fe.svg","bearded_person_tone5":"1f9d4-1f3ff.svg","beaver":"1f9ab.svg","bed":"1f6cf.svg","bee":"1f41d.svg","beer":"1f37a.svg","beers":"1f37b.svg","beetle":"1fab2.svg","beginner":"1f530.svg","bell":"1f514.svg","bell_pepper":"1fad1.svg","bellhop":"1f6ce.svg","bento":"1f371.svg","beverage_box":"1f9c3.svg","bike":"1f6b2.svg","bikini":"1f459.svg","billed_cap":"1f9e2.svg","biohazard":"2623.svg","bird":"1f426.svg","birthday":"1f382.svg","bison":"1f9ac.svg","biting_lip":"1fae6.svg","black_cat":"1f408-200d-2b1b.svg","black_circle":"26ab.svg","black_heart":"1f5a4.svg","black_joker":"1f0cf.svg","black_large_square":"2b1b.svg","black_medium_small_square":"25fe.svg","black_medium_square":"25fc.svg","black_nib":"2712.svg","black_small_square":"25aa.svg","black_square_button":"1f532.svg","blond-haired_man":"1f471-200d-2642-fe0f.svg","blond-haired_man_tone1":"1f471-1f3fb-200d-2642-fe0f.svg","blond-haired_man_tone2":"1f471-1f3fc-200d-2642-fe0f.svg","blond-haired_man_tone3":"1f471-1f3fd-200d-2642-fe0f.svg","blond-haired_man_tone4":"1f471-1f3fe-200d-2642-fe0f.svg","blond-haired_man_tone5":"1f471-1f3ff-200d-2642-fe0f.svg","blond-haired_woman":"1f471-200d-2640-fe0f.svg","blond-haired_woman_tone1":"1f471-1f3fb-200d-2640-fe0f.svg","blond-haired_woman_tone2":"1f471-1f3fc-200d-2640-fe0f.svg","blond-haired_woman_tone3":"1f471-1f3fd-200d-2640-fe0f.svg","blond-haired_woman_tone4":"1f471-1f3fe-200d-2640-fe0f.svg","blond-haired_woman_tone5":"1f471-1f3ff-200d-2640-fe0f.svg","blond_haired_person":"1f471.svg","blond_haired_person_tone1":"1f471-1f3fb.svg","blond_haired_person_tone2":"1f471-1f3fc.svg","blond_haired_person_tone3":"1f471-1f3fd.svg","blond_haired_person_tone4":"1f471-1f3fe.svg","blond_haired_person_tone5":"1f471-1f3ff.svg","blossom":"1f33c.svg","blowfish":"1f421.svg","blue_book":"1f4d8.svg","blue_car":"1f699.svg","blue_circle":"1f535.svg","blue_heart":"1f499.svg","blue_square":"1f7e6.svg","blueberries":"1fad0.svg","blush":"1f60a.svg","boar":"1f417.svg","bomb":"1f4a3.svg","bone":"1f9b4.svg","book":"1f4d6.svg","bookmark":"1f516.svg","bookmark_tabs":"1f4d1.svg","books":"1f4da.svg","boom":"1f4a5.svg","boomerang":"1fa83.svg","boot":"1f462.svg","bouquet":"1f490.svg","bow_and_arrow":"1f3f9.svg","bowl_with_spoon":"1f963.svg","bowling":"1f3b3.svg","boxing_glove":"1f94a.svg","boy":"1f466.svg","boy_tone1":"1f466-1f3fb.svg","boy_tone2":"1f466-1f3fc.svg","boy_tone3":"1f466-1f3fd.svg","boy_tone4":"1f466-1f3fe.svg","boy_tone5":"1f466-1f3ff.svg","brain":"1f9e0.svg","bread":"1f35e.svg","breast_feeding":"1f931.svg","breast_feeding_tone1":"1f931-1f3fb.svg","breast_feeding_tone2":"1f931-1f3fc.svg","breast_feeding_tone3":"1f931-1f3fd.svg","breast_feeding_tone4":"1f931-1f3fe.svg","breast_feeding_tone5":"1f931-1f3ff.svg","bricks":"1f9f1.svg","bridge_at_night":"1f309.svg","briefcase":"1f4bc.svg","briefs":"1fa72.svg","broccoli":"1f966.svg","broken_heart":"1f494.svg","broom":"1f9f9.svg","brown_circle":"1f7e4.svg","brown_heart":"1f90e.svg","brown_square":"1f7eb.svg","bubble_tea":"1f9cb.svg","bubbles":"1fae7.svg","bucket":"1faa3.svg","bug":"1f41b.svg","bulb":"1f4a1.svg","bullettrain_front":"1f685.svg","bullettrain_side":"1f684.svg","burrito":"1f32f.svg","bus":"1f68c.svg","busstop":"1f68f.svg","bust_in_silhouette":"1f464.svg","busts_in_silhouette":"1f465.svg","butter":"1f9c8.svg","butterfly":"1f98b.svg","cactus":"1f335.svg","cake":"1f370.svg","calendar":"1f4c6.svg","calendar_spiral":"1f5d3.svg","call_me":"1f919.svg","call_me_tone1":"1f919-1f3fb.svg","call_me_tone2":"1f919-1f3fc.svg","call_me_tone3":"1f919-1f3fd.svg","call_me_tone4":"1f919-1f3fe.svg","call_me_tone5":"1f919-1f3ff.svg","calling":"1f4f2.svg","camel":"1f42b.svg","camera":"1f4f7.svg","camera_with_flash":"1f4f8.svg","camping":"1f3d5.svg","cancer":"264b.svg","candle":"1f56f.svg","candy":"1f36c.svg","canned_food":"1f96b.svg","canoe":"1f6f6.svg","capital_abcd":"1f520.svg","capricorn":"2651.svg","card_box":"1f5c3.svg","card_index":"1f4c7.svg","carousel_horse":"1f3a0.svg","carpentry_saw":"1fa9a.svg","carrot":"1f955.svg","cat2":"1f408.svg","cat":"1f431.svg","cd":"1f4bf.svg","chains":"26d3.svg","chair":"1fa91.svg","champagne":"1f37e.svg","champagne_glass":"1f942.svg","chart":"1f4b9.svg","chart_with_downwards_trend":"1f4c9.svg","chart_with_upwards_trend":"1f4c8.svg","checkered_flag":"1f3c1.svg","cheese":"1f9c0.svg","cherries":"1f352.svg","cherry_blossom":"1f338.svg","chess_pawn":"265f.svg","chestnut":"1f330.svg","chicken":"1f414.svg","child":"1f9d2.svg","child_tone1":"1f9d2-1f3fb.svg","child_tone2":"1f9d2-1f3fc.svg","child_tone3":"1f9d2-1f3fd.svg","child_tone4":"1f9d2-1f3fe.svg","child_tone5":"1f9d2-1f3ff.svg","children_crossing":"1f6b8.svg","chipmunk":"1f43f.svg","chocolate_bar":"1f36b.svg","chopsticks":"1f962.svg","christmas_tree":"1f384.svg","church":"26ea.svg","cinema":"1f3a6.svg","circus_tent":"1f3aa.svg","city_dusk":"1f306.svg","city_sunset":"1f307.svg","cityscape":"1f3d9.svg","cl":"1f191.svg","clap":"1f44f.svg","clap_tone1":"1f44f-1f3fb.svg","clap_tone2":"1f44f-1f3fc.svg","clap_tone3":"1f44f-1f3fd.svg","clap_tone4":"1f44f-1f3fe.svg","clap_tone5":"1f44f-1f3ff.svg","clapper":"1f3ac.svg","classical_building":"1f3db.svg","clipboard":"1f4cb.svg","clock1030":"1f565.svg","clock10":"1f559.svg","clock1130":"1f566.svg","clock11":"1f55a.svg","clock1230":"1f567.svg","clock12":"1f55b.svg","clock130":"1f55c.svg","clock1":"1f550.svg","clock230":"1f55d.svg","clock2":"1f551.svg","clock330":"1f55e.svg","clock3":"1f552.svg","clock430":"1f55f.svg","clock4":"1f553.svg","clock530":"1f560.svg","clock5":"1f554.svg","clock630":"1f561.svg","clock6":"1f555.svg","clock730":"1f562.svg","clock7":"1f556.svg","clock830":"1f563.svg","clock8":"1f557.svg","clock930":"1f564.svg","clock9":"1f558.svg","clock":"1f570.svg","closed_book":"1f4d5.svg","closed_lock_with_key":"1f510.svg","closed_umbrella":"1f302.svg","cloud":"2601.svg","cloud_lightning":"1f329.svg","cloud_rain":"1f327.svg","cloud_snow":"1f328.svg","cloud_tornado":"1f32a.svg","clown":"1f921.svg","clubs":"2663.svg","coat":"1f9e5.svg","cockroach":"1fab3.svg","cocktail":"1f378.svg","coconut":"1f965.svg","coffee":"2615.svg","coffin":"26b0.svg","coin":"1fa99.svg","cold_face":"1f976.svg","cold_sweat":"1f630.svg","comet":"2604.svg","compass":"1f9ed.svg","compression":"1f5dc.svg","computer":"1f4bb.svg","confetti_ball":"1f38a.svg","confounded":"1f616.svg","confused":"1f615.svg","congratulations":"3297.svg","construction":"1f6a7.svg","construction_site":"1f3d7.svg","construction_worker":"1f477.svg","construction_worker_tone1":"1f477-1f3fb.svg","construction_worker_tone2":"1f477-1f3fc.svg","construction_worker_tone3":"1f477-1f3fd.svg","construction_worker_tone4":"1f477-1f3fe.svg","construction_worker_tone5":"1f477-1f3ff.svg","control_knobs":"1f39b.svg","convenience_store":"1f3ea.svg","cook":"1f9d1-200d-1f373.svg","cook_tone1":"1f9d1-1f3fb-200d-1f373.svg","cook_tone2":"1f9d1-1f3fc-200d-1f373.svg","cook_tone3":"1f9d1-1f3fd-200d-1f373.svg","cook_tone4":"1f9d1-1f3fe-200d-1f373.svg","cook_tone5":"1f9d1-1f3ff-200d-1f373.svg","cookie":"1f36a.svg","cooking":"1f373.svg","cool":"1f192.svg","copyright":"a9.svg","coral":"1fab8.svg","corn":"1f33d.svg","couch":"1f6cb.svg","couple":"1f46b.svg","couple_mm":"1f468-200d-2764-fe0f-200d-1f468.svg","couple_with_heart":"1f491.svg","couple_with_heart_man_man_tone1":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_man_man_tone1_tone2":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_man_man_tone1_tone3":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_man_man_tone1_tone4":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_man_man_tone1_tone5":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_man_man_tone2":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_man_man_tone2_tone1":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_man_man_tone2_tone3":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_man_man_tone2_tone4":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_man_man_tone2_tone5":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_man_man_tone3":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_man_man_tone3_tone1":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_man_man_tone3_tone2":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_man_man_tone3_tone4":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_man_man_tone3_tone5":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_man_man_tone4":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_man_man_tone4_tone1":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_man_man_tone4_tone2":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_man_man_tone4_tone3":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_man_man_tone4_tone5":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_man_man_tone5":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_man_man_tone5_tone1":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_man_man_tone5_tone2":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_man_man_tone5_tone3":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_man_man_tone5_tone4":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_person_person_tone1_tone2":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc.svg","couple_with_heart_person_person_tone1_tone3":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fd.svg","couple_with_heart_person_person_tone1_tone4":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fe.svg","couple_with_heart_person_person_tone1_tone5":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3ff.svg","couple_with_heart_person_person_tone2_tone1":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fb.svg","couple_with_heart_person_person_tone2_tone3":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fd.svg","couple_with_heart_person_person_tone2_tone4":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fe.svg","couple_with_heart_person_person_tone2_tone5":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3ff.svg","couple_with_heart_person_person_tone3_tone1":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fb.svg","couple_with_heart_person_person_tone3_tone2":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fc.svg","couple_with_heart_person_person_tone3_tone4":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fe.svg","couple_with_heart_person_person_tone3_tone5":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3ff.svg","couple_with_heart_person_person_tone4_tone1":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fb.svg","couple_with_heart_person_person_tone4_tone2":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fc.svg","couple_with_heart_person_person_tone4_tone3":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fd.svg","couple_with_heart_person_person_tone4_tone5":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3ff.svg","couple_with_heart_person_person_tone5_tone1":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fb.svg","couple_with_heart_person_person_tone5_tone2":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fc.svg","couple_with_heart_person_person_tone5_tone3":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fd.svg","couple_with_heart_person_person_tone5_tone4":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fe.svg","couple_with_heart_tone1":"1f491-1f3fb.svg","couple_with_heart_tone2":"1f491-1f3fc.svg","couple_with_heart_tone3":"1f491-1f3fd.svg","couple_with_heart_tone4":"1f491-1f3fe.svg","couple_with_heart_tone5":"1f491-1f3ff.svg","couple_with_heart_woman_man":"1f469-200d-2764-fe0f-200d-1f468.svg","couple_with_heart_woman_man_tone1":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_woman_man_tone1_tone2":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_woman_man_tone1_tone3":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_woman_man_tone1_tone4":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_woman_man_tone1_tone5":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_woman_man_tone2":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_woman_man_tone2_tone1":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_woman_man_tone2_tone3":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_woman_man_tone2_tone4":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_woman_man_tone2_tone5":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_woman_man_tone3":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_woman_man_tone3_tone1":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_woman_man_tone3_tone2":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_woman_man_tone3_tone4":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_woman_man_tone3_tone5":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_woman_man_tone4":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_woman_man_tone4_tone1":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_woman_man_tone4_tone2":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_woman_man_tone4_tone3":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_woman_man_tone4_tone5":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_woman_man_tone5":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff.svg","couple_with_heart_woman_man_tone5_tone1":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb.svg","couple_with_heart_woman_man_tone5_tone2":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc.svg","couple_with_heart_woman_man_tone5_tone3":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd.svg","couple_with_heart_woman_man_tone5_tone4":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe.svg","couple_with_heart_woman_woman_tone1":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb.svg","couple_with_heart_woman_woman_tone1_tone2":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc.svg","couple_with_heart_woman_woman_tone1_tone3":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fd.svg","couple_with_heart_woman_woman_tone1_tone4":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fe.svg","couple_with_heart_woman_woman_tone1_tone5":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff.svg","couple_with_heart_woman_woman_tone2":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc.svg","couple_with_heart_woman_woman_tone2_tone1":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fb.svg","couple_with_heart_woman_woman_tone2_tone3":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fd.svg","couple_with_heart_woman_woman_tone2_tone4":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fe.svg","couple_with_heart_woman_woman_tone2_tone5":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3ff.svg","couple_with_heart_woman_woman_tone3":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd.svg","couple_with_heart_woman_woman_tone3_tone1":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fb.svg","couple_with_heart_woman_woman_tone3_tone2":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fc.svg","couple_with_heart_woman_woman_tone3_tone4":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fe.svg","couple_with_heart_woman_woman_tone3_tone5":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3ff.svg","couple_with_heart_woman_woman_tone4":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe.svg","couple_with_heart_woman_woman_tone4_tone1":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fb.svg","couple_with_heart_woman_woman_tone4_tone2":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fc.svg","couple_with_heart_woman_woman_tone4_tone3":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fd.svg","couple_with_heart_woman_woman_tone4_tone5":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3ff.svg","couple_with_heart_woman_woman_tone5":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff.svg","couple_with_heart_woman_woman_tone5_tone1":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fb.svg","couple_with_heart_woman_woman_tone5_tone2":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fc.svg","couple_with_heart_woman_woman_tone5_tone3":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fd.svg","couple_with_heart_woman_woman_tone5_tone4":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fe.svg","couple_ww":"1f469-200d-2764-fe0f-200d-1f469.svg","couplekiss":"1f48f.svg","cow2":"1f404.svg","cow":"1f42e.svg","cowboy":"1f920.svg","crab":"1f980.svg","crayon":"1f58d.svg","credit_card":"1f4b3.svg","crescent_moon":"1f319.svg","cricket":"1f997.svg","cricket_game":"1f3cf.svg","crocodile":"1f40a.svg","croissant":"1f950.svg","cross":"271d.svg","crossed_flags":"1f38c.svg","crossed_swords":"2694.svg","crown":"1f451.svg","cruise_ship":"1f6f3.svg","crutch":"1fa7c.svg","cry":"1f622.svg","crying_cat_face":"1f63f.svg","crystal_ball":"1f52e.svg","cucumber":"1f952.svg","cup_with_straw":"1f964.svg","cupcake":"1f9c1.svg","cupid":"1f498.svg","curling_stone":"1f94c.svg","curly_haired":"1f9b1.svg","curly_loop":"27b0.svg","currency_exchange":"1f4b1.svg","curry":"1f35b.svg","custard":"1f36e.svg","customs":"1f6c3.svg","cut_of_meat":"1f969.svg","cyclone":"1f300.svg","dagger":"1f5e1.svg","dancer":"1f483.svg","dancer_tone1":"1f483-1f3fb.svg","dancer_tone2":"1f483-1f3fc.svg","dancer_tone3":"1f483-1f3fd.svg","dancer_tone4":"1f483-1f3fe.svg","dancer_tone5":"1f483-1f3ff.svg","dango":"1f361.svg","dark_sunglasses":"1f576.svg","dart":"1f3af.svg","dash":"1f4a8.svg","date":"1f4c5.svg","deaf_man":"1f9cf-200d-2642-fe0f.svg","deaf_man_tone1":"1f9cf-1f3fb-200d-2642-fe0f.svg","deaf_man_tone2":"1f9cf-1f3fc-200d-2642-fe0f.svg","deaf_man_tone3":"1f9cf-1f3fd-200d-2642-fe0f.svg","deaf_man_tone4":"1f9cf-1f3fe-200d-2642-fe0f.svg","deaf_man_tone5":"1f9cf-1f3ff-200d-2642-fe0f.svg","deaf_person":"1f9cf.svg","deaf_person_tone1":"1f9cf-1f3fb.svg","deaf_person_tone2":"1f9cf-1f3fc.svg","deaf_person_tone3":"1f9cf-1f3fd.svg","deaf_person_tone4":"1f9cf-1f3fe.svg","deaf_person_tone5":"1f9cf-1f3ff.svg","deaf_woman":"1f9cf-200d-2640-fe0f.svg","deaf_woman_tone1":"1f9cf-1f3fb-200d-2640-fe0f.svg","deaf_woman_tone2":"1f9cf-1f3fc-200d-2640-fe0f.svg","deaf_woman_tone3":"1f9cf-1f3fd-200d-2640-fe0f.svg","deaf_woman_tone4":"1f9cf-1f3fe-200d-2640-fe0f.svg","deaf_woman_tone5":"1f9cf-1f3ff-200d-2640-fe0f.svg","deciduous_tree":"1f333.svg","deer":"1f98c.svg","department_store":"1f3ec.svg","desert":"1f3dc.svg","desktop":"1f5a5.svg","detective":"1f575.svg","detective_tone1":"1f575-1f3fb.svg","detective_tone2":"1f575-1f3fc.svg","detective_tone3":"1f575-1f3fd.svg","detective_tone4":"1f575-1f3fe.svg","detective_tone5":"1f575-1f3ff.svg","diamond_shape_with_a_dot_inside":"1f4a0.svg","diamonds":"2666.svg","disappointed":"1f61e.svg","disappointed_relieved":"1f625.svg","disguised_face":"1f978.svg","dividers":"1f5c2.svg","diving_mask":"1f93f.svg","diya_lamp":"1fa94.svg","dizzy":"1f4ab.svg","dizzy_face":"1f635.svg","dna":"1f9ec.svg","do_not_litter":"1f6af.svg","dodo":"1f9a4.svg","dog2":"1f415.svg","dog":"1f436.svg","dollar":"1f4b5.svg","dolls":"1f38e.svg","dolphin":"1f42c.svg","door":"1f6aa.svg","dotted_line_face":"1fae5.svg","doughnut":"1f369.svg","dove":"1f54a.svg","dragon":"1f409.svg","dragon_face":"1f432.svg","dress":"1f457.svg","dromedary_camel":"1f42a.svg","drooling_face":"1f924.svg","drop_of_blood":"1fa78.svg","droplet":"1f4a7.svg","drum":"1f941.svg","duck":"1f986.svg","dumpling":"1f95f.svg","dvd":"1f4c0.svg","e-mail":"1f4e7.svg","eagle":"1f985.svg","ear":"1f442.svg","ear_of_rice":"1f33e.svg","ear_tone1":"1f442-1f3fb.svg","ear_tone2":"1f442-1f3fc.svg","ear_tone3":"1f442-1f3fd.svg","ear_tone4":"1f442-1f3fe.svg","ear_tone5":"1f442-1f3ff.svg","ear_with_hearing_aid":"1f9bb.svg","ear_with_hearing_aid_tone1":"1f9bb-1f3fb.svg","ear_with_hearing_aid_tone2":"1f9bb-1f3fc.svg","ear_with_hearing_aid_tone3":"1f9bb-1f3fd.svg","ear_with_hearing_aid_tone4":"1f9bb-1f3fe.svg","ear_with_hearing_aid_tone5":"1f9bb-1f3ff.svg","earth_africa":"1f30d.svg","earth_americas":"1f30e.svg","earth_asia":"1f30f.svg","egg":"1f95a.svg","eggplant":"1f346.svg","eight":"38-20e3.svg","eight_pointed_black_star":"2734.svg","eight_spoked_asterisk":"2733.svg","eject":"23cf.svg","electric_plug":"1f50c.svg","elephant":"1f418.svg","elevator":"1f6d7.svg","elf":"1f9dd.svg","elf_tone1":"1f9dd-1f3fb.svg","elf_tone2":"1f9dd-1f3fc.svg","elf_tone3":"1f9dd-1f3fd.svg","elf_tone4":"1f9dd-1f3fe.svg","elf_tone5":"1f9dd-1f3ff.svg","empty_nest":"1fab9.svg","end":"1f51a.svg","england":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.svg","envelope":"2709.svg","envelope_with_arrow":"1f4e9.svg","euro":"1f4b6.svg","european_castle":"1f3f0.svg","european_post_office":"1f3e4.svg","evergreen_tree":"1f332.svg","exclamation":"2757.svg","exploding_head":"1f92f.svg","expressionless":"1f611.svg","eye":"1f441.svg","eye_in_speech_bubble":"1f441-200d-1f5e8.svg","eyeglasses":"1f453.svg","eyes":"1f440.svg","face_exhaling":"1f62e-200d-1f4a8.svg","face_holding_back_tears":"1f979.svg","face_in_clouds":"1f636-200d-1f32b-fe0f.svg","face_vomiting":"1f92e.svg","face_with_diagonal_mouth":"1fae4.svg","face_with_hand_over_mouth":"1f92d.svg","face_with_monocle":"1f9d0.svg","face_with_open_eyes_and_hand_over_mouth":"1fae2.svg","face_with_peeking_eye":"1fae3.svg","face_with_raised_eyebrow":"1f928.svg","face_with_spiral_eyes":"1f635-200d-1f4ab.svg","face_with_symbols_over_mouth":"1f92c.svg","factory":"1f3ed.svg","factory_worker":"1f9d1-200d-1f3ed.svg","factory_worker_tone1":"1f9d1-1f3fb-200d-1f3ed.svg","factory_worker_tone2":"1f9d1-1f3fc-200d-1f3ed.svg","factory_worker_tone3":"1f9d1-1f3fd-200d-1f3ed.svg","factory_worker_tone4":"1f9d1-1f3fe-200d-1f3ed.svg","factory_worker_tone5":"1f9d1-1f3ff-200d-1f3ed.svg","fairy":"1f9da.svg","fairy_tone1":"1f9da-1f3fb.svg","fairy_tone2":"1f9da-1f3fc.svg","fairy_tone3":"1f9da-1f3fd.svg","fairy_tone4":"1f9da-1f3fe.svg","fairy_tone5":"1f9da-1f3ff.svg","falafel":"1f9c6.svg","fallen_leaf":"1f342.svg","family":"1f46a.svg","family_man_boy":"1f468-200d-1f466.svg","family_man_boy_boy":"1f468-200d-1f466-200d-1f466.svg","family_man_girl":"1f468-200d-1f467.svg","family_man_girl_boy":"1f468-200d-1f467-200d-1f466.svg","family_man_girl_girl":"1f468-200d-1f467-200d-1f467.svg","family_man_woman_boy":"1f468-200d-1f469-200d-1f466.svg","family_mmb":"1f468-200d-1f468-200d-1f466.svg","family_mmbb":"1f468-200d-1f468-200d-1f466-200d-1f466.svg","family_mmg":"1f468-200d-1f468-200d-1f467.svg","family_mmgb":"1f468-200d-1f468-200d-1f467-200d-1f466.svg","family_mmgg":"1f468-200d-1f468-200d-1f467-200d-1f467.svg","family_mwbb":"1f468-200d-1f469-200d-1f466-200d-1f466.svg","family_mwg":"1f468-200d-1f469-200d-1f467.svg","family_mwgb":"1f468-200d-1f469-200d-1f467-200d-1f466.svg","family_mwgg":"1f468-200d-1f469-200d-1f467-200d-1f467.svg","family_woman_boy":"1f469-200d-1f466.svg","family_woman_boy_boy":"1f469-200d-1f466-200d-1f466.svg","family_woman_girl":"1f469-200d-1f467.svg","family_woman_girl_boy":"1f469-200d-1f467-200d-1f466.svg","family_woman_girl_girl":"1f469-200d-1f467-200d-1f467.svg","family_wwb":"1f469-200d-1f469-200d-1f466.svg","family_wwbb":"1f469-200d-1f469-200d-1f466-200d-1f466.svg","family_wwg":"1f469-200d-1f469-200d-1f467.svg","family_wwgb":"1f469-200d-1f469-200d-1f467-200d-1f466.svg","family_wwgg":"1f469-200d-1f469-200d-1f467-200d-1f467.svg","farmer":"1f9d1-200d-1f33e.svg","farmer_tone1":"1f9d1-1f3fb-200d-1f33e.svg","farmer_tone2":"1f9d1-1f3fc-200d-1f33e.svg","farmer_tone3":"1f9d1-1f3fd-200d-1f33e.svg","farmer_tone4":"1f9d1-1f3fe-200d-1f33e.svg","farmer_tone5":"1f9d1-1f3ff-200d-1f33e.svg","fast_forward":"23e9.svg","fax":"1f4e0.svg","fearful":"1f628.svg","feather":"1fab6.svg","feet":"1f43e.svg","female_sign":"2640.svg","ferris_wheel":"1f3a1.svg","ferry":"26f4.svg","field_hockey":"1f3d1.svg","file_cabinet":"1f5c4.svg","file_folder":"1f4c1.svg","film_frames":"1f39e.svg","fingers_crossed":"1f91e.svg","fingers_crossed_tone1":"1f91e-1f3fb.svg","fingers_crossed_tone2":"1f91e-1f3fc.svg","fingers_crossed_tone3":"1f91e-1f3fd.svg","fingers_crossed_tone4":"1f91e-1f3fe.svg","fingers_crossed_tone5":"1f91e-1f3ff.svg","fire":"1f525.svg","fire_engine":"1f692.svg","fire_extinguisher":"1f9ef.svg","firecracker":"1f9e8.svg","firefighter":"1f9d1-200d-1f692.svg","firefighter_tone1":"1f9d1-1f3fb-200d-1f692.svg","firefighter_tone2":"1f9d1-1f3fc-200d-1f692.svg","firefighter_tone3":"1f9d1-1f3fd-200d-1f692.svg","firefighter_tone4":"1f9d1-1f3fe-200d-1f692.svg","firefighter_tone5":"1f9d1-1f3ff-200d-1f692.svg","fireworks":"1f386.svg","first_place":"1f947.svg","first_quarter_moon":"1f313.svg","first_quarter_moon_with_face":"1f31b.svg","fish":"1f41f.svg","fish_cake":"1f365.svg","fishing_pole_and_fish":"1f3a3.svg","fist":"270a.svg","fist_tone1":"270a-1f3fb.svg","fist_tone2":"270a-1f3fc.svg","fist_tone3":"270a-1f3fd.svg","fist_tone4":"270a-1f3fe.svg","fist_tone5":"270a-1f3ff.svg","five":"35-20e3.svg","flag_ac":"1f1e6-1f1e8.svg","flag_ad":"1f1e6-1f1e9.svg","flag_ae":"1f1e6-1f1ea.svg","flag_af":"1f1e6-1f1eb.svg","flag_ag":"1f1e6-1f1ec.svg","flag_ai":"1f1e6-1f1ee.svg","flag_al":"1f1e6-1f1f1.svg","flag_am":"1f1e6-1f1f2.svg","flag_ao":"1f1e6-1f1f4.svg","flag_aq":"1f1e6-1f1f6.svg","flag_ar":"1f1e6-1f1f7.svg","flag_as":"1f1e6-1f1f8.svg","flag_at":"1f1e6-1f1f9.svg","flag_au":"1f1e6-1f1fa.svg","flag_aw":"1f1e6-1f1fc.svg","flag_ax":"1f1e6-1f1fd.svg","flag_az":"1f1e6-1f1ff.svg","flag_ba":"1f1e7-1f1e6.svg","flag_bb":"1f1e7-1f1e7.svg","flag_bd":"1f1e7-1f1e9.svg","flag_be":"1f1e7-1f1ea.svg","flag_bf":"1f1e7-1f1eb.svg","flag_bg":"1f1e7-1f1ec.svg","flag_bh":"1f1e7-1f1ed.svg","flag_bi":"1f1e7-1f1ee.svg","flag_bj":"1f1e7-1f1ef.svg","flag_bl":"1f1e7-1f1f1.svg","flag_black":"1f3f4.svg","flag_bm":"1f1e7-1f1f2.svg","flag_bn":"1f1e7-1f1f3.svg","flag_bo":"1f1e7-1f1f4.svg","flag_bq":"1f1e7-1f1f6.svg","flag_br":"1f1e7-1f1f7.svg","flag_bs":"1f1e7-1f1f8.svg","flag_bt":"1f1e7-1f1f9.svg","flag_bv":"1f1e7-1f1fb.svg","flag_bw":"1f1e7-1f1fc.svg","flag_by":"1f1e7-1f1fe.svg","flag_bz":"1f1e7-1f1ff.svg","flag_ca":"1f1e8-1f1e6.svg","flag_cc":"1f1e8-1f1e8.svg","flag_cd":"1f1e8-1f1e9.svg","flag_cf":"1f1e8-1f1eb.svg","flag_cg":"1f1e8-1f1ec.svg","flag_ch":"1f1e8-1f1ed.svg","flag_ci":"1f1e8-1f1ee.svg","flag_ck":"1f1e8-1f1f0.svg","flag_cl":"1f1e8-1f1f1.svg","flag_cm":"1f1e8-1f1f2.svg","flag_cn":"1f1e8-1f1f3.svg","flag_co":"1f1e8-1f1f4.svg","flag_cp":"1f1e8-1f1f5.svg","flag_cr":"1f1e8-1f1f7.svg","flag_cu":"1f1e8-1f1fa.svg","flag_cv":"1f1e8-1f1fb.svg","flag_cw":"1f1e8-1f1fc.svg","flag_cx":"1f1e8-1f1fd.svg","flag_cy":"1f1e8-1f1fe.svg","flag_cz":"1f1e8-1f1ff.svg","flag_de":"1f1e9-1f1ea.svg","flag_dg":"1f1e9-1f1ec.svg","flag_dj":"1f1e9-1f1ef.svg","flag_dk":"1f1e9-1f1f0.svg","flag_dm":"1f1e9-1f1f2.svg","flag_do":"1f1e9-1f1f4.svg","flag_dz":"1f1e9-1f1ff.svg","flag_ea":"1f1ea-1f1e6.svg","flag_ec":"1f1ea-1f1e8.svg","flag_ee":"1f1ea-1f1ea.svg","flag_eg":"1f1ea-1f1ec.svg","flag_eh":"1f1ea-1f1ed.svg","flag_er":"1f1ea-1f1f7.svg","flag_es":"1f1ea-1f1f8.svg","flag_et":"1f1ea-1f1f9.svg","flag_eu":"1f1ea-1f1fa.svg","flag_fi":"1f1eb-1f1ee.svg","flag_fj":"1f1eb-1f1ef.svg","flag_fk":"1f1eb-1f1f0.svg","flag_fm":"1f1eb-1f1f2.svg","flag_fo":"1f1eb-1f1f4.svg","flag_fr":"1f1eb-1f1f7.svg","flag_ga":"1f1ec-1f1e6.svg","flag_gb":"1f1ec-1f1e7.svg","flag_gd":"1f1ec-1f1e9.svg","flag_ge":"1f1ec-1f1ea.svg","flag_gf":"1f1ec-1f1eb.svg","flag_gg":"1f1ec-1f1ec.svg","flag_gh":"1f1ec-1f1ed.svg","flag_gi":"1f1ec-1f1ee.svg","flag_gl":"1f1ec-1f1f1.svg","flag_gm":"1f1ec-1f1f2.svg","flag_gn":"1f1ec-1f1f3.svg","flag_gp":"1f1ec-1f1f5.svg","flag_gq":"1f1ec-1f1f6.svg","flag_gr":"1f1ec-1f1f7.svg","flag_gs":"1f1ec-1f1f8.svg","flag_gt":"1f1ec-1f1f9.svg","flag_gu":"1f1ec-1f1fa.svg","flag_gw":"1f1ec-1f1fc.svg","flag_gy":"1f1ec-1f1fe.svg","flag_hk":"1f1ed-1f1f0.svg","flag_hm":"1f1ed-1f1f2.svg","flag_hn":"1f1ed-1f1f3.svg","flag_hr":"1f1ed-1f1f7.svg","flag_ht":"1f1ed-1f1f9.svg","flag_hu":"1f1ed-1f1fa.svg","flag_ic":"1f1ee-1f1e8.svg","flag_id":"1f1ee-1f1e9.svg","flag_ie":"1f1ee-1f1ea.svg","flag_il":"1f1ee-1f1f1.svg","flag_im":"1f1ee-1f1f2.svg","flag_in":"1f1ee-1f1f3.svg","flag_io":"1f1ee-1f1f4.svg","flag_iq":"1f1ee-1f1f6.svg","flag_ir":"1f1ee-1f1f7.svg","flag_is":"1f1ee-1f1f8.svg","flag_it":"1f1ee-1f1f9.svg","flag_je":"1f1ef-1f1ea.svg","flag_jm":"1f1ef-1f1f2.svg","flag_jo":"1f1ef-1f1f4.svg","flag_jp":"1f1ef-1f1f5.svg","flag_ke":"1f1f0-1f1ea.svg","flag_kg":"1f1f0-1f1ec.svg","flag_kh":"1f1f0-1f1ed.svg","flag_ki":"1f1f0-1f1ee.svg","flag_km":"1f1f0-1f1f2.svg","flag_kn":"1f1f0-1f1f3.svg","flag_kp":"1f1f0-1f1f5.svg","flag_kr":"1f1f0-1f1f7.svg","flag_kw":"1f1f0-1f1fc.svg","flag_ky":"1f1f0-1f1fe.svg","flag_kz":"1f1f0-1f1ff.svg","flag_la":"1f1f1-1f1e6.svg","flag_lb":"1f1f1-1f1e7.svg","flag_lc":"1f1f1-1f1e8.svg","flag_li":"1f1f1-1f1ee.svg","flag_lk":"1f1f1-1f1f0.svg","flag_lr":"1f1f1-1f1f7.svg","flag_ls":"1f1f1-1f1f8.svg","flag_lt":"1f1f1-1f1f9.svg","flag_lu":"1f1f1-1f1fa.svg","flag_lv":"1f1f1-1f1fb.svg","flag_ly":"1f1f1-1f1fe.svg","flag_ma":"1f1f2-1f1e6.svg","flag_mc":"1f1f2-1f1e8.svg","flag_md":"1f1f2-1f1e9.svg","flag_me":"1f1f2-1f1ea.svg","flag_mf":"1f1f2-1f1eb.svg","flag_mg":"1f1f2-1f1ec.svg","flag_mh":"1f1f2-1f1ed.svg","flag_mk":"1f1f2-1f1f0.svg","flag_ml":"1f1f2-1f1f1.svg","flag_mm":"1f1f2-1f1f2.svg","flag_mn":"1f1f2-1f1f3.svg","flag_mo":"1f1f2-1f1f4.svg","flag_mp":"1f1f2-1f1f5.svg","flag_mq":"1f1f2-1f1f6.svg","flag_mr":"1f1f2-1f1f7.svg","flag_ms":"1f1f2-1f1f8.svg","flag_mt":"1f1f2-1f1f9.svg","flag_mu":"1f1f2-1f1fa.svg","flag_mv":"1f1f2-1f1fb.svg","flag_mw":"1f1f2-1f1fc.svg","flag_mx":"1f1f2-1f1fd.svg","flag_my":"1f1f2-1f1fe.svg","flag_mz":"1f1f2-1f1ff.svg","flag_na":"1f1f3-1f1e6.svg","flag_nc":"1f1f3-1f1e8.svg","flag_ne":"1f1f3-1f1ea.svg","flag_nf":"1f1f3-1f1eb.svg","flag_ng":"1f1f3-1f1ec.svg","flag_ni":"1f1f3-1f1ee.svg","flag_nl":"1f1f3-1f1f1.svg","flag_no":"1f1f3-1f1f4.svg","flag_np":"1f1f3-1f1f5.svg","flag_nr":"1f1f3-1f1f7.svg","flag_nu":"1f1f3-1f1fa.svg","flag_nz":"1f1f3-1f1ff.svg","flag_om":"1f1f4-1f1f2.svg","flag_pa":"1f1f5-1f1e6.svg","flag_pe":"1f1f5-1f1ea.svg","flag_pf":"1f1f5-1f1eb.svg","flag_pg":"1f1f5-1f1ec.svg","flag_ph":"1f1f5-1f1ed.svg","flag_pk":"1f1f5-1f1f0.svg","flag_pl":"1f1f5-1f1f1.svg","flag_pm":"1f1f5-1f1f2.svg","flag_pn":"1f1f5-1f1f3.svg","flag_pr":"1f1f5-1f1f7.svg","flag_ps":"1f1f5-1f1f8.svg","flag_pt":"1f1f5-1f1f9.svg","flag_pw":"1f1f5-1f1fc.svg","flag_py":"1f1f5-1f1fe.svg","flag_qa":"1f1f6-1f1e6.svg","flag_re":"1f1f7-1f1ea.svg","flag_ro":"1f1f7-1f1f4.svg","flag_rs":"1f1f7-1f1f8.svg","flag_ru":"1f1f7-1f1fa.svg","flag_rw":"1f1f7-1f1fc.svg","flag_sa":"1f1f8-1f1e6.svg","flag_sb":"1f1f8-1f1e7.svg","flag_sc":"1f1f8-1f1e8.svg","flag_sd":"1f1f8-1f1e9.svg","flag_se":"1f1f8-1f1ea.svg","flag_sg":"1f1f8-1f1ec.svg","flag_sh":"1f1f8-1f1ed.svg","flag_si":"1f1f8-1f1ee.svg","flag_sj":"1f1f8-1f1ef.svg","flag_sk":"1f1f8-1f1f0.svg","flag_sl":"1f1f8-1f1f1.svg","flag_sm":"1f1f8-1f1f2.svg","flag_sn":"1f1f8-1f1f3.svg","flag_so":"1f1f8-1f1f4.svg","flag_sr":"1f1f8-1f1f7.svg","flag_ss":"1f1f8-1f1f8.svg","flag_st":"1f1f8-1f1f9.svg","flag_sv":"1f1f8-1f1fb.svg","flag_sx":"1f1f8-1f1fd.svg","flag_sy":"1f1f8-1f1fe.svg","flag_sz":"1f1f8-1f1ff.svg","flag_ta":"1f1f9-1f1e6.svg","flag_tc":"1f1f9-1f1e8.svg","flag_td":"1f1f9-1f1e9.svg","flag_tf":"1f1f9-1f1eb.svg","flag_tg":"1f1f9-1f1ec.svg","flag_th":"1f1f9-1f1ed.svg","flag_tj":"1f1f9-1f1ef.svg","flag_tk":"1f1f9-1f1f0.svg","flag_tl":"1f1f9-1f1f1.svg","flag_tm":"1f1f9-1f1f2.svg","flag_tn":"1f1f9-1f1f3.svg","flag_to":"1f1f9-1f1f4.svg","flag_tr":"1f1f9-1f1f7.svg","flag_tt":"1f1f9-1f1f9.svg","flag_tv":"1f1f9-1f1fb.svg","flag_tw":"1f1f9-1f1fc.svg","flag_tz":"1f1f9-1f1ff.svg","flag_ua":"1f1fa-1f1e6.svg","flag_ug":"1f1fa-1f1ec.svg","flag_um":"1f1fa-1f1f2.svg","flag_us":"1f1fa-1f1f8.svg","flag_uy":"1f1fa-1f1fe.svg","flag_uz":"1f1fa-1f1ff.svg","flag_va":"1f1fb-1f1e6.svg","flag_vc":"1f1fb-1f1e8.svg","flag_ve":"1f1fb-1f1ea.svg","flag_vg":"1f1fb-1f1ec.svg","flag_vi":"1f1fb-1f1ee.svg","flag_vn":"1f1fb-1f1f3.svg","flag_vu":"1f1fb-1f1fa.svg","flag_wf":"1f1fc-1f1eb.svg","flag_white":"1f3f3.svg","flag_ws":"1f1fc-1f1f8.svg","flag_xk":"1f1fd-1f1f0.svg","flag_ye":"1f1fe-1f1ea.svg","flag_yt":"1f1fe-1f1f9.svg","flag_za":"1f1ff-1f1e6.svg","flag_zm":"1f1ff-1f1f2.svg","flag_zw":"1f1ff-1f1fc.svg","flags":"1f38f.svg","flamingo":"1f9a9.svg","flashlight":"1f526.svg","flatbread":"1fad3.svg","fleur-de-lis":"269c.svg","floppy_disk":"1f4be.svg","flower_playing_cards":"1f3b4.svg","flushed":"1f633.svg","fly":"1fab0.svg","flying_disc":"1f94f.svg","flying_saucer":"1f6f8.svg","fog":"1f32b.svg","foggy":"1f301.svg","fondue":"1fad5.svg","foot":"1f9b6.svg","foot_tone1":"1f9b6-1f3fb.svg","foot_tone2":"1f9b6-1f3fc.svg","foot_tone3":"1f9b6-1f3fd.svg","foot_tone4":"1f9b6-1f3fe.svg","foot_tone5":"1f9b6-1f3ff.svg","football":"1f3c8.svg","footprints":"1f463.svg","fork_and_knife":"1f374.svg","fork_knife_plate":"1f37d.svg","fortune_cookie":"1f960.svg","fountain":"26f2.svg","four":"34-20e3.svg","four_leaf_clover":"1f340.svg","fox":"1f98a.svg","frame_photo":"1f5bc.svg","free":"1f193.svg","french_bread":"1f956.svg","fried_shrimp":"1f364.svg","fries":"1f35f.svg","frog":"1f438.svg","frowning2":"2639.svg","frowning":"1f626.svg","fuelpump":"26fd.svg","full_moon":"1f315.svg","full_moon_with_face":"1f31d.svg","game_die":"1f3b2.svg","garlic":"1f9c4.svg","gear":"2699.svg","gem":"1f48e.svg","gemini":"264a.svg","genie":"1f9de.svg","ghost":"1f47b.svg","gift":"1f381.svg","gift_heart":"1f49d.svg","giraffe":"1f992.svg","girl":"1f467.svg","girl_tone1":"1f467-1f3fb.svg","girl_tone2":"1f467-1f3fc.svg","girl_tone3":"1f467-1f3fd.svg","girl_tone4":"1f467-1f3fe.svg","girl_tone5":"1f467-1f3ff.svg","globe_with_meridians":"1f310.svg","gloves":"1f9e4.svg","goal":"1f945.svg","goat":"1f410.svg","goggles":"1f97d.svg","golf":"26f3.svg","gorilla":"1f98d.svg","grapes":"1f347.svg","green_apple":"1f34f.svg","green_book":"1f4d7.svg","green_circle":"1f7e2.svg","green_heart":"1f49a.svg","green_square":"1f7e9.svg","grey_exclamation":"2755.svg","grey_question":"2754.svg","grimacing":"1f62c.svg","grin":"1f601.svg","grinning":"1f600.svg","guard":"1f482.svg","guard_tone1":"1f482-1f3fb.svg","guard_tone2":"1f482-1f3fc.svg","guard_tone3":"1f482-1f3fd.svg","guard_tone4":"1f482-1f3fe.svg","guard_tone5":"1f482-1f3ff.svg","guide_dog":"1f9ae.svg","guitar":"1f3b8.svg","gun":"1f52b.svg","hamburger":"1f354.svg","hammer":"1f528.svg","hammer_pick":"2692.svg","hamsa":"1faac.svg","hamster":"1f439.svg","hand_splayed":"1f590.svg","hand_splayed_tone1":"1f590-1f3fb.svg","hand_splayed_tone2":"1f590-1f3fc.svg","hand_splayed_tone3":"1f590-1f3fd.svg","hand_splayed_tone4":"1f590-1f3fe.svg","hand_splayed_tone5":"1f590-1f3ff.svg","hand_with_index_finger_and_thumb_crossed":"1faf0.svg","hand_with_index_finger_and_thumb_crossed_tone1":"1faf0-1f3fb.svg","hand_with_index_finger_and_thumb_crossed_tone2":"1faf0-1f3fc.svg","hand_with_index_finger_and_thumb_crossed_tone3":"1faf0-1f3fd.svg","hand_with_index_finger_and_thumb_crossed_tone4":"1faf0-1f3fe.svg","hand_with_index_finger_and_thumb_crossed_tone5":"1faf0-1f3ff.svg","handbag":"1f45c.svg","handshake":"1f91d.svg","handshake_tone1":"1f91d-1f3fb.svg","handshake_tone1_tone2":"1faf1-1f3fb-200d-1faf2-1f3fc.svg","handshake_tone1_tone3":"1faf1-1f3fb-200d-1faf2-1f3fd.svg","handshake_tone1_tone4":"1faf1-1f3fb-200d-1faf2-1f3fe.svg","handshake_tone1_tone5":"1faf1-1f3fb-200d-1faf2-1f3ff.svg","handshake_tone2":"1f91d-1f3fc.svg","handshake_tone2_tone1":"1faf1-1f3fc-200d-1faf2-1f3fb.svg","handshake_tone2_tone3":"1faf1-1f3fc-200d-1faf2-1f3fd.svg","handshake_tone2_tone4":"1faf1-1f3fc-200d-1faf2-1f3fe.svg","handshake_tone2_tone5":"1faf1-1f3fc-200d-1faf2-1f3ff.svg","handshake_tone3":"1f91d-1f3fd.svg","handshake_tone3_tone1":"1faf1-1f3fd-200d-1faf2-1f3fb.svg","handshake_tone3_tone2":"1faf1-1f3fd-200d-1faf2-1f3fc.svg","handshake_tone3_tone4":"1faf1-1f3fd-200d-1faf2-1f3fe.svg","handshake_tone3_tone5":"1faf1-1f3fd-200d-1faf2-1f3ff.svg","handshake_tone4":"1f91d-1f3fe.svg","handshake_tone4_tone1":"1faf1-1f3fe-200d-1faf2-1f3fb.svg","handshake_tone4_tone2":"1faf1-1f3fe-200d-1faf2-1f3fc.svg","handshake_tone4_tone3":"1faf1-1f3fe-200d-1faf2-1f3fd.svg","handshake_tone4_tone5":"1faf1-1f3fe-200d-1faf2-1f3ff.svg","handshake_tone5":"1f91d-1f3ff.svg","handshake_tone5_tone1":"1faf1-1f3ff-200d-1faf2-1f3fb.svg","handshake_tone5_tone2":"1faf1-1f3ff-200d-1faf2-1f3fc.svg","handshake_tone5_tone3":"1faf1-1f3ff-200d-1faf2-1f3fd.svg","handshake_tone5_tone4":"1faf1-1f3ff-200d-1faf2-1f3fe.svg","hash":"23-20e3.svg","hatched_chick":"1f425.svg","hatching_chick":"1f423.svg","head_bandage":"1f915.svg","headphones":"1f3a7.svg","headstone":"1faa6.svg","health_worker":"1f9d1-200d-2695-fe0f.svg","health_worker_tone1":"1f9d1-1f3fb-200d-2695-fe0f.svg","health_worker_tone2":"1f9d1-1f3fc-200d-2695-fe0f.svg","health_worker_tone3":"1f9d1-1f3fd-200d-2695-fe0f.svg","health_worker_tone4":"1f9d1-1f3fe-200d-2695-fe0f.svg","health_worker_tone5":"1f9d1-1f3ff-200d-2695-fe0f.svg","hear_no_evil":"1f649.svg","heart":"2764.svg","heart_decoration":"1f49f.svg","heart_exclamation":"2763.svg","heart_eyes":"1f60d.svg","heart_eyes_cat":"1f63b.svg","heart_hands":"1faf6.svg","heart_hands_tone1":"1faf6-1f3fb.svg","heart_hands_tone2":"1faf6-1f3fc.svg","heart_hands_tone3":"1faf6-1f3fd.svg","heart_hands_tone4":"1faf6-1f3fe.svg","heart_hands_tone5":"1faf6-1f3ff.svg","heart_on_fire":"2764-fe0f-200d-1f525.svg","heartbeat":"1f493.svg","heartpulse":"1f497.svg","hearts":"2665.svg","heavy_check_mark":"2714.svg","heavy_division_sign":"2797.svg","heavy_dollar_sign":"1f4b2.svg","heavy_equals_sign":"1f7f0.svg","heavy_minus_sign":"2796.svg","heavy_multiplication_x":"2716.svg","heavy_plus_sign":"2795.svg","hedgehog":"1f994.svg","helicopter":"1f681.svg","helmet_with_cross":"26d1.svg","herb":"1f33f.svg","hibiscus":"1f33a.svg","high_brightness":"1f506.svg","high_heel":"1f460.svg","hiking_boot":"1f97e.svg","hindu_temple":"1f6d5.svg","hippopotamus":"1f99b.svg","hockey":"1f3d2.svg","hole":"1f573.svg","homes":"1f3d8.svg","honey_pot":"1f36f.svg","hook":"1fa9d.svg","horse":"1f434.svg","horse_racing":"1f3c7.svg","horse_racing_tone1":"1f3c7-1f3fb.svg","horse_racing_tone2":"1f3c7-1f3fc.svg","horse_racing_tone3":"1f3c7-1f3fd.svg","horse_racing_tone4":"1f3c7-1f3fe.svg","horse_racing_tone5":"1f3c7-1f3ff.svg","hospital":"1f3e5.svg","hot_face":"1f975.svg","hot_pepper":"1f336.svg","hotdog":"1f32d.svg","hotel":"1f3e8.svg","hotsprings":"2668.svg","hourglass":"231b.svg","hourglass_flowing_sand":"23f3.svg","house":"1f3e0.svg","house_abandoned":"1f3da.svg","house_with_garden":"1f3e1.svg","hugging":"1f917.svg","hushed":"1f62f.svg","hut":"1f6d6.svg","ice_cream":"1f368.svg","ice_cube":"1f9ca.svg","ice_skate":"26f8.svg","icecream":"1f366.svg","id":"1f194.svg","identification_card":"1faaa.svg","ideograph_advantage":"1f250.svg","imp":"1f47f.svg","inbox_tray":"1f4e5.svg","incoming_envelope":"1f4e8.svg","index_pointing_at_the_viewer":"1faf5.svg","index_pointing_at_the_viewer_tone1":"1faf5-1f3fb.svg","index_pointing_at_the_viewer_tone2":"1faf5-1f3fc.svg","index_pointing_at_the_viewer_tone3":"1faf5-1f3fd.svg","index_pointing_at_the_viewer_tone4":"1faf5-1f3fe.svg","index_pointing_at_the_viewer_tone5":"1faf5-1f3ff.svg","infinity":"267e.svg","information_source":"2139.svg","innocent":"1f607.svg","interrobang":"2049.svg","island":"1f3dd.svg","izakaya_lantern":"1f3ee.svg","jack_o_lantern":"1f383.svg","japan":"1f5fe.svg","japanese_castle":"1f3ef.svg","japanese_goblin":"1f47a.svg","japanese_ogre":"1f479.svg","jar":"1fad9.svg","jeans":"1f456.svg","jigsaw":"1f9e9.svg","joy":"1f602.svg","joy_cat":"1f639.svg","joystick":"1f579.svg","judge":"1f9d1-200d-2696-fe0f.svg","judge_tone1":"1f9d1-1f3fb-200d-2696-fe0f.svg","judge_tone2":"1f9d1-1f3fc-200d-2696-fe0f.svg","judge_tone3":"1f9d1-1f3fd-200d-2696-fe0f.svg","judge_tone4":"1f9d1-1f3fe-200d-2696-fe0f.svg","judge_tone5":"1f9d1-1f3ff-200d-2696-fe0f.svg","kaaba":"1f54b.svg","kangaroo":"1f998.svg","key2":"1f5dd.svg","key":"1f511.svg","keyboard":"2328.svg","keycap_ten":"1f51f.svg","kimono":"1f458.svg","kiss":"1f48b.svg","kiss_man_man_tone1":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_man_man_tone1_tone2":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_man_man_tone1_tone3":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_man_man_tone1_tone4":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_man_man_tone1_tone5":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_man_man_tone2":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_man_man_tone2_tone1":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_man_man_tone2_tone3":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_man_man_tone2_tone4":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_man_man_tone2_tone5":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_man_man_tone3":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_man_man_tone3_tone1":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_man_man_tone3_tone2":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_man_man_tone3_tone4":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_man_man_tone3_tone5":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_man_man_tone4":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_man_man_tone4_tone1":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_man_man_tone4_tone2":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_man_man_tone4_tone3":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_man_man_tone4_tone5":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_man_man_tone5":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_man_man_tone5_tone1":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_man_man_tone5_tone2":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_man_man_tone5_tone3":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_man_man_tone5_tone4":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_mm":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.svg","kiss_person_person_tone1_tone2":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc.svg","kiss_person_person_tone1_tone3":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd.svg","kiss_person_person_tone1_tone4":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe.svg","kiss_person_person_tone1_tone5":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff.svg","kiss_person_person_tone2_tone1":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb.svg","kiss_person_person_tone2_tone3":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd.svg","kiss_person_person_tone2_tone4":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe.svg","kiss_person_person_tone2_tone5":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff.svg","kiss_person_person_tone3_tone1":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb.svg","kiss_person_person_tone3_tone2":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc.svg","kiss_person_person_tone3_tone4":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe.svg","kiss_person_person_tone3_tone5":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff.svg","kiss_person_person_tone4_tone1":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb.svg","kiss_person_person_tone4_tone2":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc.svg","kiss_person_person_tone4_tone3":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd.svg","kiss_person_person_tone4_tone5":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff.svg","kiss_person_person_tone5_tone1":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb.svg","kiss_person_person_tone5_tone2":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc.svg","kiss_person_person_tone5_tone3":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd.svg","kiss_person_person_tone5_tone4":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe.svg","kiss_tone1":"1f48f-1f3fb.svg","kiss_tone2":"1f48f-1f3fc.svg","kiss_tone3":"1f48f-1f3fd.svg","kiss_tone4":"1f48f-1f3fe.svg","kiss_tone5":"1f48f-1f3ff.svg","kiss_woman_man":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.svg","kiss_woman_man_tone1":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_woman_man_tone1_tone2":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_woman_man_tone1_tone3":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_woman_man_tone1_tone4":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_woman_man_tone1_tone5":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_woman_man_tone2":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_woman_man_tone2_tone1":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_woman_man_tone2_tone3":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_woman_man_tone2_tone4":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_woman_man_tone2_tone5":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_woman_man_tone3":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_woman_man_tone3_tone1":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_woman_man_tone3_tone2":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_woman_man_tone3_tone4":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_woman_man_tone3_tone5":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_woman_man_tone4":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_woman_man_tone4_tone1":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_woman_man_tone4_tone2":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_woman_man_tone4_tone3":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_woman_man_tone4_tone5":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_woman_man_tone5":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg","kiss_woman_man_tone5_tone1":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg","kiss_woman_man_tone5_tone2":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg","kiss_woman_man_tone5_tone3":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg","kiss_woman_man_tone5_tone4":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg","kiss_woman_woman_tone1":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg","kiss_woman_woman_tone1_tone2":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg","kiss_woman_woman_tone1_tone3":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg","kiss_woman_woman_tone1_tone4":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg","kiss_woman_woman_tone1_tone5":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg","kiss_woman_woman_tone2":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg","kiss_woman_woman_tone2_tone1":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg","kiss_woman_woman_tone2_tone3":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg","kiss_woman_woman_tone2_tone4":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg","kiss_woman_woman_tone2_tone5":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg","kiss_woman_woman_tone3":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg","kiss_woman_woman_tone3_tone1":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg","kiss_woman_woman_tone3_tone2":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg","kiss_woman_woman_tone3_tone4":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg","kiss_woman_woman_tone3_tone5":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg","kiss_woman_woman_tone4":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg","kiss_woman_woman_tone4_tone1":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg","kiss_woman_woman_tone4_tone2":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg","kiss_woman_woman_tone4_tone3":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg","kiss_woman_woman_tone4_tone5":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg","kiss_woman_woman_tone5":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg","kiss_woman_woman_tone5_tone1":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg","kiss_woman_woman_tone5_tone2":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg","kiss_woman_woman_tone5_tone3":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg","kiss_woman_woman_tone5_tone4":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg","kiss_ww":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.svg","kissing":"1f617.svg","kissing_cat":"1f63d.svg","kissing_closed_eyes":"1f61a.svg","kissing_heart":"1f618.svg","kissing_smiling_eyes":"1f619.svg","kite":"1fa81.svg","kiwi":"1f95d.svg","knife":"1f52a.svg","knot":"1faa2.svg","koala":"1f428.svg","koko":"1f201.svg","lab_coat":"1f97c.svg","label":"1f3f7.svg","lacrosse":"1f94d.svg","ladder":"1fa9c.svg","lady_beetle":"1f41e.svg","large_blue_diamond":"1f537.svg","large_orange_diamond":"1f536.svg","last_quarter_moon":"1f317.svg","last_quarter_moon_with_face":"1f31c.svg","laughing":"1f606.svg","leafy_green":"1f96c.svg","leaves":"1f343.svg","ledger":"1f4d2.svg","left_facing_fist":"1f91b.svg","left_facing_fist_tone1":"1f91b-1f3fb.svg","left_facing_fist_tone2":"1f91b-1f3fc.svg","left_facing_fist_tone3":"1f91b-1f3fd.svg","left_facing_fist_tone4":"1f91b-1f3fe.svg","left_facing_fist_tone5":"1f91b-1f3ff.svg","left_luggage":"1f6c5.svg","left_right_arrow":"2194.svg","leftwards_arrow_with_hook":"21a9.svg","leftwards_hand":"1faf2.svg","leftwards_hand_tone1":"1faf2-1f3fb.svg","leftwards_hand_tone2":"1faf2-1f3fc.svg","leftwards_hand_tone3":"1faf2-1f3fd.svg","leftwards_hand_tone4":"1faf2-1f3fe.svg","leftwards_hand_tone5":"1faf2-1f3ff.svg","leg":"1f9b5.svg","leg_tone1":"1f9b5-1f3fb.svg","leg_tone2":"1f9b5-1f3fc.svg","leg_tone3":"1f9b5-1f3fd.svg","leg_tone4":"1f9b5-1f3fe.svg","leg_tone5":"1f9b5-1f3ff.svg","lemon":"1f34b.svg","leo":"264c.svg","leopard":"1f406.svg","level_slider":"1f39a.svg","levitate":"1f574.svg","levitate_tone1":"1f574-1f3fb.svg","levitate_tone2":"1f574-1f3fc.svg","levitate_tone3":"1f574-1f3fd.svg","levitate_tone4":"1f574-1f3fe.svg","levitate_tone5":"1f574-1f3ff.svg","libra":"264e.svg","light_rail":"1f688.svg","link":"1f517.svg","lion_face":"1f981.svg","lips":"1f444.svg","lipstick":"1f484.svg","lizard":"1f98e.svg","llama":"1f999.svg","lobster":"1f99e.svg","lock":"1f512.svg","lock_with_ink_pen":"1f50f.svg","lollipop":"1f36d.svg","long_drum":"1fa98.svg","loop":"27bf.svg","lotus":"1fab7.svg","loud_sound":"1f50a.svg","loudspeaker":"1f4e2.svg","love_hotel":"1f3e9.svg","love_letter":"1f48c.svg","love_you_gesture":"1f91f.svg","love_you_gesture_tone1":"1f91f-1f3fb.svg","love_you_gesture_tone2":"1f91f-1f3fc.svg","love_you_gesture_tone3":"1f91f-1f3fd.svg","love_you_gesture_tone4":"1f91f-1f3fe.svg","love_you_gesture_tone5":"1f91f-1f3ff.svg","low_battery":"1faab.svg","low_brightness":"1f505.svg","luggage":"1f9f3.svg","lungs":"1fac1.svg","lying_face":"1f925.svg","m":"24c2.svg","mag":"1f50d.svg","mag_right":"1f50e.svg","mage":"1f9d9.svg","mage_tone1":"1f9d9-1f3fb.svg","mage_tone2":"1f9d9-1f3fc.svg","mage_tone3":"1f9d9-1f3fd.svg","mage_tone4":"1f9d9-1f3fe.svg","mage_tone5":"1f9d9-1f3ff.svg","magic_wand":"1fa84.svg","magnet":"1f9f2.svg","mahjong":"1f004.svg","mailbox":"1f4eb.svg","mailbox_closed":"1f4ea.svg","mailbox_with_mail":"1f4ec.svg","mailbox_with_no_mail":"1f4ed.svg","male_sign":"2642.svg","mammoth":"1f9a3.svg","man":"1f468.svg","man_artist":"1f468-200d-1f3a8.svg","man_artist_tone1":"1f468-1f3fb-200d-1f3a8.svg","man_artist_tone2":"1f468-1f3fc-200d-1f3a8.svg","man_artist_tone3":"1f468-1f3fd-200d-1f3a8.svg","man_artist_tone4":"1f468-1f3fe-200d-1f3a8.svg","man_artist_tone5":"1f468-1f3ff-200d-1f3a8.svg","man_astronaut":"1f468-200d-1f680.svg","man_astronaut_tone1":"1f468-1f3fb-200d-1f680.svg","man_astronaut_tone2":"1f468-1f3fc-200d-1f680.svg","man_astronaut_tone3":"1f468-1f3fd-200d-1f680.svg","man_astronaut_tone4":"1f468-1f3fe-200d-1f680.svg","man_astronaut_tone5":"1f468-1f3ff-200d-1f680.svg","man_bald":"1f468-200d-1f9b2.svg","man_bald_tone1":"1f468-1f3fb-200d-1f9b2.svg","man_bald_tone2":"1f468-1f3fc-200d-1f9b2.svg","man_bald_tone3":"1f468-1f3fd-200d-1f9b2.svg","man_bald_tone4":"1f468-1f3fe-200d-1f9b2.svg","man_bald_tone5":"1f468-1f3ff-200d-1f9b2.svg","man_beard":"1f9d4-200d-2642-fe0f.svg","man_biking":"1f6b4-200d-2642-fe0f.svg","man_biking_tone1":"1f6b4-1f3fb-200d-2642-fe0f.svg","man_biking_tone2":"1f6b4-1f3fc-200d-2642-fe0f.svg","man_biking_tone3":"1f6b4-1f3fd-200d-2642-fe0f.svg","man_biking_tone4":"1f6b4-1f3fe-200d-2642-fe0f.svg","man_biking_tone5":"1f6b4-1f3ff-200d-2642-fe0f.svg","man_bouncing_ball":"26f9-fe0f-200d-2642-fe0f.svg","man_bouncing_ball_tone1":"26f9-1f3fb-200d-2642-fe0f.svg","man_bouncing_ball_tone2":"26f9-1f3fc-200d-2642-fe0f.svg","man_bouncing_ball_tone3":"26f9-1f3fd-200d-2642-fe0f.svg","man_bouncing_ball_tone4":"26f9-1f3fe-200d-2642-fe0f.svg","man_bouncing_ball_tone5":"26f9-1f3ff-200d-2642-fe0f.svg","man_bowing":"1f647-200d-2642-fe0f.svg","man_bowing_tone1":"1f647-1f3fb-200d-2642-fe0f.svg","man_bowing_tone2":"1f647-1f3fc-200d-2642-fe0f.svg","man_bowing_tone3":"1f647-1f3fd-200d-2642-fe0f.svg","man_bowing_tone4":"1f647-1f3fe-200d-2642-fe0f.svg","man_bowing_tone5":"1f647-1f3ff-200d-2642-fe0f.svg","man_cartwheeling":"1f938-200d-2642-fe0f.svg","man_cartwheeling_tone1":"1f938-1f3fb-200d-2642-fe0f.svg","man_cartwheeling_tone2":"1f938-1f3fc-200d-2642-fe0f.svg","man_cartwheeling_tone3":"1f938-1f3fd-200d-2642-fe0f.svg","man_cartwheeling_tone4":"1f938-1f3fe-200d-2642-fe0f.svg","man_cartwheeling_tone5":"1f938-1f3ff-200d-2642-fe0f.svg","man_climbing":"1f9d7-200d-2642-fe0f.svg","man_climbing_tone1":"1f9d7-1f3fb-200d-2642-fe0f.svg","man_climbing_tone2":"1f9d7-1f3fc-200d-2642-fe0f.svg","man_climbing_tone3":"1f9d7-1f3fd-200d-2642-fe0f.svg","man_climbing_tone4":"1f9d7-1f3fe-200d-2642-fe0f.svg","man_climbing_tone5":"1f9d7-1f3ff-200d-2642-fe0f.svg","man_construction_worker":"1f477-200d-2642-fe0f.svg","man_construction_worker_tone1":"1f477-1f3fb-200d-2642-fe0f.svg","man_construction_worker_tone2":"1f477-1f3fc-200d-2642-fe0f.svg","man_construction_worker_tone3":"1f477-1f3fd-200d-2642-fe0f.svg","man_construction_worker_tone4":"1f477-1f3fe-200d-2642-fe0f.svg","man_construction_worker_tone5":"1f477-1f3ff-200d-2642-fe0f.svg","man_cook":"1f468-200d-1f373.svg","man_cook_tone1":"1f468-1f3fb-200d-1f373.svg","man_cook_tone2":"1f468-1f3fc-200d-1f373.svg","man_cook_tone3":"1f468-1f3fd-200d-1f373.svg","man_cook_tone4":"1f468-1f3fe-200d-1f373.svg","man_cook_tone5":"1f468-1f3ff-200d-1f373.svg","man_curly_haired":"1f468-200d-1f9b1.svg","man_curly_haired_tone1":"1f468-1f3fb-200d-1f9b1.svg","man_curly_haired_tone2":"1f468-1f3fc-200d-1f9b1.svg","man_curly_haired_tone3":"1f468-1f3fd-200d-1f9b1.svg","man_curly_haired_tone4":"1f468-1f3fe-200d-1f9b1.svg","man_curly_haired_tone5":"1f468-1f3ff-200d-1f9b1.svg","man_dancing":"1f57a.svg","man_dancing_tone1":"1f57a-1f3fb.svg","man_dancing_tone2":"1f57a-1f3fc.svg","man_dancing_tone3":"1f57a-1f3fd.svg","man_dancing_tone4":"1f57a-1f3fe.svg","man_dancing_tone5":"1f57a-1f3ff.svg","man_detective":"1f575-fe0f-200d-2642-fe0f.svg","man_detective_tone1":"1f575-1f3fb-200d-2642-fe0f.svg","man_detective_tone2":"1f575-1f3fc-200d-2642-fe0f.svg","man_detective_tone3":"1f575-1f3fd-200d-2642-fe0f.svg","man_detective_tone4":"1f575-1f3fe-200d-2642-fe0f.svg","man_detective_tone5":"1f575-1f3ff-200d-2642-fe0f.svg","man_elf":"1f9dd-200d-2642-fe0f.svg","man_elf_tone1":"1f9dd-1f3fb-200d-2642-fe0f.svg","man_elf_tone2":"1f9dd-1f3fc-200d-2642-fe0f.svg","man_elf_tone3":"1f9dd-1f3fd-200d-2642-fe0f.svg","man_elf_tone4":"1f9dd-1f3fe-200d-2642-fe0f.svg","man_elf_tone5":"1f9dd-1f3ff-200d-2642-fe0f.svg","man_facepalming":"1f926-200d-2642-fe0f.svg","man_facepalming_tone1":"1f926-1f3fb-200d-2642-fe0f.svg","man_facepalming_tone2":"1f926-1f3fc-200d-2642-fe0f.svg","man_facepalming_tone3":"1f926-1f3fd-200d-2642-fe0f.svg","man_facepalming_tone4":"1f926-1f3fe-200d-2642-fe0f.svg","man_facepalming_tone5":"1f926-1f3ff-200d-2642-fe0f.svg","man_factory_worker":"1f468-200d-1f3ed.svg","man_factory_worker_tone1":"1f468-1f3fb-200d-1f3ed.svg","man_factory_worker_tone2":"1f468-1f3fc-200d-1f3ed.svg","man_factory_worker_tone3":"1f468-1f3fd-200d-1f3ed.svg","man_factory_worker_tone4":"1f468-1f3fe-200d-1f3ed.svg","man_factory_worker_tone5":"1f468-1f3ff-200d-1f3ed.svg","man_fairy":"1f9da-200d-2642-fe0f.svg","man_fairy_tone1":"1f9da-1f3fb-200d-2642-fe0f.svg","man_fairy_tone2":"1f9da-1f3fc-200d-2642-fe0f.svg","man_fairy_tone3":"1f9da-1f3fd-200d-2642-fe0f.svg","man_fairy_tone4":"1f9da-1f3fe-200d-2642-fe0f.svg","man_fairy_tone5":"1f9da-1f3ff-200d-2642-fe0f.svg","man_farmer":"1f468-200d-1f33e.svg","man_farmer_tone1":"1f468-1f3fb-200d-1f33e.svg","man_farmer_tone2":"1f468-1f3fc-200d-1f33e.svg","man_farmer_tone3":"1f468-1f3fd-200d-1f33e.svg","man_farmer_tone4":"1f468-1f3fe-200d-1f33e.svg","man_farmer_tone5":"1f468-1f3ff-200d-1f33e.svg","man_feeding_baby":"1f468-200d-1f37c.svg","man_feeding_baby_tone1":"1f468-1f3fb-200d-1f37c.svg","man_feeding_baby_tone2":"1f468-1f3fc-200d-1f37c.svg","man_feeding_baby_tone3":"1f468-1f3fd-200d-1f37c.svg","man_feeding_baby_tone4":"1f468-1f3fe-200d-1f37c.svg","man_feeding_baby_tone5":"1f468-1f3ff-200d-1f37c.svg","man_firefighter":"1f468-200d-1f692.svg","man_firefighter_tone1":"1f468-1f3fb-200d-1f692.svg","man_firefighter_tone2":"1f468-1f3fc-200d-1f692.svg","man_firefighter_tone3":"1f468-1f3fd-200d-1f692.svg","man_firefighter_tone4":"1f468-1f3fe-200d-1f692.svg","man_firefighter_tone5":"1f468-1f3ff-200d-1f692.svg","man_frowning":"1f64d-200d-2642-fe0f.svg","man_frowning_tone1":"1f64d-1f3fb-200d-2642-fe0f.svg","man_frowning_tone2":"1f64d-1f3fc-200d-2642-fe0f.svg","man_frowning_tone3":"1f64d-1f3fd-200d-2642-fe0f.svg","man_frowning_tone4":"1f64d-1f3fe-200d-2642-fe0f.svg","man_frowning_tone5":"1f64d-1f3ff-200d-2642-fe0f.svg","man_genie":"1f9de-200d-2642-fe0f.svg","man_gesturing_no":"1f645-200d-2642-fe0f.svg","man_gesturing_no_tone1":"1f645-1f3fb-200d-2642-fe0f.svg","man_gesturing_no_tone2":"1f645-1f3fc-200d-2642-fe0f.svg","man_gesturing_no_tone3":"1f645-1f3fd-200d-2642-fe0f.svg","man_gesturing_no_tone4":"1f645-1f3fe-200d-2642-fe0f.svg","man_gesturing_no_tone5":"1f645-1f3ff-200d-2642-fe0f.svg","man_gesturing_ok":"1f646-200d-2642-fe0f.svg","man_gesturing_ok_tone1":"1f646-1f3fb-200d-2642-fe0f.svg","man_gesturing_ok_tone2":"1f646-1f3fc-200d-2642-fe0f.svg","man_gesturing_ok_tone3":"1f646-1f3fd-200d-2642-fe0f.svg","man_gesturing_ok_tone4":"1f646-1f3fe-200d-2642-fe0f.svg","man_gesturing_ok_tone5":"1f646-1f3ff-200d-2642-fe0f.svg","man_getting_face_massage":"1f486-200d-2642-fe0f.svg","man_getting_face_massage_tone1":"1f486-1f3fb-200d-2642-fe0f.svg","man_getting_face_massage_tone2":"1f486-1f3fc-200d-2642-fe0f.svg","man_getting_face_massage_tone3":"1f486-1f3fd-200d-2642-fe0f.svg","man_getting_face_massage_tone4":"1f486-1f3fe-200d-2642-fe0f.svg","man_getting_face_massage_tone5":"1f486-1f3ff-200d-2642-fe0f.svg","man_getting_haircut":"1f487-200d-2642-fe0f.svg","man_getting_haircut_tone1":"1f487-1f3fb-200d-2642-fe0f.svg","man_getting_haircut_tone2":"1f487-1f3fc-200d-2642-fe0f.svg","man_getting_haircut_tone3":"1f487-1f3fd-200d-2642-fe0f.svg","man_getting_haircut_tone4":"1f487-1f3fe-200d-2642-fe0f.svg","man_getting_haircut_tone5":"1f487-1f3ff-200d-2642-fe0f.svg","man_golfing":"1f3cc-fe0f-200d-2642-fe0f.svg","man_golfing_tone1":"1f3cc-1f3fb-200d-2642-fe0f.svg","man_golfing_tone2":"1f3cc-1f3fc-200d-2642-fe0f.svg","man_golfing_tone3":"1f3cc-1f3fd-200d-2642-fe0f.svg","man_golfing_tone4":"1f3cc-1f3fe-200d-2642-fe0f.svg","man_golfing_tone5":"1f3cc-1f3ff-200d-2642-fe0f.svg","man_guard":"1f482-200d-2642-fe0f.svg","man_guard_tone1":"1f482-1f3fb-200d-2642-fe0f.svg","man_guard_tone2":"1f482-1f3fc-200d-2642-fe0f.svg","man_guard_tone3":"1f482-1f3fd-200d-2642-fe0f.svg","man_guard_tone4":"1f482-1f3fe-200d-2642-fe0f.svg","man_guard_tone5":"1f482-1f3ff-200d-2642-fe0f.svg","man_health_worker":"1f468-200d-2695-fe0f.svg","man_health_worker_tone1":"1f468-1f3fb-200d-2695-fe0f.svg","man_health_worker_tone2":"1f468-1f3fc-200d-2695-fe0f.svg","man_health_worker_tone3":"1f468-1f3fd-200d-2695-fe0f.svg","man_health_worker_tone4":"1f468-1f3fe-200d-2695-fe0f.svg","man_health_worker_tone5":"1f468-1f3ff-200d-2695-fe0f.svg","man_in_lotus_position":"1f9d8-200d-2642-fe0f.svg","man_in_lotus_position_tone1":"1f9d8-1f3fb-200d-2642-fe0f.svg","man_in_lotus_position_tone2":"1f9d8-1f3fc-200d-2642-fe0f.svg","man_in_lotus_position_tone3":"1f9d8-1f3fd-200d-2642-fe0f.svg","man_in_lotus_position_tone4":"1f9d8-1f3fe-200d-2642-fe0f.svg","man_in_lotus_position_tone5":"1f9d8-1f3ff-200d-2642-fe0f.svg","man_in_manual_wheelchair":"1f468-200d-1f9bd.svg","man_in_manual_wheelchair_tone1":"1f468-1f3fb-200d-1f9bd.svg","man_in_manual_wheelchair_tone2":"1f468-1f3fc-200d-1f9bd.svg","man_in_manual_wheelchair_tone3":"1f468-1f3fd-200d-1f9bd.svg","man_in_manual_wheelchair_tone4":"1f468-1f3fe-200d-1f9bd.svg","man_in_manual_wheelchair_tone5":"1f468-1f3ff-200d-1f9bd.svg","man_in_motorized_wheelchair":"1f468-200d-1f9bc.svg","man_in_motorized_wheelchair_tone1":"1f468-1f3fb-200d-1f9bc.svg","man_in_motorized_wheelchair_tone2":"1f468-1f3fc-200d-1f9bc.svg","man_in_motorized_wheelchair_tone3":"1f468-1f3fd-200d-1f9bc.svg","man_in_motorized_wheelchair_tone4":"1f468-1f3fe-200d-1f9bc.svg","man_in_motorized_wheelchair_tone5":"1f468-1f3ff-200d-1f9bc.svg","man_in_santa_hat":"1f468-200d-1f384.svg","man_in_santa_hat_tone1":"1f468-1f3fb-200d-1f384.svg","man_in_santa_hat_tone2":"1f468-1f3fc-200d-1f384.svg","man_in_santa_hat_tone3":"1f468-1f3fd-200d-1f384.svg","man_in_santa_hat_tone4":"1f468-1f3fe-200d-1f384.svg","man_in_santa_hat_tone5":"1f469-1f3ff-200d-1f384.svg","man_in_steamy_room":"1f9d6-200d-2642-fe0f.svg","man_in_steamy_room_tone1":"1f9d6-1f3fb-200d-2642-fe0f.svg","man_in_steamy_room_tone2":"1f9d6-1f3fc-200d-2642-fe0f.svg","man_in_steamy_room_tone3":"1f9d6-1f3fd-200d-2642-fe0f.svg","man_in_steamy_room_tone4":"1f9d6-1f3fe-200d-2642-fe0f.svg","man_in_steamy_room_tone5":"1f9d6-1f3ff-200d-2642-fe0f.svg","man_in_tuxedo":"1f935-200d-2642-fe0f.svg","man_in_tuxedo_tone1":"1f935-1f3fb-200d-2642-fe0f.svg","man_in_tuxedo_tone2":"1f935-1f3fc-200d-2642-fe0f.svg","man_in_tuxedo_tone3":"1f935-1f3fd-200d-2642-fe0f.svg","man_in_tuxedo_tone4":"1f935-1f3fe-200d-2642-fe0f.svg","man_in_tuxedo_tone5":"1f935-1f3ff-200d-2642-fe0f.svg","man_judge":"1f468-200d-2696-fe0f.svg","man_judge_tone1":"1f468-1f3fb-200d-2696-fe0f.svg","man_judge_tone2":"1f468-1f3fc-200d-2696-fe0f.svg","man_judge_tone3":"1f468-1f3fd-200d-2696-fe0f.svg","man_judge_tone4":"1f468-1f3fe-200d-2696-fe0f.svg","man_judge_tone5":"1f468-1f3ff-200d-2696-fe0f.svg","man_juggling":"1f939-200d-2642-fe0f.svg","man_juggling_tone1":"1f939-1f3fb-200d-2642-fe0f.svg","man_juggling_tone2":"1f939-1f3fc-200d-2642-fe0f.svg","man_juggling_tone3":"1f939-1f3fd-200d-2642-fe0f.svg","man_juggling_tone4":"1f939-1f3fe-200d-2642-fe0f.svg","man_juggling_tone5":"1f939-1f3ff-200d-2642-fe0f.svg","man_kneeling":"1f9ce-200d-2642-fe0f.svg","man_kneeling_tone1":"1f9ce-1f3fb-200d-2642-fe0f.svg","man_kneeling_tone2":"1f9ce-1f3fc-200d-2642-fe0f.svg","man_kneeling_tone3":"1f9ce-1f3fd-200d-2642-fe0f.svg","man_kneeling_tone4":"1f9ce-1f3fe-200d-2642-fe0f.svg","man_kneeling_tone5":"1f9ce-1f3ff-200d-2642-fe0f.svg","man_lifting_weights":"1f3cb-fe0f-200d-2642-fe0f.svg","man_lifting_weights_tone1":"1f3cb-1f3fb-200d-2642-fe0f.svg","man_lifting_weights_tone2":"1f3cb-1f3fc-200d-2642-fe0f.svg","man_lifting_weights_tone3":"1f3cb-1f3fd-200d-2642-fe0f.svg","man_lifting_weights_tone4":"1f3cb-1f3fe-200d-2642-fe0f.svg","man_lifting_weights_tone5":"1f3cb-1f3ff-200d-2642-fe0f.svg","man_mage":"1f9d9-200d-2642-fe0f.svg","man_mage_tone1":"1f9d9-1f3fb-200d-2642-fe0f.svg","man_mage_tone2":"1f9d9-1f3fc-200d-2642-fe0f.svg","man_mage_tone3":"1f9d9-1f3fd-200d-2642-fe0f.svg","man_mage_tone4":"1f9d9-1f3fe-200d-2642-fe0f.svg","man_mage_tone5":"1f9d9-1f3ff-200d-2642-fe0f.svg","man_mechanic":"1f468-200d-1f527.svg","man_mechanic_tone1":"1f468-1f3fb-200d-1f527.svg","man_mechanic_tone2":"1f468-1f3fc-200d-1f527.svg","man_mechanic_tone3":"1f468-1f3fd-200d-1f527.svg","man_mechanic_tone4":"1f468-1f3fe-200d-1f527.svg","man_mechanic_tone5":"1f468-1f3ff-200d-1f527.svg","man_mountain_biking":"1f6b5-200d-2642-fe0f.svg","man_mountain_biking_tone1":"1f6b5-1f3fb-200d-2642-fe0f.svg","man_mountain_biking_tone2":"1f6b5-1f3fc-200d-2642-fe0f.svg","man_mountain_biking_tone3":"1f6b5-1f3fd-200d-2642-fe0f.svg","man_mountain_biking_tone4":"1f6b5-1f3fe-200d-2642-fe0f.svg","man_mountain_biking_tone5":"1f6b5-1f3ff-200d-2642-fe0f.svg","man_office_worker":"1f468-200d-1f4bc.svg","man_office_worker_tone1":"1f468-1f3fb-200d-1f4bc.svg","man_office_worker_tone2":"1f468-1f3fc-200d-1f4bc.svg","man_office_worker_tone3":"1f468-1f3fd-200d-1f4bc.svg","man_office_worker_tone4":"1f468-1f3fe-200d-1f4bc.svg","man_office_worker_tone5":"1f468-1f3ff-200d-1f4bc.svg","man_pilot":"1f468-200d-2708-fe0f.svg","man_pilot_tone1":"1f468-1f3fb-200d-2708-fe0f.svg","man_pilot_tone2":"1f468-1f3fc-200d-2708-fe0f.svg","man_pilot_tone3":"1f468-1f3fd-200d-2708-fe0f.svg","man_pilot_tone4":"1f468-1f3fe-200d-2708-fe0f.svg","man_pilot_tone5":"1f468-1f3ff-200d-2708-fe0f.svg","man_playing_handball":"1f93e-200d-2642-fe0f.svg","man_playing_handball_tone1":"1f93e-1f3fb-200d-2642-fe0f.svg","man_playing_handball_tone2":"1f93e-1f3fc-200d-2642-fe0f.svg","man_playing_handball_tone3":"1f93e-1f3fd-200d-2642-fe0f.svg","man_playing_handball_tone4":"1f93e-1f3fe-200d-2642-fe0f.svg","man_playing_handball_tone5":"1f93e-1f3ff-200d-2642-fe0f.svg","man_playing_water_polo":"1f93d-200d-2642-fe0f.svg","man_playing_water_polo_tone1":"1f93d-1f3fb-200d-2642-fe0f.svg","man_playing_water_polo_tone2":"1f93d-1f3fc-200d-2642-fe0f.svg","man_playing_water_polo_tone3":"1f93d-1f3fd-200d-2642-fe0f.svg","man_playing_water_polo_tone4":"1f93d-1f3fe-200d-2642-fe0f.svg","man_playing_water_polo_tone5":"1f93d-1f3ff-200d-2642-fe0f.svg","man_police_officer":"1f46e-200d-2642-fe0f.svg","man_police_officer_tone1":"1f46e-1f3fb-200d-2642-fe0f.svg","man_police_officer_tone2":"1f46e-1f3fc-200d-2642-fe0f.svg","man_police_officer_tone3":"1f46e-1f3fd-200d-2642-fe0f.svg","man_police_officer_tone4":"1f46e-1f3fe-200d-2642-fe0f.svg","man_police_officer_tone5":"1f46e-1f3ff-200d-2642-fe0f.svg","man_pouting":"1f64e-200d-2642-fe0f.svg","man_pouting_tone1":"1f64e-1f3fb-200d-2642-fe0f.svg","man_pouting_tone2":"1f64e-1f3fc-200d-2642-fe0f.svg","man_pouting_tone3":"1f64e-1f3fd-200d-2642-fe0f.svg","man_pouting_tone4":"1f64e-1f3fe-200d-2642-fe0f.svg","man_pouting_tone5":"1f64e-1f3ff-200d-2642-fe0f.svg","man_raising_hand":"1f64b-200d-2642-fe0f.svg","man_raising_hand_tone1":"1f64b-1f3fb-200d-2642-fe0f.svg","man_raising_hand_tone2":"1f64b-1f3fc-200d-2642-fe0f.svg","man_raising_hand_tone3":"1f64b-1f3fd-200d-2642-fe0f.svg","man_raising_hand_tone4":"1f64b-1f3fe-200d-2642-fe0f.svg","man_raising_hand_tone5":"1f64b-1f3ff-200d-2642-fe0f.svg","man_red_haired":"1f468-200d-1f9b0.svg","man_red_haired_tone1":"1f468-1f3fb-200d-1f9b0.svg","man_red_haired_tone2":"1f468-1f3fc-200d-1f9b0.svg","man_red_haired_tone3":"1f468-1f3fd-200d-1f9b0.svg","man_red_haired_tone4":"1f468-1f3fe-200d-1f9b0.svg","man_red_haired_tone5":"1f468-1f3ff-200d-1f9b0.svg","man_rowing_boat":"1f6a3-200d-2642-fe0f.svg","man_rowing_boat_tone1":"1f6a3-1f3fb-200d-2642-fe0f.svg","man_rowing_boat_tone2":"1f6a3-1f3fc-200d-2642-fe0f.svg","man_rowing_boat_tone3":"1f6a3-1f3fd-200d-2642-fe0f.svg","man_rowing_boat_tone4":"1f6a3-1f3fe-200d-2642-fe0f.svg","man_rowing_boat_tone5":"1f6a3-1f3ff-200d-2642-fe0f.svg","man_running":"1f3c3-200d-2642-fe0f.svg","man_running_tone1":"1f3c3-1f3fb-200d-2642-fe0f.svg","man_running_tone2":"1f3c3-1f3fc-200d-2642-fe0f.svg","man_running_tone3":"1f3c3-1f3fd-200d-2642-fe0f.svg","man_running_tone4":"1f3c3-1f3fe-200d-2642-fe0f.svg","man_running_tone5":"1f3c3-1f3ff-200d-2642-fe0f.svg","man_scientist":"1f468-200d-1f52c.svg","man_scientist_tone1":"1f468-1f3fb-200d-1f52c.svg","man_scientist_tone2":"1f468-1f3fc-200d-1f52c.svg","man_scientist_tone3":"1f468-1f3fd-200d-1f52c.svg","man_scientist_tone4":"1f468-1f3fe-200d-1f52c.svg","man_scientist_tone5":"1f468-1f3ff-200d-1f52c.svg","man_shrugging":"1f937-200d-2642-fe0f.svg","man_shrugging_tone1":"1f937-1f3fb-200d-2642-fe0f.svg","man_shrugging_tone2":"1f937-1f3fc-200d-2642-fe0f.svg","man_shrugging_tone3":"1f937-1f3fd-200d-2642-fe0f.svg","man_shrugging_tone4":"1f937-1f3fe-200d-2642-fe0f.svg","man_shrugging_tone5":"1f937-1f3ff-200d-2642-fe0f.svg","man_singer":"1f468-200d-1f3a4.svg","man_singer_tone1":"1f468-1f3fb-200d-1f3a4.svg","man_singer_tone2":"1f468-1f3fc-200d-1f3a4.svg","man_singer_tone3":"1f468-1f3fd-200d-1f3a4.svg","man_singer_tone4":"1f468-1f3fe-200d-1f3a4.svg","man_singer_tone5":"1f468-1f3ff-200d-1f3a4.svg","man_standing":"1f9cd-200d-2642-fe0f.svg","man_standing_tone1":"1f9cd-1f3fb-200d-2642-fe0f.svg","man_standing_tone2":"1f9cd-1f3fc-200d-2642-fe0f.svg","man_standing_tone3":"1f9cd-1f3fd-200d-2642-fe0f.svg","man_standing_tone4":"1f9cd-1f3fe-200d-2642-fe0f.svg","man_standing_tone5":"1f9cd-1f3ff-200d-2642-fe0f.svg","man_student":"1f468-200d-1f393.svg","man_student_tone1":"1f468-1f3fb-200d-1f393.svg","man_student_tone2":"1f468-1f3fc-200d-1f393.svg","man_student_tone3":"1f468-1f3fd-200d-1f393.svg","man_student_tone4":"1f468-1f3fe-200d-1f393.svg","man_student_tone5":"1f468-1f3ff-200d-1f393.svg","man_superhero":"1f9b8-200d-2642-fe0f.svg","man_superhero_tone1":"1f9b8-1f3fb-200d-2642-fe0f.svg","man_superhero_tone2":"1f9b8-1f3fc-200d-2642-fe0f.svg","man_superhero_tone3":"1f9b8-1f3fd-200d-2642-fe0f.svg","man_superhero_tone4":"1f9b8-1f3fe-200d-2642-fe0f.svg","man_superhero_tone5":"1f9b8-1f3ff-200d-2642-fe0f.svg","man_supervillain":"1f9b9-200d-2642-fe0f.svg","man_supervillain_tone1":"1f9b9-1f3fb-200d-2642-fe0f.svg","man_supervillain_tone2":"1f9b9-1f3fc-200d-2642-fe0f.svg","man_supervillain_tone3":"1f9b9-1f3fd-200d-2642-fe0f.svg","man_supervillain_tone4":"1f9b9-1f3fe-200d-2642-fe0f.svg","man_supervillain_tone5":"1f9b9-1f3ff-200d-2642-fe0f.svg","man_surfing":"1f3c4-200d-2642-fe0f.svg","man_surfing_tone1":"1f3c4-1f3fb-200d-2642-fe0f.svg","man_surfing_tone2":"1f3c4-1f3fc-200d-2642-fe0f.svg","man_surfing_tone3":"1f3c4-1f3fd-200d-2642-fe0f.svg","man_surfing_tone4":"1f3c4-1f3fe-200d-2642-fe0f.svg","man_surfing_tone5":"1f3c4-1f3ff-200d-2642-fe0f.svg","man_swimming":"1f3ca-200d-2642-fe0f.svg","man_swimming_tone1":"1f3ca-1f3fb-200d-2642-fe0f.svg","man_swimming_tone2":"1f3ca-1f3fc-200d-2642-fe0f.svg","man_swimming_tone3":"1f3ca-1f3fd-200d-2642-fe0f.svg","man_swimming_tone4":"1f3ca-1f3fe-200d-2642-fe0f.svg","man_swimming_tone5":"1f3ca-1f3ff-200d-2642-fe0f.svg","man_teacher":"1f468-200d-1f3eb.svg","man_teacher_tone1":"1f468-1f3fb-200d-1f3eb.svg","man_teacher_tone2":"1f468-1f3fc-200d-1f3eb.svg","man_teacher_tone3":"1f468-1f3fd-200d-1f3eb.svg","man_teacher_tone4":"1f468-1f3fe-200d-1f3eb.svg","man_teacher_tone5":"1f468-1f3ff-200d-1f3eb.svg","man_technologist":"1f468-200d-1f4bb.svg","man_technologist_tone1":"1f468-1f3fb-200d-1f4bb.svg","man_technologist_tone2":"1f468-1f3fc-200d-1f4bb.svg","man_technologist_tone3":"1f468-1f3fd-200d-1f4bb.svg","man_technologist_tone4":"1f468-1f3fe-200d-1f4bb.svg","man_technologist_tone5":"1f468-1f3ff-200d-1f4bb.svg","man_tipping_hand":"1f481-200d-2642-fe0f.svg","man_tipping_hand_tone1":"1f481-1f3fb-200d-2642-fe0f.svg","man_tipping_hand_tone2":"1f481-1f3fc-200d-2642-fe0f.svg","man_tipping_hand_tone3":"1f481-1f3fd-200d-2642-fe0f.svg","man_tipping_hand_tone4":"1f481-1f3fe-200d-2642-fe0f.svg","man_tipping_hand_tone5":"1f481-1f3ff-200d-2642-fe0f.svg","man_tone1":"1f468-1f3fb.svg","man_tone1_beard":"1f9d4-1f3fb-200d-2642-fe0f.svg","man_tone2":"1f468-1f3fc.svg","man_tone2_beard":"1f9d4-1f3fc-200d-2642-fe0f.svg","man_tone3":"1f468-1f3fd.svg","man_tone3_beard":"1f9d4-1f3fd-200d-2642-fe0f.svg","man_tone4":"1f468-1f3fe.svg","man_tone4_beard":"1f9d4-1f3fe-200d-2642-fe0f.svg","man_tone5":"1f468-1f3ff.svg","man_tone5_beard":"1f9d4-1f3ff-200d-2642-fe0f.svg","man_vampire":"1f9db-200d-2642-fe0f.svg","man_vampire_tone1":"1f9db-1f3fb-200d-2642-fe0f.svg","man_vampire_tone2":"1f9db-1f3fc-200d-2642-fe0f.svg","man_vampire_tone3":"1f9db-1f3fd-200d-2642-fe0f.svg","man_vampire_tone4":"1f9db-1f3fe-200d-2642-fe0f.svg","man_vampire_tone5":"1f9db-1f3ff-200d-2642-fe0f.svg","man_walking":"1f6b6-200d-2642-fe0f.svg","man_walking_tone1":"1f6b6-1f3fb-200d-2642-fe0f.svg","man_walking_tone2":"1f6b6-1f3fc-200d-2642-fe0f.svg","man_walking_tone3":"1f6b6-1f3fd-200d-2642-fe0f.svg","man_walking_tone4":"1f6b6-1f3fe-200d-2642-fe0f.svg","man_walking_tone5":"1f6b6-1f3ff-200d-2642-fe0f.svg","man_wearing_turban":"1f473-200d-2642-fe0f.svg","man_wearing_turban_tone1":"1f473-1f3fb-200d-2642-fe0f.svg","man_wearing_turban_tone2":"1f473-1f3fc-200d-2642-fe0f.svg","man_wearing_turban_tone3":"1f473-1f3fd-200d-2642-fe0f.svg","man_wearing_turban_tone4":"1f473-1f3fe-200d-2642-fe0f.svg","man_wearing_turban_tone5":"1f473-1f3ff-200d-2642-fe0f.svg","man_white_haired":"1f468-200d-1f9b3.svg","man_white_haired_tone1":"1f468-1f3fb-200d-1f9b3.svg","man_white_haired_tone2":"1f468-1f3fc-200d-1f9b3.svg","man_white_haired_tone3":"1f468-1f3fd-200d-1f9b3.svg","man_white_haired_tone4":"1f468-1f3fe-200d-1f9b3.svg","man_white_haired_tone5":"1f468-1f3ff-200d-1f9b3.svg","man_with_chinese_cap":"1f472.svg","man_with_chinese_cap_tone1":"1f472-1f3fb.svg","man_with_chinese_cap_tone2":"1f472-1f3fc.svg","man_with_chinese_cap_tone3":"1f472-1f3fd.svg","man_with_chinese_cap_tone4":"1f472-1f3fe.svg","man_with_chinese_cap_tone5":"1f472-1f3ff.svg","man_with_probing_cane":"1f468-200d-1f9af.svg","man_with_probing_cane_tone1":"1f468-1f3fb-200d-1f9af.svg","man_with_probing_cane_tone2":"1f468-1f3fc-200d-1f9af.svg","man_with_probing_cane_tone3":"1f468-1f3fd-200d-1f9af.svg","man_with_probing_cane_tone4":"1f468-1f3fe-200d-1f9af.svg","man_with_probing_cane_tone5":"1f468-1f3ff-200d-1f9af.svg","man_with_veil":"1f470-200d-2642-fe0f.svg","man_with_veil_tone1":"1f470-1f3fb-200d-2642-fe0f.svg","man_with_veil_tone2":"1f470-1f3fc-200d-2642-fe0f.svg","man_with_veil_tone3":"1f470-1f3fd-200d-2642-fe0f.svg","man_with_veil_tone4":"1f470-1f3fe-200d-2642-fe0f.svg","man_with_veil_tone5":"1f470-1f3ff-200d-2642-fe0f.svg","man_zombie":"1f9df-200d-2642-fe0f.svg","mango":"1f96d.svg","mans_shoe":"1f45e.svg","manual_wheelchair":"1f9bd.svg","map":"1f5fa.svg","maple_leaf":"1f341.svg","martial_arts_uniform":"1f94b.svg","mask":"1f637.svg","mate":"1f9c9.svg","meat_on_bone":"1f356.svg","mechanic":"1f9d1-200d-1f527.svg","mechanic_tone1":"1f9d1-1f3fb-200d-1f527.svg","mechanic_tone2":"1f9d1-1f3fc-200d-1f527.svg","mechanic_tone3":"1f9d1-1f3fd-200d-1f527.svg","mechanic_tone4":"1f9d1-1f3fe-200d-1f527.svg","mechanic_tone5":"1f9d1-1f3ff-200d-1f527.svg","mechanical_arm":"1f9be.svg","mechanical_leg":"1f9bf.svg","medal":"1f3c5.svg","medical_symbol":"2695.svg","mega":"1f4e3.svg","melon":"1f348.svg","melting_face":"1fae0.svg","men_holding_hands_tone1":"1f46c-1f3fb.svg","men_holding_hands_tone1_tone2":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc.svg","men_holding_hands_tone1_tone3":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd.svg","men_holding_hands_tone1_tone4":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe.svg","men_holding_hands_tone1_tone5":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff.svg","men_holding_hands_tone2":"1f46c-1f3fc.svg","men_holding_hands_tone2_tone1":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg","men_holding_hands_tone2_tone3":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd.svg","men_holding_hands_tone2_tone4":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe.svg","men_holding_hands_tone2_tone5":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff.svg","men_holding_hands_tone3":"1f46c-1f3fd.svg","men_holding_hands_tone3_tone1":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg","men_holding_hands_tone3_tone2":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg","men_holding_hands_tone3_tone4":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe.svg","men_holding_hands_tone3_tone5":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff.svg","men_holding_hands_tone4":"1f46c-1f3fe.svg","men_holding_hands_tone4_tone1":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg","men_holding_hands_tone4_tone2":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg","men_holding_hands_tone4_tone3":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg","men_holding_hands_tone4_tone5":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff.svg","men_holding_hands_tone5":"1f46c-1f3ff.svg","men_holding_hands_tone5_tone1":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg","men_holding_hands_tone5_tone2":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg","men_holding_hands_tone5_tone3":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg","men_holding_hands_tone5_tone4":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg","men_with_bunny_ears_partying":"1f46f-200d-2642-fe0f.svg","men_wrestling":"1f93c-200d-2642-fe0f.svg","mending_heart":"2764-fe0f-200d-1fa79.svg","menorah":"1f54e.svg","mens":"1f6b9.svg","mermaid":"1f9dc-200d-2640-fe0f.svg","mermaid_tone1":"1f9dc-1f3fb-200d-2640-fe0f.svg","mermaid_tone2":"1f9dc-1f3fc-200d-2640-fe0f.svg","mermaid_tone3":"1f9dc-1f3fd-200d-2640-fe0f.svg","mermaid_tone4":"1f9dc-1f3fe-200d-2640-fe0f.svg","mermaid_tone5":"1f9dc-1f3ff-200d-2640-fe0f.svg","merman":"1f9dc-200d-2642-fe0f.svg","merman_tone1":"1f9dc-1f3fb-200d-2642-fe0f.svg","merman_tone2":"1f9dc-1f3fc-200d-2642-fe0f.svg","merman_tone3":"1f9dc-1f3fd-200d-2642-fe0f.svg","merman_tone4":"1f9dc-1f3fe-200d-2642-fe0f.svg","merman_tone5":"1f9dc-1f3ff-200d-2642-fe0f.svg","merperson":"1f9dc.svg","merperson_tone1":"1f9dc-1f3fb.svg","merperson_tone2":"1f9dc-1f3fc.svg","merperson_tone3":"1f9dc-1f3fd.svg","merperson_tone4":"1f9dc-1f3fe.svg","merperson_tone5":"1f9dc-1f3ff.svg","metal":"1f918.svg","metal_tone1":"1f918-1f3fb.svg","metal_tone2":"1f918-1f3fc.svg","metal_tone3":"1f918-1f3fd.svg","metal_tone4":"1f918-1f3fe.svg","metal_tone5":"1f918-1f3ff.svg","metro":"1f687.svg","microbe":"1f9a0.svg","microphone2":"1f399.svg","microphone":"1f3a4.svg","microscope":"1f52c.svg","middle_finger":"1f595.svg","middle_finger_tone1":"1f595-1f3fb.svg","middle_finger_tone2":"1f595-1f3fc.svg","middle_finger_tone3":"1f595-1f3fd.svg","middle_finger_tone4":"1f595-1f3fe.svg","middle_finger_tone5":"1f595-1f3ff.svg","military_helmet":"1fa96.svg","military_medal":"1f396.svg","milk":"1f95b.svg","milky_way":"1f30c.svg","minibus":"1f690.svg","minidisc":"1f4bd.svg","mirror":"1fa9e.svg","mirror_ball":"1faa9.svg","mobile_phone":"1f4f1.svg","mobile_phone_off":"1f4f4.svg","money_mouth":"1f911.svg","money_with_wings":"1f4b8.svg","moneybag":"1f4b0.svg","monkey":"1f412.svg","monkey_face":"1f435.svg","monorail":"1f69d.svg","moon_cake":"1f96e.svg","mortar_board":"1f393.svg","mosque":"1f54c.svg","mosquito":"1f99f.svg","motor_scooter":"1f6f5.svg","motorboat":"1f6e5.svg","motorcycle":"1f3cd.svg","motorized_wheelchair":"1f9bc.svg","motorway":"1f6e3.svg","mount_fuji":"1f5fb.svg","mountain":"26f0.svg","mountain_cableway":"1f6a0.svg","mountain_railway":"1f69e.svg","mountain_snow":"1f3d4.svg","mouse2":"1f401.svg","mouse":"1f42d.svg","mouse_three_button":"1f5b1.svg","mouse_trap":"1faa4.svg","movie_camera":"1f3a5.svg","moyai":"1f5ff.svg","mrs_claus":"1f936.svg","mrs_claus_tone1":"1f936-1f3fb.svg","mrs_claus_tone2":"1f936-1f3fc.svg","mrs_claus_tone3":"1f936-1f3fd.svg","mrs_claus_tone4":"1f936-1f3fe.svg","mrs_claus_tone5":"1f936-1f3ff.svg","muscle":"1f4aa.svg","muscle_tone1":"1f4aa-1f3fb.svg","muscle_tone2":"1f4aa-1f3fc.svg","muscle_tone3":"1f4aa-1f3fd.svg","muscle_tone4":"1f4aa-1f3fe.svg","muscle_tone5":"1f4aa-1f3ff.svg","mushroom":"1f344.svg","musical_keyboard":"1f3b9.svg","musical_note":"1f3b5.svg","musical_score":"1f3bc.svg","mute":"1f507.svg","mx_claus":"1f9d1-200d-1f384.svg","mx_claus_tone1":"1f9d1-1f3fb-200d-1f384.svg","mx_claus_tone2":"1f9d1-1f3fc-200d-1f384.svg","mx_claus_tone3":"1f9d1-1f3fd-200d-1f384.svg","mx_claus_tone4":"1f9d1-1f3fe-200d-1f384.svg","mx_claus_tone5":"1f9d1-1f3ff-200d-1f384.svg","nail_care":"1f485.svg","nail_care_tone1":"1f485-1f3fb.svg","nail_care_tone2":"1f485-1f3fc.svg","nail_care_tone3":"1f485-1f3fd.svg","nail_care_tone4":"1f485-1f3fe.svg","nail_care_tone5":"1f485-1f3ff.svg","name_badge":"1f4db.svg","nauseated_face":"1f922.svg","nazar_amulet":"1f9ff.svg","necktie":"1f454.svg","negative_squared_cross_mark":"274e.svg","nerd":"1f913.svg","nest_with_eggs":"1faba.svg","nesting_dolls":"1fa86.svg","neutral_face":"1f610.svg","new":"1f195.svg","new_moon":"1f311.svg","new_moon_with_face":"1f31a.svg","newspaper2":"1f5de.svg","newspaper":"1f4f0.svg","ng":"1f196.svg","night_with_stars":"1f303.svg","nine":"39-20e3.svg","ninja":"1f977.svg","ninja_tone1":"1f977-1f3fb.svg","ninja_tone2":"1f977-1f3fc.svg","ninja_tone3":"1f977-1f3fd.svg","ninja_tone4":"1f977-1f3fe.svg","ninja_tone5":"1f977-1f3ff.svg","no_bell":"1f515.svg","no_bicycles":"1f6b3.svg","no_entry":"26d4.svg","no_entry_sign":"1f6ab.svg","no_mobile_phones":"1f4f5.svg","no_mouth":"1f636.svg","no_pedestrians":"1f6b7.svg","no_smoking":"1f6ad.svg","non-potable_water":"1f6b1.svg","nose":"1f443.svg","nose_tone1":"1f443-1f3fb.svg","nose_tone2":"1f443-1f3fc.svg","nose_tone3":"1f443-1f3fd.svg","nose_tone4":"1f443-1f3fe.svg","nose_tone5":"1f443-1f3ff.svg","notebook":"1f4d3.svg","notebook_with_decorative_cover":"1f4d4.svg","notepad_spiral":"1f5d2.svg","notes":"1f3b6.svg","nut_and_bolt":"1f529.svg","o2":"1f17e.svg","o":"2b55.svg","ocean":"1f30a.svg","octagonal_sign":"1f6d1.svg","octopus":"1f419.svg","oden":"1f362.svg","office":"1f3e2.svg","office_worker":"1f9d1-200d-1f4bc.svg","office_worker_tone1":"1f9d1-1f3fb-200d-1f4bc.svg","office_worker_tone2":"1f9d1-1f3fc-200d-1f4bc.svg","office_worker_tone3":"1f9d1-1f3fd-200d-1f4bc.svg","office_worker_tone4":"1f9d1-1f3fe-200d-1f4bc.svg","office_worker_tone5":"1f9d1-1f3ff-200d-1f4bc.svg","oil":"1f6e2.svg","ok":"1f197.svg","ok_hand":"1f44c.svg","ok_hand_tone1":"1f44c-1f3fb.svg","ok_hand_tone2":"1f44c-1f3fc.svg","ok_hand_tone3":"1f44c-1f3fd.svg","ok_hand_tone4":"1f44c-1f3fe.svg","ok_hand_tone5":"1f44c-1f3ff.svg","older_adult":"1f9d3.svg","older_adult_tone1":"1f9d3-1f3fb.svg","older_adult_tone2":"1f9d3-1f3fc.svg","older_adult_tone3":"1f9d3-1f3fd.svg","older_adult_tone4":"1f9d3-1f3fe.svg","older_adult_tone5":"1f9d3-1f3ff.svg","older_man":"1f474.svg","older_man_tone1":"1f474-1f3fb.svg","older_man_tone2":"1f474-1f3fc.svg","older_man_tone3":"1f474-1f3fd.svg","older_man_tone4":"1f474-1f3fe.svg","older_man_tone5":"1f474-1f3ff.svg","older_woman":"1f475.svg","older_woman_tone1":"1f475-1f3fb.svg","older_woman_tone2":"1f475-1f3fc.svg","older_woman_tone3":"1f475-1f3fd.svg","older_woman_tone4":"1f475-1f3fe.svg","older_woman_tone5":"1f475-1f3ff.svg","olive":"1fad2.svg","om_symbol":"1f549.svg","on":"1f51b.svg","oncoming_automobile":"1f698.svg","oncoming_bus":"1f68d.svg","oncoming_police_car":"1f694.svg","oncoming_taxi":"1f696.svg","one":"31-20e3.svg","one_piece_swimsuit":"1fa71.svg","onion":"1f9c5.svg","open_file_folder":"1f4c2.svg","open_hands":"1f450.svg","open_hands_tone1":"1f450-1f3fb.svg","open_hands_tone2":"1f450-1f3fc.svg","open_hands_tone3":"1f450-1f3fd.svg","open_hands_tone4":"1f450-1f3fe.svg","open_hands_tone5":"1f450-1f3ff.svg","open_mouth":"1f62e.svg","ophiuchus":"26ce.svg","orange_book":"1f4d9.svg","orange_circle":"1f7e0.svg","orange_heart":"1f9e1.svg","orange_square":"1f7e7.svg","orangutan":"1f9a7.svg","orthodox_cross":"2626.svg","otter":"1f9a6.svg","outbox_tray":"1f4e4.svg","owl":"1f989.svg","ox":"1f402.svg","oyster":"1f9aa.svg","package":"1f4e6.svg","page_facing_up":"1f4c4.svg","page_with_curl":"1f4c3.svg","pager":"1f4df.svg","paintbrush":"1f58c.svg","palm_down_hand":"1faf3.svg","palm_down_hand_tone1":"1faf3-1f3fb.svg","palm_down_hand_tone2":"1faf3-1f3fc.svg","palm_down_hand_tone3":"1faf3-1f3fd.svg","palm_down_hand_tone4":"1faf3-1f3fe.svg","palm_down_hand_tone5":"1faf3-1f3ff.svg","palm_tree":"1f334.svg","palm_up_hand":"1faf4.svg","palm_up_hand_tone1":"1faf4-1f3fb.svg","palm_up_hand_tone2":"1faf4-1f3fc.svg","palm_up_hand_tone3":"1faf4-1f3fd.svg","palm_up_hand_tone4":"1faf4-1f3fe.svg","palm_up_hand_tone5":"1faf4-1f3ff.svg","palms_up_together":"1f932.svg","palms_up_together_tone1":"1f932-1f3fb.svg","palms_up_together_tone2":"1f932-1f3fc.svg","palms_up_together_tone3":"1f932-1f3fd.svg","palms_up_together_tone4":"1f932-1f3fe.svg","palms_up_together_tone5":"1f932-1f3ff.svg","pancakes":"1f95e.svg","panda_face":"1f43c.svg","paperclip":"1f4ce.svg","paperclips":"1f587.svg","parachute":"1fa82.svg","park":"1f3de.svg","parking":"1f17f.svg","parrot":"1f99c.svg","part_alternation_mark":"303d.svg","partly_sunny":"26c5.svg","partying_face":"1f973.svg","passport_control":"1f6c2.svg","pause_button":"23f8.svg","peace":"262e.svg","peach":"1f351.svg","peacock":"1f99a.svg","peanuts":"1f95c.svg","pear":"1f350.svg","pen_ballpoint":"1f58a.svg","pen_fountain":"1f58b.svg","pencil2":"270f.svg","pencil":"1f4dd.svg","penguin":"1f427.svg","pensive":"1f614.svg","people_holding_hands":"1f9d1-200d-1f91d-200d-1f9d1.svg","people_holding_hands_tone1":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb.svg","people_holding_hands_tone1_tone2":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc.svg","people_holding_hands_tone1_tone3":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd.svg","people_holding_hands_tone1_tone4":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe.svg","people_holding_hands_tone1_tone5":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff.svg","people_holding_hands_tone2":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc.svg","people_holding_hands_tone2_tone1":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb.svg","people_holding_hands_tone2_tone3":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd.svg","people_holding_hands_tone2_tone4":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe.svg","people_holding_hands_tone2_tone5":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff.svg","people_holding_hands_tone3":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd.svg","people_holding_hands_tone3_tone1":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb.svg","people_holding_hands_tone3_tone2":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc.svg","people_holding_hands_tone3_tone4":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe.svg","people_holding_hands_tone3_tone5":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff.svg","people_holding_hands_tone4":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe.svg","people_holding_hands_tone4_tone1":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb.svg","people_holding_hands_tone4_tone2":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc.svg","people_holding_hands_tone4_tone3":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd.svg","people_holding_hands_tone4_tone5":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff.svg","people_holding_hands_tone5":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff.svg","people_holding_hands_tone5_tone1":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb.svg","people_holding_hands_tone5_tone2":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc.svg","people_holding_hands_tone5_tone3":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd.svg","people_holding_hands_tone5_tone4":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe.svg","people_hugging":"1fac2.svg","people_with_bunny_ears_partying":"1f46f.svg","people_wrestling":"1f93c.svg","performing_arts":"1f3ad.svg","persevere":"1f623.svg","person_bald":"1f9d1-200d-1f9b2.svg","person_biking":"1f6b4.svg","person_biking_tone1":"1f6b4-1f3fb.svg","person_biking_tone2":"1f6b4-1f3fc.svg","person_biking_tone3":"1f6b4-1f3fd.svg","person_biking_tone4":"1f6b4-1f3fe.svg","person_biking_tone5":"1f6b4-1f3ff.svg","person_bouncing_ball":"26f9.svg","person_bouncing_ball_tone1":"26f9-1f3fb.svg","person_bouncing_ball_tone2":"26f9-1f3fc.svg","person_bouncing_ball_tone3":"26f9-1f3fd.svg","person_bouncing_ball_tone4":"26f9-1f3fe.svg","person_bouncing_ball_tone5":"26f9-1f3ff.svg","person_bowing":"1f647.svg","person_bowing_tone1":"1f647-1f3fb.svg","person_bowing_tone2":"1f647-1f3fc.svg","person_bowing_tone3":"1f647-1f3fd.svg","person_bowing_tone4":"1f647-1f3fe.svg","person_bowing_tone5":"1f647-1f3ff.svg","person_climbing":"1f9d7.svg","person_climbing_tone1":"1f9d7-1f3fb.svg","person_climbing_tone2":"1f9d7-1f3fc.svg","person_climbing_tone3":"1f9d7-1f3fd.svg","person_climbing_tone4":"1f9d7-1f3fe.svg","person_climbing_tone5":"1f9d7-1f3ff.svg","person_curly_hair":"1f9d1-200d-1f9b1.svg","person_doing_cartwheel":"1f938.svg","person_doing_cartwheel_tone1":"1f938-1f3fb.svg","person_doing_cartwheel_tone2":"1f938-1f3fc.svg","person_doing_cartwheel_tone3":"1f938-1f3fd.svg","person_doing_cartwheel_tone4":"1f938-1f3fe.svg","person_doing_cartwheel_tone5":"1f938-1f3ff.svg","person_facepalming":"1f926.svg","person_facepalming_tone1":"1f926-1f3fb.svg","person_facepalming_tone2":"1f926-1f3fc.svg","person_facepalming_tone3":"1f926-1f3fd.svg","person_facepalming_tone4":"1f926-1f3fe.svg","person_facepalming_tone5":"1f926-1f3ff.svg","person_feeding_baby":"1f9d1-200d-1f37c.svg","person_feeding_baby_tone1":"1f9d1-1f3fb-200d-1f37c.svg","person_feeding_baby_tone2":"1f9d1-1f3fc-200d-1f37c.svg","person_feeding_baby_tone3":"1f9d1-1f3fd-200d-1f37c.svg","person_feeding_baby_tone4":"1f9d1-1f3fe-200d-1f37c.svg","person_feeding_baby_tone5":"1f9d1-1f3ff-200d-1f37c.svg","person_fencing":"1f93a.svg","person_frowning":"1f64d.svg","person_frowning_tone1":"1f64d-1f3fb.svg","person_frowning_tone2":"1f64d-1f3fc.svg","person_frowning_tone3":"1f64d-1f3fd.svg","person_frowning_tone4":"1f64d-1f3fe.svg","person_frowning_tone5":"1f64d-1f3ff.svg","person_gesturing_no":"1f645.svg","person_gesturing_no_tone1":"1f645-1f3fb.svg","person_gesturing_no_tone2":"1f645-1f3fc.svg","person_gesturing_no_tone3":"1f645-1f3fd.svg","person_gesturing_no_tone4":"1f645-1f3fe.svg","person_gesturing_no_tone5":"1f645-1f3ff.svg","person_gesturing_ok":"1f646.svg","person_gesturing_ok_tone1":"1f646-1f3fb.svg","person_gesturing_ok_tone2":"1f646-1f3fc.svg","person_gesturing_ok_tone3":"1f646-1f3fd.svg","person_gesturing_ok_tone4":"1f646-1f3fe.svg","person_gesturing_ok_tone5":"1f646-1f3ff.svg","person_getting_haircut":"1f487.svg","person_getting_haircut_tone1":"1f487-1f3fb.svg","person_getting_haircut_tone2":"1f487-1f3fc.svg","person_getting_haircut_tone3":"1f487-1f3fd.svg","person_getting_haircut_tone4":"1f487-1f3fe.svg","person_getting_haircut_tone5":"1f487-1f3ff.svg","person_getting_massage":"1f486.svg","person_getting_massage_tone1":"1f486-1f3fb.svg","person_getting_massage_tone2":"1f486-1f3fc.svg","person_getting_massage_tone3":"1f486-1f3fd.svg","person_getting_massage_tone4":"1f486-1f3fe.svg","person_getting_massage_tone5":"1f486-1f3ff.svg","person_golfing":"1f3cc.svg","person_golfing_tone1":"1f3cc-1f3fb.svg","person_golfing_tone2":"1f3cc-1f3fc.svg","person_golfing_tone3":"1f3cc-1f3fd.svg","person_golfing_tone4":"1f3cc-1f3fe.svg","person_golfing_tone5":"1f3cc-1f3ff.svg","person_in_bed_tone1":"1f6cc-1f3fb.svg","person_in_bed_tone2":"1f6cc-1f3fc.svg","person_in_bed_tone3":"1f6cc-1f3fd.svg","person_in_bed_tone4":"1f6cc-1f3fe.svg","person_in_bed_tone5":"1f6cc-1f3ff.svg","person_in_lotus_position":"1f9d8.svg","person_in_lotus_position_tone1":"1f9d8-1f3fb.svg","person_in_lotus_position_tone2":"1f9d8-1f3fc.svg","person_in_lotus_position_tone3":"1f9d8-1f3fd.svg","person_in_lotus_position_tone4":"1f9d8-1f3fe.svg","person_in_lotus_position_tone5":"1f9d8-1f3ff.svg","person_in_manual_wheelchair":"1f9d1-200d-1f9bd.svg","person_in_manual_wheelchair_tone1":"1f9d1-1f3fb-200d-1f9bd.svg","person_in_manual_wheelchair_tone2":"1f9d1-1f3fc-200d-1f9bd.svg","person_in_manual_wheelchair_tone3":"1f9d1-1f3fd-200d-1f9bd.svg","person_in_manual_wheelchair_tone4":"1f9d1-1f3fe-200d-1f9bd.svg","person_in_manual_wheelchair_tone5":"1f9d1-1f3ff-200d-1f9bd.svg","person_in_motorized_wheelchair":"1f9d1-200d-1f9bc.svg","person_in_motorized_wheelchair_tone1":"1f9d1-1f3fb-200d-1f9bc.svg","person_in_motorized_wheelchair_tone2":"1f9d1-1f3fc-200d-1f9bc.svg","person_in_motorized_wheelchair_tone3":"1f9d1-1f3fd-200d-1f9bc.svg","person_in_motorized_wheelchair_tone4":"1f9d1-1f3fe-200d-1f9bc.svg","person_in_motorized_wheelchair_tone5":"1f9d1-1f3ff-200d-1f9bc.svg","person_in_steamy_room":"1f9d6.svg","person_in_steamy_room_tone1":"1f9d6-1f3fb.svg","person_in_steamy_room_tone2":"1f9d6-1f3fc.svg","person_in_steamy_room_tone3":"1f9d6-1f3fd.svg","person_in_steamy_room_tone4":"1f9d6-1f3fe.svg","person_in_steamy_room_tone5":"1f9d6-1f3ff.svg","person_in_tuxedo":"1f935.svg","person_in_tuxedo_tone1":"1f935-1f3fb.svg","person_in_tuxedo_tone2":"1f935-1f3fc.svg","person_in_tuxedo_tone3":"1f935-1f3fd.svg","person_in_tuxedo_tone4":"1f935-1f3fe.svg","person_in_tuxedo_tone5":"1f935-1f3ff.svg","person_juggling":"1f939.svg","person_juggling_tone1":"1f939-1f3fb.svg","person_juggling_tone2":"1f939-1f3fc.svg","person_juggling_tone3":"1f939-1f3fd.svg","person_juggling_tone4":"1f939-1f3fe.svg","person_juggling_tone5":"1f939-1f3ff.svg","person_kneeling":"1f9ce.svg","person_kneeling_tone1":"1f9ce-1f3fb.svg","person_kneeling_tone2":"1f9ce-1f3fc.svg","person_kneeling_tone3":"1f9ce-1f3fd.svg","person_kneeling_tone4":"1f9ce-1f3fe.svg","person_kneeling_tone5":"1f9ce-1f3ff.svg","person_lifting_weights":"1f3cb.svg","person_lifting_weights_tone1":"1f3cb-1f3fb.svg","person_lifting_weights_tone2":"1f3cb-1f3fc.svg","person_lifting_weights_tone3":"1f3cb-1f3fd.svg","person_lifting_weights_tone4":"1f3cb-1f3fe.svg","person_lifting_weights_tone5":"1f3cb-1f3ff.svg","person_mountain_biking":"1f6b5.svg","person_mountain_biking_tone1":"1f6b5-1f3fb.svg","person_mountain_biking_tone2":"1f6b5-1f3fc.svg","person_mountain_biking_tone3":"1f6b5-1f3fd.svg","person_mountain_biking_tone4":"1f6b5-1f3fe.svg","person_mountain_biking_tone5":"1f6b5-1f3ff.svg","person_playing_handball":"1f93e.svg","person_playing_handball_tone1":"1f93e-1f3fb.svg","person_playing_handball_tone2":"1f93e-1f3fc.svg","person_playing_handball_tone3":"1f93e-1f3fd.svg","person_playing_handball_tone4":"1f93e-1f3fe.svg","person_playing_handball_tone5":"1f93e-1f3ff.svg","person_playing_water_polo":"1f93d.svg","person_playing_water_polo_tone1":"1f93d-1f3fb.svg","person_playing_water_polo_tone2":"1f93d-1f3fc.svg","person_playing_water_polo_tone3":"1f93d-1f3fd.svg","person_playing_water_polo_tone4":"1f93d-1f3fe.svg","person_playing_water_polo_tone5":"1f93d-1f3ff.svg","person_pouting":"1f64e.svg","person_pouting_tone1":"1f64e-1f3fb.svg","person_pouting_tone2":"1f64e-1f3fc.svg","person_pouting_tone3":"1f64e-1f3fd.svg","person_pouting_tone4":"1f64e-1f3fe.svg","person_pouting_tone5":"1f64e-1f3ff.svg","person_raising_hand":"1f64b.svg","person_raising_hand_tone1":"1f64b-1f3fb.svg","person_raising_hand_tone2":"1f64b-1f3fc.svg","person_raising_hand_tone3":"1f64b-1f3fd.svg","person_raising_hand_tone4":"1f64b-1f3fe.svg","person_raising_hand_tone5":"1f64b-1f3ff.svg","person_red_hair":"1f9d1-200d-1f9b0.svg","person_rowing_boat":"1f6a3.svg","person_rowing_boat_tone1":"1f6a3-1f3fb.svg","person_rowing_boat_tone2":"1f6a3-1f3fc.svg","person_rowing_boat_tone3":"1f6a3-1f3fd.svg","person_rowing_boat_tone4":"1f6a3-1f3fe.svg","person_rowing_boat_tone5":"1f6a3-1f3ff.svg","person_running":"1f3c3.svg","person_running_tone1":"1f3c3-1f3fb.svg","person_running_tone2":"1f3c3-1f3fc.svg","person_running_tone3":"1f3c3-1f3fd.svg","person_running_tone4":"1f3c3-1f3fe.svg","person_running_tone5":"1f3c3-1f3ff.svg","person_shrugging":"1f937.svg","person_shrugging_tone1":"1f937-1f3fb.svg","person_shrugging_tone2":"1f937-1f3fc.svg","person_shrugging_tone3":"1f937-1f3fd.svg","person_shrugging_tone4":"1f937-1f3fe.svg","person_shrugging_tone5":"1f937-1f3ff.svg","person_standing":"1f9cd.svg","person_standing_tone1":"1f9cd-1f3fb.svg","person_standing_tone2":"1f9cd-1f3fc.svg","person_standing_tone3":"1f9cd-1f3fd.svg","person_standing_tone4":"1f9cd-1f3fe.svg","person_standing_tone5":"1f9cd-1f3ff.svg","person_surfing":"1f3c4.svg","person_surfing_tone1":"1f3c4-1f3fb.svg","person_surfing_tone2":"1f3c4-1f3fc.svg","person_surfing_tone3":"1f3c4-1f3fd.svg","person_surfing_tone4":"1f3c4-1f3fe.svg","person_surfing_tone5":"1f3c4-1f3ff.svg","person_swimming":"1f3ca.svg","person_swimming_tone1":"1f3ca-1f3fb.svg","person_swimming_tone2":"1f3ca-1f3fc.svg","person_swimming_tone3":"1f3ca-1f3fd.svg","person_swimming_tone4":"1f3ca-1f3fe.svg","person_swimming_tone5":"1f3ca-1f3ff.svg","person_tipping_hand":"1f481.svg","person_tipping_hand_tone1":"1f481-1f3fb.svg","person_tipping_hand_tone2":"1f481-1f3fc.svg","person_tipping_hand_tone3":"1f481-1f3fd.svg","person_tipping_hand_tone4":"1f481-1f3fe.svg","person_tipping_hand_tone5":"1f481-1f3ff.svg","person_tone1_bald":"1f9d1-1f3fb-200d-1f9b2.svg","person_tone1_curly_hair":"1f9d1-1f3fb-200d-1f9b1.svg","person_tone1_red_hair":"1f9d1-1f3fb-200d-1f9b0.svg","person_tone1_white_hair":"1f9d1-1f3fb-200d-1f9b3.svg","person_tone2_bald":"1f9d1-1f3fc-200d-1f9b2.svg","person_tone2_curly_hair":"1f9d1-1f3fc-200d-1f9b1.svg","person_tone2_red_hair":"1f9d1-1f3fc-200d-1f9b0.svg","person_tone2_white_hair":"1f9d1-1f3fc-200d-1f9b3.svg","person_tone3_bald":"1f9d1-1f3fd-200d-1f9b2.svg","person_tone3_curly_hair":"1f9d1-1f3fd-200d-1f9b1.svg","person_tone3_red_hair":"1f9d1-1f3fd-200d-1f9b0.svg","person_tone3_white_hair":"1f9d1-1f3fd-200d-1f9b3.svg","person_tone4_bald":"1f9d1-1f3fe-200d-1f9b2.svg","person_tone4_curly_hair":"1f9d1-1f3fe-200d-1f9b1.svg","person_tone4_red_hair":"1f9d1-1f3fe-200d-1f9b0.svg","person_tone4_white_hair":"1f9d1-1f3fe-200d-1f9b3.svg","person_tone5_bald":"1f9d1-1f3ff-200d-1f9b2.svg","person_tone5_curly_hair":"1f9d1-1f3ff-200d-1f9b1.svg","person_tone5_red_hair":"1f9d1-1f3ff-200d-1f9b0.svg","person_tone5_white_hair":"1f9d1-1f3ff-200d-1f9b3.svg","person_walking":"1f6b6.svg","person_walking_tone1":"1f6b6-1f3fb.svg","person_walking_tone2":"1f6b6-1f3fc.svg","person_walking_tone3":"1f6b6-1f3fd.svg","person_walking_tone4":"1f6b6-1f3fe.svg","person_walking_tone5":"1f6b6-1f3ff.svg","person_wearing_turban":"1f473.svg","person_wearing_turban_tone1":"1f473-1f3fb.svg","person_wearing_turban_tone2":"1f473-1f3fc.svg","person_wearing_turban_tone3":"1f473-1f3fd.svg","person_wearing_turban_tone4":"1f473-1f3fe.svg","person_wearing_turban_tone5":"1f473-1f3ff.svg","person_white_hair":"1f9d1-200d-1f9b3.svg","person_with_crown":"1fac5.svg","person_with_crown_tone1":"1fac5-1f3fb.svg","person_with_crown_tone2":"1fac5-1f3fc.svg","person_with_crown_tone3":"1fac5-1f3fd.svg","person_with_crown_tone4":"1fac5-1f3fe.svg","person_with_crown_tone5":"1fac5-1f3ff.svg","person_with_probing_cane":"1f9d1-200d-1f9af.svg","person_with_probing_cane_tone1":"1f9d1-1f3fb-200d-1f9af.svg","person_with_probing_cane_tone2":"1f9d1-1f3fc-200d-1f9af.svg","person_with_probing_cane_tone3":"1f9d1-1f3fd-200d-1f9af.svg","person_with_probing_cane_tone4":"1f9d1-1f3fe-200d-1f9af.svg","person_with_probing_cane_tone5":"1f9d1-1f3ff-200d-1f9af.svg","person_with_veil":"1f470.svg","person_with_veil_tone1":"1f470-1f3fb.svg","person_with_veil_tone2":"1f470-1f3fc.svg","person_with_veil_tone3":"1f470-1f3fd.svg","person_with_veil_tone4":"1f470-1f3fe.svg","person_with_veil_tone5":"1f470-1f3ff.svg","petri_dish":"1f9eb.svg","pick":"26cf.svg","pickup_truck":"1f6fb.svg","pie":"1f967.svg","pig2":"1f416.svg","pig":"1f437.svg","pig_nose":"1f43d.svg","pill":"1f48a.svg","pilot":"1f9d1-200d-2708-fe0f.svg","pilot_tone1":"1f9d1-1f3fb-200d-2708-fe0f.svg","pilot_tone2":"1f9d1-1f3fc-200d-2708-fe0f.svg","pilot_tone3":"1f9d1-1f3fd-200d-2708-fe0f.svg","pilot_tone4":"1f9d1-1f3fe-200d-2708-fe0f.svg","pilot_tone5":"1f9d1-1f3ff-200d-2708-fe0f.svg","pinched_fingers":"1f90c.svg","pinched_fingers_tone1":"1f90c-1f3fb.svg","pinched_fingers_tone2":"1f90c-1f3fc.svg","pinched_fingers_tone3":"1f90c-1f3fd.svg","pinched_fingers_tone4":"1f90c-1f3fe.svg","pinched_fingers_tone5":"1f90c-1f3ff.svg","pinching_hand":"1f90f.svg","pinching_hand_tone1":"1f90f-1f3fb.svg","pinching_hand_tone2":"1f90f-1f3fc.svg","pinching_hand_tone3":"1f90f-1f3fd.svg","pinching_hand_tone4":"1f90f-1f3fe.svg","pinching_hand_tone5":"1f90f-1f3ff.svg","pineapple":"1f34d.svg","ping_pong":"1f3d3.svg","pirate_flag":"1f3f4-200d-2620-fe0f.svg","pisces":"2653.svg","pizza":"1f355.svg","piñata":"1fa85.svg","placard":"1faa7.svg","place_of_worship":"1f6d0.svg","play_pause":"23ef.svg","playground_slide":"1f6dd.svg","pleading_face":"1f97a.svg","plunger":"1faa0.svg","point_down":"1f447.svg","point_down_tone1":"1f447-1f3fb.svg","point_down_tone2":"1f447-1f3fc.svg","point_down_tone3":"1f447-1f3fd.svg","point_down_tone4":"1f447-1f3fe.svg","point_down_tone5":"1f447-1f3ff.svg","point_left":"1f448.svg","point_left_tone1":"1f448-1f3fb.svg","point_left_tone2":"1f448-1f3fc.svg","point_left_tone3":"1f448-1f3fd.svg","point_left_tone4":"1f448-1f3fe.svg","point_left_tone5":"1f448-1f3ff.svg","point_right":"1f449.svg","point_right_tone1":"1f449-1f3fb.svg","point_right_tone2":"1f449-1f3fc.svg","point_right_tone3":"1f449-1f3fd.svg","point_right_tone4":"1f449-1f3fe.svg","point_right_tone5":"1f449-1f3ff.svg","point_up":"261d.svg","point_up_2":"1f446.svg","point_up_2_tone1":"1f446-1f3fb.svg","point_up_2_tone2":"1f446-1f3fc.svg","point_up_2_tone3":"1f446-1f3fd.svg","point_up_2_tone4":"1f446-1f3fe.svg","point_up_2_tone5":"1f446-1f3ff.svg","point_up_tone1":"261d-1f3fb.svg","point_up_tone2":"261d-1f3fc.svg","point_up_tone3":"261d-1f3fd.svg","point_up_tone4":"261d-1f3fe.svg","point_up_tone5":"261d-1f3ff.svg","polar_bear":"1f43b-200d-2744-fe0f.svg","police_car":"1f693.svg","police_officer":"1f46e.svg","police_officer_tone1":"1f46e-1f3fb.svg","police_officer_tone2":"1f46e-1f3fc.svg","police_officer_tone3":"1f46e-1f3fd.svg","police_officer_tone4":"1f46e-1f3fe.svg","police_officer_tone5":"1f46e-1f3ff.svg","poodle":"1f429.svg","poop":"1f4a9.svg","popcorn":"1f37f.svg","post_office":"1f3e3.svg","postal_horn":"1f4ef.svg","postbox":"1f4ee.svg","potable_water":"1f6b0.svg","potato":"1f954.svg","potted_plant":"1fab4.svg","pouch":"1f45d.svg","poultry_leg":"1f357.svg","pound":"1f4b7.svg","pouring_liquid":"1fad7.svg","pouting_cat":"1f63e.svg","pray":"1f64f.svg","pray_tone1":"1f64f-1f3fb.svg","pray_tone2":"1f64f-1f3fc.svg","pray_tone3":"1f64f-1f3fd.svg","pray_tone4":"1f64f-1f3fe.svg","pray_tone5":"1f64f-1f3ff.svg","prayer_beads":"1f4ff.svg","pregnant_man":"1fac3.svg","pregnant_man_tone1":"1fac3-1f3fb.svg","pregnant_man_tone2":"1fac3-1f3fc.svg","pregnant_man_tone3":"1fac3-1f3fd.svg","pregnant_man_tone4":"1fac3-1f3fe.svg","pregnant_man_tone5":"1fac3-1f3ff.svg","pregnant_person":"1fac4.svg","pregnant_person_tone1":"1fac4-1f3fb.svg","pregnant_person_tone2":"1fac4-1f3fc.svg","pregnant_person_tone3":"1fac4-1f3fd.svg","pregnant_person_tone4":"1fac4-1f3fe.svg","pregnant_person_tone5":"1fac4-1f3ff.svg","pregnant_woman":"1f930.svg","pregnant_woman_tone1":"1f930-1f3fb.svg","pregnant_woman_tone2":"1f930-1f3fc.svg","pregnant_woman_tone3":"1f930-1f3fd.svg","pregnant_woman_tone4":"1f930-1f3fe.svg","pregnant_woman_tone5":"1f930-1f3ff.svg","pretzel":"1f968.svg","prince":"1f934.svg","prince_tone1":"1f934-1f3fb.svg","prince_tone2":"1f934-1f3fc.svg","prince_tone3":"1f934-1f3fd.svg","prince_tone4":"1f934-1f3fe.svg","prince_tone5":"1f934-1f3ff.svg","princess":"1f478.svg","princess_tone1":"1f478-1f3fb.svg","princess_tone2":"1f478-1f3fc.svg","princess_tone3":"1f478-1f3fd.svg","princess_tone4":"1f478-1f3fe.svg","princess_tone5":"1f478-1f3ff.svg","printer":"1f5a8.svg","probing_cane":"1f9af.svg","projector":"1f4fd.svg","punch":"1f44a.svg","punch_tone1":"1f44a-1f3fb.svg","punch_tone2":"1f44a-1f3fc.svg","punch_tone3":"1f44a-1f3fd.svg","punch_tone4":"1f44a-1f3fe.svg","punch_tone5":"1f44a-1f3ff.svg","purple_circle":"1f7e3.svg","purple_heart":"1f49c.svg","purple_square":"1f7ea.svg","purse":"1f45b.svg","pushpin":"1f4cc.svg","put_litter_in_its_place":"1f6ae.svg","question":"2753.svg","rabbit2":"1f407.svg","rabbit":"1f430.svg","raccoon":"1f99d.svg","race_car":"1f3ce.svg","racehorse":"1f40e.svg","radio":"1f4fb.svg","radio_button":"1f518.svg","radioactive":"2622.svg","rage":"1f621.svg","railway_car":"1f683.svg","railway_track":"1f6e4.svg","rainbow":"1f308.svg","rainbow_flag":"1f3f3-fe0f-200d-1f308.svg","raised_back_of_hand":"1f91a.svg","raised_back_of_hand_tone1":"1f91a-1f3fb.svg","raised_back_of_hand_tone2":"1f91a-1f3fc.svg","raised_back_of_hand_tone3":"1f91a-1f3fd.svg","raised_back_of_hand_tone4":"1f91a-1f3fe.svg","raised_back_of_hand_tone5":"1f91a-1f3ff.svg","raised_hand":"270b.svg","raised_hand_tone1":"270b-1f3fb.svg","raised_hand_tone2":"270b-1f3fc.svg","raised_hand_tone3":"270b-1f3fd.svg","raised_hand_tone4":"270b-1f3fe.svg","raised_hand_tone5":"270b-1f3ff.svg","raised_hands":"1f64c.svg","raised_hands_tone1":"1f64c-1f3fb.svg","raised_hands_tone2":"1f64c-1f3fc.svg","raised_hands_tone3":"1f64c-1f3fd.svg","raised_hands_tone4":"1f64c-1f3fe.svg","raised_hands_tone5":"1f64c-1f3ff.svg","ram":"1f40f.svg","ramen":"1f35c.svg","rat":"1f400.svg","razor":"1fa92.svg","receipt":"1f9fe.svg","record_button":"23fa.svg","recycle":"267b.svg","red_car":"1f697.svg","red_circle":"1f534.svg","red_envelope":"1f9e7.svg","red_haired":"1f9b0.svg","red_square":"1f7e5.svg","regional_indicator_a":"1f1e6.svg","regional_indicator_b":"1f1e7.svg","regional_indicator_c":"1f1e8.svg","regional_indicator_d":"1f1e9.svg","regional_indicator_e":"1f1ea.svg","regional_indicator_f":"1f1eb.svg","regional_indicator_g":"1f1ec.svg","regional_indicator_h":"1f1ed.svg","regional_indicator_i":"1f1ee.svg","regional_indicator_j":"1f1ef.svg","regional_indicator_k":"1f1f0.svg","regional_indicator_l":"1f1f1.svg","regional_indicator_m":"1f1f2.svg","regional_indicator_n":"1f1f3.svg","regional_indicator_o":"1f1f4.svg","regional_indicator_p":"1f1f5.svg","regional_indicator_q":"1f1f6.svg","regional_indicator_r":"1f1f7.svg","regional_indicator_s":"1f1f8.svg","regional_indicator_t":"1f1f9.svg","regional_indicator_u":"1f1fa.svg","regional_indicator_v":"1f1fb.svg","regional_indicator_w":"1f1fc.svg","regional_indicator_x":"1f1fd.svg","regional_indicator_y":"1f1fe.svg","regional_indicator_z":"1f1ff.svg","registered":"ae.svg","relaxed":"263a.svg","relieved":"1f60c.svg","reminder_ribbon":"1f397.svg","repeat":"1f501.svg","repeat_one":"1f502.svg","restroom":"1f6bb.svg","revolving_hearts":"1f49e.svg","rewind":"23ea.svg","rhino":"1f98f.svg","ribbon":"1f380.svg","rice":"1f35a.svg","rice_ball":"1f359.svg","rice_cracker":"1f358.svg","rice_scene":"1f391.svg","right_facing_fist":"1f91c.svg","right_facing_fist_tone1":"1f91c-1f3fb.svg","right_facing_fist_tone2":"1f91c-1f3fc.svg","right_facing_fist_tone3":"1f91c-1f3fd.svg","right_facing_fist_tone4":"1f91c-1f3fe.svg","right_facing_fist_tone5":"1f91c-1f3ff.svg","rightwards_hand":"1faf1.svg","rightwards_hand_tone1":"1faf1-1f3fb.svg","rightwards_hand_tone2":"1faf1-1f3fc.svg","rightwards_hand_tone3":"1faf1-1f3fd.svg","rightwards_hand_tone4":"1faf1-1f3fe.svg","rightwards_hand_tone5":"1faf1-1f3ff.svg","ring":"1f48d.svg","ring_buoy":"1f6df.svg","ringed_planet":"1fa90.svg","robot":"1f916.svg","rock":"1faa8.svg","rocket":"1f680.svg","rofl":"1f923.svg","roll_of_paper":"1f9fb.svg","roller_coaster":"1f3a2.svg","roller_skate":"1f6fc.svg","rolling_eyes":"1f644.svg","rooster":"1f413.svg","rose":"1f339.svg","rosette":"1f3f5.svg","rotating_light":"1f6a8.svg","round_pushpin":"1f4cd.svg","rugby_football":"1f3c9.svg","running_shirt_with_sash":"1f3bd.svg","sa":"1f202.svg","safety_pin":"1f9f7.svg","safety_vest":"1f9ba.svg","sagittarius":"2650.svg","sailboat":"26f5.svg","sake":"1f376.svg","salad":"1f957.svg","salt":"1f9c2.svg","saluting_face":"1fae1.svg","sandal":"1f461.svg","sandwich":"1f96a.svg","santa":"1f385.svg","santa_tone1":"1f385-1f3fb.svg","santa_tone2":"1f385-1f3fc.svg","santa_tone3":"1f385-1f3fd.svg","santa_tone4":"1f385-1f3fe.svg","santa_tone5":"1f385-1f3ff.svg","sari":"1f97b.svg","satellite":"1f4e1.svg","satellite_orbital":"1f6f0.svg","sauropod":"1f995.svg","saxophone":"1f3b7.svg","scales":"2696.svg","scarf":"1f9e3.svg","school":"1f3eb.svg","school_satchel":"1f392.svg","scientist":"1f9d1-200d-1f52c.svg","scientist_tone1":"1f9d1-1f3fb-200d-1f52c.svg","scientist_tone2":"1f9d1-1f3fc-200d-1f52c.svg","scientist_tone3":"1f9d1-1f3fd-200d-1f52c.svg","scientist_tone4":"1f9d1-1f3fe-200d-1f52c.svg","scientist_tone5":"1f9d1-1f3ff-200d-1f52c.svg","scissors":"2702.svg","scooter":"1f6f4.svg","scorpion":"1f982.svg","scorpius":"264f.svg","scotland":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.svg","scream":"1f631.svg","scream_cat":"1f640.svg","screwdriver":"1fa9b.svg","scroll":"1f4dc.svg","seal":"1f9ad.svg","seat":"1f4ba.svg","second_place":"1f948.svg","secret":"3299.svg","see_no_evil":"1f648.svg","seedling":"1f331.svg","selfie":"1f933.svg","selfie_tone1":"1f933-1f3fb.svg","selfie_tone2":"1f933-1f3fc.svg","selfie_tone3":"1f933-1f3fd.svg","selfie_tone4":"1f933-1f3fe.svg","selfie_tone5":"1f933-1f3ff.svg","service_dog":"1f415-200d-1f9ba.svg","seven":"37-20e3.svg","sewing_needle":"1faa1.svg","shallow_pan_of_food":"1f958.svg","shamrock":"2618.svg","shark":"1f988.svg","shaved_ice":"1f367.svg","sheep":"1f411.svg","shell":"1f41a.svg","shibuya":"e50a.svg","shield":"1f6e1.svg","shinto_shrine":"26e9.svg","ship":"1f6a2.svg","shirt":"1f455.svg","shopping_bags":"1f6cd.svg","shopping_cart":"1f6d2.svg","shorts":"1fa73.svg","shower":"1f6bf.svg","shrimp":"1f990.svg","shushing_face":"1f92b.svg","signal_strength":"1f4f6.svg","singer":"1f9d1-200d-1f3a4.svg","singer_tone1":"1f9d1-1f3fb-200d-1f3a4.svg","singer_tone2":"1f9d1-1f3fc-200d-1f3a4.svg","singer_tone3":"1f9d1-1f3fd-200d-1f3a4.svg","singer_tone4":"1f9d1-1f3fe-200d-1f3a4.svg","singer_tone5":"1f9d1-1f3ff-200d-1f3a4.svg","six":"36-20e3.svg","six_pointed_star":"1f52f.svg","skateboard":"1f6f9.svg","ski":"1f3bf.svg","skier":"26f7.svg","skier_tone1":"26f7-1f3fb.svg","skier_tone2":"26f7-1f3fc.svg","skier_tone3":"26f7-1f3fd.svg","skier_tone4":"26f7-1f3fe.svg","skier_tone5":"26f7-1f3ff.svg","skull":"1f480.svg","skull_crossbones":"2620.svg","skunk":"1f9a8.svg","sled":"1f6f7.svg","sleeping":"1f634.svg","sleeping_accommodation":"1f6cc.svg","sleepy":"1f62a.svg","slight_frown":"1f641.svg","slight_smile":"1f642.svg","slot_machine":"1f3b0.svg","sloth":"1f9a5.svg","small_blue_diamond":"1f539.svg","small_orange_diamond":"1f538.svg","small_red_triangle":"1f53a.svg","small_red_triangle_down":"1f53b.svg","smile":"1f604.svg","smile_cat":"1f638.svg","smiley":"1f603.svg","smiley_cat":"1f63a.svg","smiling_face_with_3_hearts":"1f970.svg","smiling_face_with_tear":"1f972.svg","smiling_imp":"1f608.svg","smirk":"1f60f.svg","smirk_cat":"1f63c.svg","smoking":"1f6ac.svg","snail":"1f40c.svg","snake":"1f40d.svg","sneezing_face":"1f927.svg","snowboarder":"1f3c2.svg","snowboarder_tone1":"1f3c2-1f3fb.svg","snowboarder_tone2":"1f3c2-1f3fc.svg","snowboarder_tone3":"1f3c2-1f3fd.svg","snowboarder_tone4":"1f3c2-1f3fe.svg","snowboarder_tone5":"1f3c2-1f3ff.svg","snowflake":"2744.svg","snowman2":"2603.svg","snowman":"26c4.svg","soap":"1f9fc.svg","sob":"1f62d.svg","soccer":"26bd.svg","socks":"1f9e6.svg","softball":"1f94e.svg","soon":"1f51c.svg","sos":"1f198.svg","sound":"1f509.svg","space_invader":"1f47e.svg","spades":"2660.svg","spaghetti":"1f35d.svg","sparkle":"2747.svg","sparkler":"1f387.svg","sparkles":"2728.svg","sparkling_heart":"1f496.svg","speak_no_evil":"1f64a.svg","speaker":"1f508.svg","speaking_head":"1f5e3.svg","speech_balloon":"1f4ac.svg","speech_left":"1f5e8.svg","speedboat":"1f6a4.svg","spider":"1f577.svg","spider_web":"1f578.svg","sponge":"1f9fd.svg","spoon":"1f944.svg","squeeze_bottle":"1f9f4.svg","squid":"1f991.svg","stadium":"1f3df.svg","star2":"1f31f.svg","star":"2b50.svg","star_and_crescent":"262a.svg","star_of_david":"2721.svg","star_struck":"1f929.svg","stars":"1f320.svg","station":"1f689.svg","statue_of_liberty":"1f5fd.svg","steam_locomotive":"1f682.svg","stethoscope":"1fa7a.svg","stew":"1f372.svg","stop_button":"23f9.svg","stopwatch":"23f1.svg","straight_ruler":"1f4cf.svg","strawberry":"1f353.svg","stuck_out_tongue":"1f61b.svg","stuck_out_tongue_closed_eyes":"1f61d.svg","stuck_out_tongue_winking_eye":"1f61c.svg","student":"1f9d1-200d-1f393.svg","student_tone1":"1f9d1-1f3fb-200d-1f393.svg","student_tone2":"1f9d1-1f3fc-200d-1f393.svg","student_tone3":"1f9d1-1f3fd-200d-1f393.svg","student_tone4":"1f9d1-1f3fe-200d-1f393.svg","student_tone5":"1f9d1-1f3ff-200d-1f393.svg","stuffed_flatbread":"1f959.svg","sun_with_face":"1f31e.svg","sunflower":"1f33b.svg","sunglasses":"1f60e.svg","sunny":"2600.svg","sunrise":"1f305.svg","sunrise_over_mountains":"1f304.svg","superhero":"1f9b8.svg","superhero_tone1":"1f9b8-1f3fb.svg","superhero_tone2":"1f9b8-1f3fc.svg","superhero_tone3":"1f9b8-1f3fd.svg","superhero_tone4":"1f9b8-1f3fe.svg","superhero_tone5":"1f9b8-1f3ff.svg","supervillain":"1f9b9.svg","supervillain_tone1":"1f9b9-1f3fb.svg","supervillain_tone2":"1f9b9-1f3fc.svg","supervillain_tone3":"1f9b9-1f3fd.svg","supervillain_tone4":"1f9b9-1f3fe.svg","supervillain_tone5":"1f9b9-1f3ff.svg","sushi":"1f363.svg","suspension_railway":"1f69f.svg","swan":"1f9a2.svg","sweat":"1f613.svg","sweat_drops":"1f4a6.svg","sweat_smile":"1f605.svg","sweet_potato":"1f360.svg","symbols":"1f523.svg","synagogue":"1f54d.svg","syringe":"1f489.svg","t_rex":"1f996.svg","taco":"1f32e.svg","tada":"1f389.svg","takeout_box":"1f961.svg","tamale":"1fad4.svg","tanabata_tree":"1f38b.svg","tangerine":"1f34a.svg","taurus":"2649.svg","taxi":"1f695.svg","tea":"1f375.svg","teacher":"1f9d1-200d-1f3eb.svg","teacher_tone1":"1f9d1-1f3fb-200d-1f3eb.svg","teacher_tone2":"1f9d1-1f3fc-200d-1f3eb.svg","teacher_tone3":"1f9d1-1f3fd-200d-1f3eb.svg","teacher_tone4":"1f9d1-1f3fe-200d-1f3eb.svg","teacher_tone5":"1f9d1-1f3ff-200d-1f3eb.svg","teapot":"1fad6.svg","technologist":"1f9d1-200d-1f4bb.svg","technologist_tone1":"1f9d1-1f3fb-200d-1f4bb.svg","technologist_tone2":"1f9d1-1f3fc-200d-1f4bb.svg","technologist_tone3":"1f9d1-1f3fd-200d-1f4bb.svg","technologist_tone4":"1f9d1-1f3fe-200d-1f4bb.svg","technologist_tone5":"1f9d1-1f3ff-200d-1f4bb.svg","teddy_bear":"1f9f8.svg","telephone":"260e.svg","telephone_receiver":"1f4de.svg","telescope":"1f52d.svg","tennis":"1f3be.svg","tent":"26fa.svg","test_tube":"1f9ea.svg","thermometer":"1f321.svg","thermometer_face":"1f912.svg","thinking":"1f914.svg","third_place":"1f949.svg","thong_sandal":"1fa74.svg","thought_balloon":"1f4ad.svg","thread":"1f9f5.svg","three":"33-20e3.svg","thumbsdown":"1f44e.svg","thumbsdown_tone1":"1f44e-1f3fb.svg","thumbsdown_tone2":"1f44e-1f3fc.svg","thumbsdown_tone3":"1f44e-1f3fd.svg","thumbsdown_tone4":"1f44e-1f3fe.svg","thumbsdown_tone5":"1f44e-1f3ff.svg","thumbsup":"1f44d.svg","thumbsup_tone1":"1f44d-1f3fb.svg","thumbsup_tone2":"1f44d-1f3fc.svg","thumbsup_tone3":"1f44d-1f3fd.svg","thumbsup_tone4":"1f44d-1f3fe.svg","thumbsup_tone5":"1f44d-1f3ff.svg","thunder_cloud_rain":"26c8.svg","ticket":"1f3ab.svg","tickets":"1f39f.svg","tiger2":"1f405.svg","tiger":"1f42f.svg","timer":"23f2.svg","tired_face":"1f62b.svg","tm":"2122.svg","toilet":"1f6bd.svg","tokyo_tower":"1f5fc.svg","tomato":"1f345.svg","tone1":"1f3fb.svg","tone2":"1f3fc.svg","tone3":"1f3fd.svg","tone4":"1f3fe.svg","tone5":"1f3ff.svg","tongue":"1f445.svg","toolbox":"1f9f0.svg","tools":"1f6e0.svg","tooth":"1f9b7.svg","toothbrush":"1faa5.svg","top":"1f51d.svg","tophat":"1f3a9.svg","track_next":"23ed.svg","track_previous":"23ee.svg","trackball":"1f5b2.svg","tractor":"1f69c.svg","traffic_light":"1f6a5.svg","train2":"1f686.svg","train":"1f68b.svg","tram":"1f68a.svg","transgender_flag":"1f3f3-fe0f-200d-26a7-fe0f.svg","transgender_symbol":"26a7.svg","triangular_flag_on_post":"1f6a9.svg","triangular_ruler":"1f4d0.svg","trident":"1f531.svg","triumph":"1f624.svg","troll":"1f9cc.svg","trolleybus":"1f68e.svg","trophy":"1f3c6.svg","tropical_drink":"1f379.svg","tropical_fish":"1f420.svg","truck":"1f69a.svg","trumpet":"1f3ba.svg","tulip":"1f337.svg","tumbler_glass":"1f943.svg","turkey":"1f983.svg","turtle":"1f422.svg","tv":"1f4fa.svg","twisted_rightwards_arrows":"1f500.svg","two":"32-20e3.svg","two_hearts":"1f495.svg","two_men_holding_hands":"1f46c.svg","two_women_holding_hands":"1f46d.svg","u5272":"1f239.svg","u5408":"1f234.svg","u55b6":"1f23a.svg","u6307":"1f22f.svg","u6708":"1f237.svg","u6709":"1f236.svg","u6e80":"1f235.svg","u7121":"1f21a.svg","u7533":"1f238.svg","u7981":"1f232.svg","u7a7a":"1f233.svg","umbrella2":"2602.svg","umbrella":"2614.svg","unamused":"1f612.svg","underage":"1f51e.svg","unicorn":"1f984.svg","united_nations":"1f1fa-1f1f3.svg","unlock":"1f513.svg","up":"1f199.svg","upside_down":"1f643.svg","urn":"26b1.svg","v":"270c.svg","v_tone1":"270c-1f3fb.svg","v_tone2":"270c-1f3fc.svg","v_tone3":"270c-1f3fd.svg","v_tone4":"270c-1f3fe.svg","v_tone5":"270c-1f3ff.svg","vampire":"1f9db.svg","vampire_tone1":"1f9db-1f3fb.svg","vampire_tone2":"1f9db-1f3fc.svg","vampire_tone3":"1f9db-1f3fd.svg","vampire_tone4":"1f9db-1f3fe.svg","vampire_tone5":"1f9db-1f3ff.svg","vertical_traffic_light":"1f6a6.svg","vhs":"1f4fc.svg","vibration_mode":"1f4f3.svg","video_camera":"1f4f9.svg","video_game":"1f3ae.svg","violin":"1f3bb.svg","virgo":"264d.svg","volcano":"1f30b.svg","volleyball":"1f3d0.svg","vs":"1f19a.svg","vulcan":"1f596.svg","vulcan_tone1":"1f596-1f3fb.svg","vulcan_tone2":"1f596-1f3fc.svg","vulcan_tone3":"1f596-1f3fd.svg","vulcan_tone4":"1f596-1f3fe.svg","vulcan_tone5":"1f596-1f3ff.svg","waffle":"1f9c7.svg","wales":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.svg","waning_crescent_moon":"1f318.svg","waning_gibbous_moon":"1f316.svg","warning":"26a0.svg","wastebasket":"1f5d1.svg","watch":"231a.svg","water_buffalo":"1f403.svg","watermelon":"1f349.svg","wave":"1f44b.svg","wave_tone1":"1f44b-1f3fb.svg","wave_tone2":"1f44b-1f3fc.svg","wave_tone3":"1f44b-1f3fd.svg","wave_tone4":"1f44b-1f3fe.svg","wave_tone5":"1f44b-1f3ff.svg","wavy_dash":"3030.svg","waxing_crescent_moon":"1f312.svg","waxing_gibbous_moon":"1f314.svg","wc":"1f6be.svg","weary":"1f629.svg","wedding":"1f492.svg","whale2":"1f40b.svg","whale":"1f433.svg","wheel":"1f6de.svg","wheel_of_dharma":"2638.svg","wheelchair":"267f.svg","white_check_mark":"2705.svg","white_circle":"26aa.svg","white_flower":"1f4ae.svg","white_haired":"1f9b3.svg","white_heart":"1f90d.svg","white_large_square":"2b1c.svg","white_medium_small_square":"25fd.svg","white_medium_square":"25fb.svg","white_small_square":"25ab.svg","white_square_button":"1f533.svg","white_sun_cloud":"1f325.svg","white_sun_rain_cloud":"1f326.svg","white_sun_small_cloud":"1f324.svg","wilted_rose":"1f940.svg","wind_blowing_face":"1f32c.svg","wind_chime":"1f390.svg","window":"1fa9f.svg","wine_glass":"1f377.svg","wink":"1f609.svg","wolf":"1f43a.svg","woman":"1f469.svg","woman_and_man_holding_hands_tone1":"1f46b-1f3fb.svg","woman_and_man_holding_hands_tone1_tone2":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc.svg","woman_and_man_holding_hands_tone1_tone3":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd.svg","woman_and_man_holding_hands_tone1_tone4":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe.svg","woman_and_man_holding_hands_tone1_tone5":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff.svg","woman_and_man_holding_hands_tone2":"1f46b-1f3fc.svg","woman_and_man_holding_hands_tone2_tone1":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg","woman_and_man_holding_hands_tone2_tone3":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd.svg","woman_and_man_holding_hands_tone2_tone4":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe.svg","woman_and_man_holding_hands_tone2_tone5":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff.svg","woman_and_man_holding_hands_tone3":"1f46b-1f3fd.svg","woman_and_man_holding_hands_tone3_tone1":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg","woman_and_man_holding_hands_tone3_tone2":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg","woman_and_man_holding_hands_tone3_tone4":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe.svg","woman_and_man_holding_hands_tone3_tone5":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff.svg","woman_and_man_holding_hands_tone4":"1f46b-1f3fe.svg","woman_and_man_holding_hands_tone4_tone1":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg","woman_and_man_holding_hands_tone4_tone2":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg","woman_and_man_holding_hands_tone4_tone3":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg","woman_and_man_holding_hands_tone4_tone5":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff.svg","woman_and_man_holding_hands_tone5":"1f46b-1f3ff.svg","woman_and_man_holding_hands_tone5_tone1":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg","woman_and_man_holding_hands_tone5_tone2":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg","woman_and_man_holding_hands_tone5_tone3":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg","woman_and_man_holding_hands_tone5_tone4":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg","woman_artist":"1f469-200d-1f3a8.svg","woman_artist_tone1":"1f469-1f3fb-200d-1f3a8.svg","woman_artist_tone2":"1f469-1f3fc-200d-1f3a8.svg","woman_artist_tone3":"1f469-1f3fd-200d-1f3a8.svg","woman_artist_tone4":"1f469-1f3fe-200d-1f3a8.svg","woman_artist_tone5":"1f469-1f3ff-200d-1f3a8.svg","woman_astronaut":"1f469-200d-1f680.svg","woman_astronaut_tone1":"1f469-1f3fb-200d-1f680.svg","woman_astronaut_tone2":"1f469-1f3fc-200d-1f680.svg","woman_astronaut_tone3":"1f469-1f3fd-200d-1f680.svg","woman_astronaut_tone4":"1f469-1f3fe-200d-1f680.svg","woman_astronaut_tone5":"1f469-1f3ff-200d-1f680.svg","woman_bald":"1f469-200d-1f9b2.svg","woman_bald_tone1":"1f469-1f3fb-200d-1f9b2.svg","woman_bald_tone2":"1f469-1f3fc-200d-1f9b2.svg","woman_bald_tone3":"1f469-1f3fd-200d-1f9b2.svg","woman_bald_tone4":"1f469-1f3fe-200d-1f9b2.svg","woman_bald_tone5":"1f469-1f3ff-200d-1f9b2.svg","woman_beard":"1f9d4-200d-2640-fe0f.svg","woman_biking":"1f6b4-200d-2640-fe0f.svg","woman_biking_tone1":"1f6b4-1f3fb-200d-2640-fe0f.svg","woman_biking_tone2":"1f6b4-1f3fc-200d-2640-fe0f.svg","woman_biking_tone3":"1f6b4-1f3fd-200d-2640-fe0f.svg","woman_biking_tone4":"1f6b4-1f3fe-200d-2640-fe0f.svg","woman_biking_tone5":"1f6b4-1f3ff-200d-2640-fe0f.svg","woman_bouncing_ball":"26f9-fe0f-200d-2640-fe0f.svg","woman_bouncing_ball_tone1":"26f9-1f3fb-200d-2640-fe0f.svg","woman_bouncing_ball_tone2":"26f9-1f3fc-200d-2640-fe0f.svg","woman_bouncing_ball_tone3":"26f9-1f3fd-200d-2640-fe0f.svg","woman_bouncing_ball_tone4":"26f9-1f3fe-200d-2640-fe0f.svg","woman_bouncing_ball_tone5":"26f9-1f3ff-200d-2640-fe0f.svg","woman_bowing":"1f647-200d-2640-fe0f.svg","woman_bowing_tone1":"1f647-1f3fb-200d-2640-fe0f.svg","woman_bowing_tone2":"1f647-1f3fc-200d-2640-fe0f.svg","woman_bowing_tone3":"1f647-1f3fd-200d-2640-fe0f.svg","woman_bowing_tone4":"1f647-1f3fe-200d-2640-fe0f.svg","woman_bowing_tone5":"1f647-1f3ff-200d-2640-fe0f.svg","woman_cartwheeling":"1f938-200d-2640-fe0f.svg","woman_cartwheeling_tone1":"1f938-1f3fb-200d-2640-fe0f.svg","woman_cartwheeling_tone2":"1f938-1f3fc-200d-2640-fe0f.svg","woman_cartwheeling_tone3":"1f938-1f3fd-200d-2640-fe0f.svg","woman_cartwheeling_tone4":"1f938-1f3fe-200d-2640-fe0f.svg","woman_cartwheeling_tone5":"1f938-1f3ff-200d-2640-fe0f.svg","woman_climbing":"1f9d7-200d-2640-fe0f.svg","woman_climbing_tone1":"1f9d7-1f3fb-200d-2640-fe0f.svg","woman_climbing_tone2":"1f9d7-1f3fc-200d-2640-fe0f.svg","woman_climbing_tone3":"1f9d7-1f3fd-200d-2640-fe0f.svg","woman_climbing_tone4":"1f9d7-1f3fe-200d-2640-fe0f.svg","woman_climbing_tone5":"1f9d7-1f3ff-200d-2640-fe0f.svg","woman_construction_worker":"1f477-200d-2640-fe0f.svg","woman_construction_worker_tone1":"1f477-1f3fb-200d-2640-fe0f.svg","woman_construction_worker_tone2":"1f477-1f3fc-200d-2640-fe0f.svg","woman_construction_worker_tone3":"1f477-1f3fd-200d-2640-fe0f.svg","woman_construction_worker_tone4":"1f477-1f3fe-200d-2640-fe0f.svg","woman_construction_worker_tone5":"1f477-1f3ff-200d-2640-fe0f.svg","woman_cook":"1f469-200d-1f373.svg","woman_cook_tone1":"1f469-1f3fb-200d-1f373.svg","woman_cook_tone2":"1f469-1f3fc-200d-1f373.svg","woman_cook_tone3":"1f469-1f3fd-200d-1f373.svg","woman_cook_tone4":"1f469-1f3fe-200d-1f373.svg","woman_cook_tone5":"1f469-1f3ff-200d-1f373.svg","woman_curly_haired":"1f469-200d-1f9b1.svg","woman_curly_haired_tone1":"1f469-1f3fb-200d-1f9b1.svg","woman_curly_haired_tone2":"1f469-1f3fc-200d-1f9b1.svg","woman_curly_haired_tone3":"1f469-1f3fd-200d-1f9b1.svg","woman_curly_haired_tone4":"1f469-1f3fe-200d-1f9b1.svg","woman_curly_haired_tone5":"1f469-1f3ff-200d-1f9b1.svg","woman_detective":"1f575-fe0f-200d-2640-fe0f.svg","woman_detective_tone1":"1f575-1f3fb-200d-2640-fe0f.svg","woman_detective_tone2":"1f575-1f3fc-200d-2640-fe0f.svg","woman_detective_tone3":"1f575-1f3fd-200d-2640-fe0f.svg","woman_detective_tone4":"1f575-1f3fe-200d-2640-fe0f.svg","woman_detective_tone5":"1f575-1f3ff-200d-2640-fe0f.svg","woman_elf":"1f9dd-200d-2640-fe0f.svg","woman_elf_tone1":"1f9dd-1f3fb-200d-2640-fe0f.svg","woman_elf_tone2":"1f9dd-1f3fc-200d-2640-fe0f.svg","woman_elf_tone3":"1f9dd-1f3fd-200d-2640-fe0f.svg","woman_elf_tone4":"1f9dd-1f3fe-200d-2640-fe0f.svg","woman_elf_tone5":"1f9dd-1f3ff-200d-2640-fe0f.svg","woman_facepalming":"1f926-200d-2640-fe0f.svg","woman_facepalming_tone1":"1f926-1f3fb-200d-2640-fe0f.svg","woman_facepalming_tone2":"1f926-1f3fc-200d-2640-fe0f.svg","woman_facepalming_tone3":"1f926-1f3fd-200d-2640-fe0f.svg","woman_facepalming_tone4":"1f926-1f3fe-200d-2640-fe0f.svg","woman_facepalming_tone5":"1f926-1f3ff-200d-2640-fe0f.svg","woman_factory_worker":"1f469-200d-1f3ed.svg","woman_factory_worker_tone1":"1f469-1f3fb-200d-1f3ed.svg","woman_factory_worker_tone2":"1f469-1f3fc-200d-1f3ed.svg","woman_factory_worker_tone3":"1f469-1f3fd-200d-1f3ed.svg","woman_factory_worker_tone4":"1f469-1f3fe-200d-1f3ed.svg","woman_factory_worker_tone5":"1f469-1f3ff-200d-1f3ed.svg","woman_fairy":"1f9da-200d-2640-fe0f.svg","woman_fairy_tone1":"1f9da-1f3fb-200d-2640-fe0f.svg","woman_fairy_tone2":"1f9da-1f3fc-200d-2640-fe0f.svg","woman_fairy_tone3":"1f9da-1f3fd-200d-2640-fe0f.svg","woman_fairy_tone4":"1f9da-1f3fe-200d-2640-fe0f.svg","woman_fairy_tone5":"1f9da-1f3ff-200d-2640-fe0f.svg","woman_farmer":"1f469-200d-1f33e.svg","woman_farmer_tone1":"1f469-1f3fb-200d-1f33e.svg","woman_farmer_tone2":"1f469-1f3fc-200d-1f33e.svg","woman_farmer_tone3":"1f469-1f3fd-200d-1f33e.svg","woman_farmer_tone4":"1f469-1f3fe-200d-1f33e.svg","woman_farmer_tone5":"1f469-1f3ff-200d-1f33e.svg","woman_feeding_baby":"1f469-200d-1f37c.svg","woman_feeding_baby_tone1":"1f469-1f3fb-200d-1f37c.svg","woman_feeding_baby_tone2":"1f469-1f3fc-200d-1f37c.svg","woman_feeding_baby_tone3":"1f469-1f3fd-200d-1f37c.svg","woman_feeding_baby_tone4":"1f469-1f3fe-200d-1f37c.svg","woman_feeding_baby_tone5":"1f469-1f3ff-200d-1f37c.svg","woman_firefighter":"1f469-200d-1f692.svg","woman_firefighter_tone1":"1f469-1f3fb-200d-1f692.svg","woman_firefighter_tone2":"1f469-1f3fc-200d-1f692.svg","woman_firefighter_tone3":"1f469-1f3fd-200d-1f692.svg","woman_firefighter_tone4":"1f469-1f3fe-200d-1f692.svg","woman_firefighter_tone5":"1f469-1f3ff-200d-1f692.svg","woman_frowning":"1f64d-200d-2640-fe0f.svg","woman_frowning_tone1":"1f64d-1f3fb-200d-2640-fe0f.svg","woman_frowning_tone2":"1f64d-1f3fc-200d-2640-fe0f.svg","woman_frowning_tone3":"1f64d-1f3fd-200d-2640-fe0f.svg","woman_frowning_tone4":"1f64d-1f3fe-200d-2640-fe0f.svg","woman_frowning_tone5":"1f64d-1f3ff-200d-2640-fe0f.svg","woman_genie":"1f9de-200d-2640-fe0f.svg","woman_gesturing_no":"1f645-200d-2640-fe0f.svg","woman_gesturing_no_tone1":"1f645-1f3fb-200d-2640-fe0f.svg","woman_gesturing_no_tone2":"1f645-1f3fc-200d-2640-fe0f.svg","woman_gesturing_no_tone3":"1f645-1f3fd-200d-2640-fe0f.svg","woman_gesturing_no_tone4":"1f645-1f3fe-200d-2640-fe0f.svg","woman_gesturing_no_tone5":"1f645-1f3ff-200d-2640-fe0f.svg","woman_gesturing_ok":"1f646-200d-2640-fe0f.svg","woman_gesturing_ok_tone1":"1f646-1f3fb-200d-2640-fe0f.svg","woman_gesturing_ok_tone2":"1f646-1f3fc-200d-2640-fe0f.svg","woman_gesturing_ok_tone3":"1f646-1f3fd-200d-2640-fe0f.svg","woman_gesturing_ok_tone4":"1f646-1f3fe-200d-2640-fe0f.svg","woman_gesturing_ok_tone5":"1f646-1f3ff-200d-2640-fe0f.svg","woman_getting_face_massage":"1f486-200d-2640-fe0f.svg","woman_getting_face_massage_tone1":"1f486-1f3fb-200d-2640-fe0f.svg","woman_getting_face_massage_tone2":"1f486-1f3fc-200d-2640-fe0f.svg","woman_getting_face_massage_tone3":"1f486-1f3fd-200d-2640-fe0f.svg","woman_getting_face_massage_tone4":"1f486-1f3fe-200d-2640-fe0f.svg","woman_getting_face_massage_tone5":"1f486-1f3ff-200d-2640-fe0f.svg","woman_getting_haircut":"1f487-200d-2640-fe0f.svg","woman_getting_haircut_tone1":"1f487-1f3fb-200d-2640-fe0f.svg","woman_getting_haircut_tone2":"1f487-1f3fc-200d-2640-fe0f.svg","woman_getting_haircut_tone3":"1f487-1f3fd-200d-2640-fe0f.svg","woman_getting_haircut_tone4":"1f487-1f3fe-200d-2640-fe0f.svg","woman_getting_haircut_tone5":"1f487-1f3ff-200d-2640-fe0f.svg","woman_golfing":"1f3cc-fe0f-200d-2640-fe0f.svg","woman_golfing_tone1":"1f3cc-1f3fb-200d-2640-fe0f.svg","woman_golfing_tone2":"1f3cc-1f3fc-200d-2640-fe0f.svg","woman_golfing_tone3":"1f3cc-1f3fd-200d-2640-fe0f.svg","woman_golfing_tone4":"1f3cc-1f3fe-200d-2640-fe0f.svg","woman_golfing_tone5":"1f3cc-1f3ff-200d-2640-fe0f.svg","woman_guard":"1f482-200d-2640-fe0f.svg","woman_guard_tone1":"1f482-1f3fb-200d-2640-fe0f.svg","woman_guard_tone2":"1f482-1f3fc-200d-2640-fe0f.svg","woman_guard_tone3":"1f482-1f3fd-200d-2640-fe0f.svg","woman_guard_tone4":"1f482-1f3fe-200d-2640-fe0f.svg","woman_guard_tone5":"1f482-1f3ff-200d-2640-fe0f.svg","woman_health_worker":"1f469-200d-2695-fe0f.svg","woman_health_worker_tone1":"1f469-1f3fb-200d-2695-fe0f.svg","woman_health_worker_tone2":"1f469-1f3fc-200d-2695-fe0f.svg","woman_health_worker_tone3":"1f469-1f3fd-200d-2695-fe0f.svg","woman_health_worker_tone4":"1f469-1f3fe-200d-2695-fe0f.svg","woman_health_worker_tone5":"1f469-1f3ff-200d-2695-fe0f.svg","woman_in_lotus_position":"1f9d8-200d-2640-fe0f.svg","woman_in_lotus_position_tone1":"1f9d8-1f3fb-200d-2640-fe0f.svg","woman_in_lotus_position_tone2":"1f9d8-1f3fc-200d-2640-fe0f.svg","woman_in_lotus_position_tone3":"1f9d8-1f3fd-200d-2640-fe0f.svg","woman_in_lotus_position_tone4":"1f9d8-1f3fe-200d-2640-fe0f.svg","woman_in_lotus_position_tone5":"1f9d8-1f3ff-200d-2640-fe0f.svg","woman_in_manual_wheelchair":"1f469-200d-1f9bd.svg","woman_in_manual_wheelchair_tone1":"1f469-1f3fb-200d-1f9bd.svg","woman_in_manual_wheelchair_tone2":"1f469-1f3fc-200d-1f9bd.svg","woman_in_manual_wheelchair_tone3":"1f469-1f3fd-200d-1f9bd.svg","woman_in_manual_wheelchair_tone4":"1f469-1f3fe-200d-1f9bd.svg","woman_in_manual_wheelchair_tone5":"1f469-1f3ff-200d-1f9bd.svg","woman_in_motorized_wheelchair":"1f469-200d-1f9bc.svg","woman_in_motorized_wheelchair_tone1":"1f469-1f3fb-200d-1f9bc.svg","woman_in_motorized_wheelchair_tone2":"1f469-1f3fc-200d-1f9bc.svg","woman_in_motorized_wheelchair_tone3":"1f469-1f3fd-200d-1f9bc.svg","woman_in_motorized_wheelchair_tone4":"1f469-1f3fe-200d-1f9bc.svg","woman_in_motorized_wheelchair_tone5":"1f469-1f3ff-200d-1f9bc.svg","woman_in_santa_hat":"1f469-200d-1f384.svg","woman_in_santa_hat_tone1":"1f469-1f3fb-200d-1f384.svg","woman_in_santa_hat_tone2":"1f468-1f3ff-200d-1f384.svg","woman_in_santa_hat_tone3":"1f469-1f3fe-200d-1f384.svg","woman_in_santa_hat_tone4":"1f469-1f3fd-200d-1f384.svg","woman_in_santa_hat_tone5":"1f469-1f3fc-200d-1f384.svg","woman_in_steamy_room":"1f9d6-200d-2640-fe0f.svg","woman_in_steamy_room_tone1":"1f9d6-1f3fb-200d-2640-fe0f.svg","woman_in_steamy_room_tone2":"1f9d6-1f3fc-200d-2640-fe0f.svg","woman_in_steamy_room_tone3":"1f9d6-1f3fd-200d-2640-fe0f.svg","woman_in_steamy_room_tone4":"1f9d6-1f3fe-200d-2640-fe0f.svg","woman_in_steamy_room_tone5":"1f9d6-1f3ff-200d-2640-fe0f.svg","woman_in_tuxedo":"1f935-200d-2640-fe0f.svg","woman_in_tuxedo_tone1":"1f935-1f3fb-200d-2640-fe0f.svg","woman_in_tuxedo_tone2":"1f935-1f3fc-200d-2640-fe0f.svg","woman_in_tuxedo_tone3":"1f935-1f3fd-200d-2640-fe0f.svg","woman_in_tuxedo_tone4":"1f935-1f3fe-200d-2640-fe0f.svg","woman_in_tuxedo_tone5":"1f935-1f3ff-200d-2640-fe0f.svg","woman_judge":"1f469-200d-2696-fe0f.svg","woman_judge_tone1":"1f469-1f3fb-200d-2696-fe0f.svg","woman_judge_tone2":"1f469-1f3fc-200d-2696-fe0f.svg","woman_judge_tone3":"1f469-1f3fd-200d-2696-fe0f.svg","woman_judge_tone4":"1f469-1f3fe-200d-2696-fe0f.svg","woman_judge_tone5":"1f469-1f3ff-200d-2696-fe0f.svg","woman_juggling":"1f939-200d-2640-fe0f.svg","woman_juggling_tone1":"1f939-1f3fb-200d-2640-fe0f.svg","woman_juggling_tone2":"1f939-1f3fc-200d-2640-fe0f.svg","woman_juggling_tone3":"1f939-1f3fd-200d-2640-fe0f.svg","woman_juggling_tone4":"1f939-1f3fe-200d-2640-fe0f.svg","woman_juggling_tone5":"1f939-1f3ff-200d-2640-fe0f.svg","woman_kneeling":"1f9ce-200d-2640-fe0f.svg","woman_kneeling_tone1":"1f9ce-1f3fb-200d-2640-fe0f.svg","woman_kneeling_tone2":"1f9ce-1f3fc-200d-2640-fe0f.svg","woman_kneeling_tone3":"1f9ce-1f3fd-200d-2640-fe0f.svg","woman_kneeling_tone4":"1f9ce-1f3fe-200d-2640-fe0f.svg","woman_kneeling_tone5":"1f9ce-1f3ff-200d-2640-fe0f.svg","woman_leviate_tone2":"1f574-1f3fc-200d-2640-fe0f.svg","woman_leviate_tone3":"1f574-1f3fd-200d-2640-fe0f.svg","woman_leviate_tone4":"1f574-1f3fe-200d-2640-fe0f.svg","woman_leviate_tone5":"1f574-1f3ff-200d-2640-fe0f.svg","woman_levitate":"1f574-fe0f-200d-2640-fe0f.svg","woman_levitate_tone1":"1f574-1f3fb-200d-2640-fe0f.svg","woman_lifting_weights":"1f3cb-fe0f-200d-2640-fe0f.svg","woman_lifting_weights_tone1":"1f3cb-1f3fb-200d-2640-fe0f.svg","woman_lifting_weights_tone2":"1f3cb-1f3fc-200d-2640-fe0f.svg","woman_lifting_weights_tone3":"1f3cb-1f3fd-200d-2640-fe0f.svg","woman_lifting_weights_tone4":"1f3cb-1f3fe-200d-2640-fe0f.svg","woman_lifting_weights_tone5":"1f3cb-1f3ff-200d-2640-fe0f.svg","woman_mage":"1f9d9-200d-2640-fe0f.svg","woman_mage_tone1":"1f9d9-1f3fb-200d-2640-fe0f.svg","woman_mage_tone2":"1f9d9-1f3fc-200d-2640-fe0f.svg","woman_mage_tone3":"1f9d9-1f3fd-200d-2640-fe0f.svg","woman_mage_tone4":"1f9d9-1f3fe-200d-2640-fe0f.svg","woman_mage_tone5":"1f9d9-1f3ff-200d-2640-fe0f.svg","woman_mechanic":"1f469-200d-1f527.svg","woman_mechanic_tone1":"1f469-1f3fb-200d-1f527.svg","woman_mechanic_tone2":"1f469-1f3fc-200d-1f527.svg","woman_mechanic_tone3":"1f469-1f3fd-200d-1f527.svg","woman_mechanic_tone4":"1f469-1f3fe-200d-1f527.svg","woman_mechanic_tone5":"1f469-1f3ff-200d-1f527.svg","woman_mountain_biking":"1f6b5-200d-2640-fe0f.svg","woman_mountain_biking_tone1":"1f6b5-1f3fb-200d-2640-fe0f.svg","woman_mountain_biking_tone2":"1f6b5-1f3fc-200d-2640-fe0f.svg","woman_mountain_biking_tone3":"1f6b5-1f3fd-200d-2640-fe0f.svg","woman_mountain_biking_tone4":"1f6b5-1f3fe-200d-2640-fe0f.svg","woman_mountain_biking_tone5":"1f6b5-1f3ff-200d-2640-fe0f.svg","woman_office_worker":"1f469-200d-1f4bc.svg","woman_office_worker_tone1":"1f469-1f3fb-200d-1f4bc.svg","woman_office_worker_tone2":"1f469-1f3fc-200d-1f4bc.svg","woman_office_worker_tone3":"1f469-1f3fd-200d-1f4bc.svg","woman_office_worker_tone4":"1f469-1f3fe-200d-1f4bc.svg","woman_office_worker_tone5":"1f469-1f3ff-200d-1f4bc.svg","woman_pilot":"1f469-200d-2708-fe0f.svg","woman_pilot_tone1":"1f469-1f3fb-200d-2708-fe0f.svg","woman_pilot_tone2":"1f469-1f3fc-200d-2708-fe0f.svg","woman_pilot_tone3":"1f469-1f3fd-200d-2708-fe0f.svg","woman_pilot_tone4":"1f469-1f3fe-200d-2708-fe0f.svg","woman_pilot_tone5":"1f469-1f3ff-200d-2708-fe0f.svg","woman_playing_handball":"1f93e-200d-2640-fe0f.svg","woman_playing_handball_tone1":"1f93e-1f3fb-200d-2640-fe0f.svg","woman_playing_handball_tone2":"1f93e-1f3fc-200d-2640-fe0f.svg","woman_playing_handball_tone3":"1f93e-1f3fd-200d-2640-fe0f.svg","woman_playing_handball_tone4":"1f93e-1f3fe-200d-2640-fe0f.svg","woman_playing_handball_tone5":"1f93e-1f3ff-200d-2640-fe0f.svg","woman_playing_water_polo":"1f93d-200d-2640-fe0f.svg","woman_playing_water_polo_tone1":"1f93d-1f3fb-200d-2640-fe0f.svg","woman_playing_water_polo_tone2":"1f93d-1f3fc-200d-2640-fe0f.svg","woman_playing_water_polo_tone3":"1f93d-1f3fd-200d-2640-fe0f.svg","woman_playing_water_polo_tone4":"1f93d-1f3fe-200d-2640-fe0f.svg","woman_playing_water_polo_tone5":"1f93d-1f3ff-200d-2640-fe0f.svg","woman_police_officer":"1f46e-200d-2640-fe0f.svg","woman_police_officer_tone1":"1f46e-1f3fb-200d-2640-fe0f.svg","woman_police_officer_tone2":"1f46e-1f3fc-200d-2640-fe0f.svg","woman_police_officer_tone3":"1f46e-1f3fd-200d-2640-fe0f.svg","woman_police_officer_tone4":"1f46e-1f3fe-200d-2640-fe0f.svg","woman_police_officer_tone5":"1f46e-1f3ff-200d-2640-fe0f.svg","woman_pouting":"1f64e-200d-2640-fe0f.svg","woman_pouting_tone1":"1f64e-1f3fb-200d-2640-fe0f.svg","woman_pouting_tone2":"1f64e-1f3fc-200d-2640-fe0f.svg","woman_pouting_tone3":"1f64e-1f3fd-200d-2640-fe0f.svg","woman_pouting_tone4":"1f64e-1f3fe-200d-2640-fe0f.svg","woman_pouting_tone5":"1f64e-1f3ff-200d-2640-fe0f.svg","woman_raising_hand":"1f64b-200d-2640-fe0f.svg","woman_raising_hand_tone1":"1f64b-1f3fb-200d-2640-fe0f.svg","woman_raising_hand_tone2":"1f64b-1f3fc-200d-2640-fe0f.svg","woman_raising_hand_tone3":"1f64b-1f3fd-200d-2640-fe0f.svg","woman_raising_hand_tone4":"1f64b-1f3fe-200d-2640-fe0f.svg","woman_raising_hand_tone5":"1f64b-1f3ff-200d-2640-fe0f.svg","woman_red_haired":"1f469-200d-1f9b0.svg","woman_red_haired_tone1":"1f469-1f3fb-200d-1f9b0.svg","woman_red_haired_tone2":"1f469-1f3fc-200d-1f9b0.svg","woman_red_haired_tone3":"1f469-1f3fd-200d-1f9b0.svg","woman_red_haired_tone4":"1f469-1f3fe-200d-1f9b0.svg","woman_red_haired_tone5":"1f469-1f3ff-200d-1f9b0.svg","woman_rowing_boat":"1f6a3-200d-2640-fe0f.svg","woman_rowing_boat_tone1":"1f6a3-1f3fb-200d-2640-fe0f.svg","woman_rowing_boat_tone2":"1f6a3-1f3fc-200d-2640-fe0f.svg","woman_rowing_boat_tone3":"1f6a3-1f3fd-200d-2640-fe0f.svg","woman_rowing_boat_tone4":"1f6a3-1f3fe-200d-2640-fe0f.svg","woman_rowing_boat_tone5":"1f6a3-1f3ff-200d-2640-fe0f.svg","woman_running":"1f3c3-200d-2640-fe0f.svg","woman_running_tone1":"1f3c3-1f3fb-200d-2640-fe0f.svg","woman_running_tone2":"1f3c3-1f3fc-200d-2640-fe0f.svg","woman_running_tone3":"1f3c3-1f3fd-200d-2640-fe0f.svg","woman_running_tone4":"1f3c3-1f3fe-200d-2640-fe0f.svg","woman_running_tone5":"1f3c3-1f3ff-200d-2640-fe0f.svg","woman_scientist":"1f469-200d-1f52c.svg","woman_scientist_tone1":"1f469-1f3fb-200d-1f52c.svg","woman_scientist_tone2":"1f469-1f3fc-200d-1f52c.svg","woman_scientist_tone3":"1f469-1f3fd-200d-1f52c.svg","woman_scientist_tone4":"1f469-1f3fe-200d-1f52c.svg","woman_scientist_tone5":"1f469-1f3ff-200d-1f52c.svg","woman_shrugging":"1f937-200d-2640-fe0f.svg","woman_shrugging_tone1":"1f937-1f3fb-200d-2640-fe0f.svg","woman_shrugging_tone2":"1f937-1f3fc-200d-2640-fe0f.svg","woman_shrugging_tone3":"1f937-1f3fd-200d-2640-fe0f.svg","woman_shrugging_tone4":"1f937-1f3fe-200d-2640-fe0f.svg","woman_shrugging_tone5":"1f937-1f3ff-200d-2640-fe0f.svg","woman_singer":"1f469-200d-1f3a4.svg","woman_singer_tone1":"1f469-1f3fb-200d-1f3a4.svg","woman_singer_tone2":"1f469-1f3fc-200d-1f3a4.svg","woman_singer_tone3":"1f469-1f3fd-200d-1f3a4.svg","woman_singer_tone4":"1f469-1f3fe-200d-1f3a4.svg","woman_singer_tone5":"1f469-1f3ff-200d-1f3a4.svg","woman_standing":"1f9cd-200d-2640-fe0f.svg","woman_standing_tone1":"1f9cd-1f3fb-200d-2640-fe0f.svg","woman_standing_tone2":"1f9cd-1f3fc-200d-2640-fe0f.svg","woman_standing_tone3":"1f9cd-1f3fd-200d-2640-fe0f.svg","woman_standing_tone4":"1f9cd-1f3fe-200d-2640-fe0f.svg","woman_standing_tone5":"1f9cd-1f3ff-200d-2640-fe0f.svg","woman_student":"1f469-200d-1f393.svg","woman_student_tone1":"1f469-1f3fb-200d-1f393.svg","woman_student_tone2":"1f469-1f3fc-200d-1f393.svg","woman_student_tone3":"1f469-1f3fd-200d-1f393.svg","woman_student_tone4":"1f469-1f3fe-200d-1f393.svg","woman_student_tone5":"1f469-1f3ff-200d-1f393.svg","woman_superhero":"1f9b8-200d-2640-fe0f.svg","woman_superhero_tone1":"1f9b8-1f3fb-200d-2640-fe0f.svg","woman_superhero_tone2":"1f9b8-1f3fc-200d-2640-fe0f.svg","woman_superhero_tone3":"1f9b8-1f3fd-200d-2640-fe0f.svg","woman_superhero_tone4":"1f9b8-1f3fe-200d-2640-fe0f.svg","woman_superhero_tone5":"1f9b8-1f3ff-200d-2640-fe0f.svg","woman_supervillain":"1f9b9-200d-2640-fe0f.svg","woman_supervillain_tone1":"1f9b9-1f3fb-200d-2640-fe0f.svg","woman_supervillain_tone2":"1f9b9-1f3fc-200d-2640-fe0f.svg","woman_supervillain_tone3":"1f9b9-1f3fd-200d-2640-fe0f.svg","woman_supervillain_tone4":"1f9b9-1f3fe-200d-2640-fe0f.svg","woman_supervillain_tone5":"1f9b9-1f3ff-200d-2640-fe0f.svg","woman_surfing":"1f3c4-200d-2640-fe0f.svg","woman_surfing_tone1":"1f3c4-1f3fb-200d-2640-fe0f.svg","woman_surfing_tone2":"1f3c4-1f3fc-200d-2640-fe0f.svg","woman_surfing_tone3":"1f3c4-1f3fd-200d-2640-fe0f.svg","woman_surfing_tone4":"1f3c4-1f3fe-200d-2640-fe0f.svg","woman_surfing_tone5":"1f3c4-1f3ff-200d-2640-fe0f.svg","woman_swimming":"1f3ca-200d-2640-fe0f.svg","woman_swimming_tone1":"1f3ca-1f3fb-200d-2640-fe0f.svg","woman_swimming_tone2":"1f3ca-1f3fc-200d-2640-fe0f.svg","woman_swimming_tone3":"1f3ca-1f3fd-200d-2640-fe0f.svg","woman_swimming_tone4":"1f3ca-1f3fe-200d-2640-fe0f.svg","woman_swimming_tone5":"1f3ca-1f3ff-200d-2640-fe0f.svg","woman_teacher":"1f469-200d-1f3eb.svg","woman_teacher_tone1":"1f469-1f3fb-200d-1f3eb.svg","woman_teacher_tone2":"1f469-1f3fc-200d-1f3eb.svg","woman_teacher_tone3":"1f469-1f3fd-200d-1f3eb.svg","woman_teacher_tone4":"1f469-1f3fe-200d-1f3eb.svg","woman_teacher_tone5":"1f469-1f3ff-200d-1f3eb.svg","woman_technologist":"1f469-200d-1f4bb.svg","woman_technologist_tone1":"1f469-1f3fb-200d-1f4bb.svg","woman_technologist_tone2":"1f469-1f3fc-200d-1f4bb.svg","woman_technologist_tone3":"1f469-1f3fd-200d-1f4bb.svg","woman_technologist_tone4":"1f469-1f3fe-200d-1f4bb.svg","woman_technologist_tone5":"1f469-1f3ff-200d-1f4bb.svg","woman_tipping_hand":"1f481-200d-2640-fe0f.svg","woman_tipping_hand_tone1":"1f481-1f3fb-200d-2640-fe0f.svg","woman_tipping_hand_tone2":"1f481-1f3fc-200d-2640-fe0f.svg","woman_tipping_hand_tone3":"1f481-1f3fd-200d-2640-fe0f.svg","woman_tipping_hand_tone4":"1f481-1f3fe-200d-2640-fe0f.svg","woman_tipping_hand_tone5":"1f481-1f3ff-200d-2640-fe0f.svg","woman_tone1":"1f469-1f3fb.svg","woman_tone1_beard":"1f9d4-1f3fb-200d-2640-fe0f.svg","woman_tone2":"1f469-1f3fc.svg","woman_tone2_beard":"1f9d4-1f3fc-200d-2640-fe0f.svg","woman_tone3":"1f469-1f3fd.svg","woman_tone3_beard":"1f9d4-1f3fd-200d-2640-fe0f.svg","woman_tone4":"1f469-1f3fe.svg","woman_tone4_beard":"1f9d4-1f3fe-200d-2640-fe0f.svg","woman_tone5":"1f469-1f3ff.svg","woman_tone5_beard":"1f9d4-1f3ff-200d-2640-fe0f.svg","woman_vampire":"1f9db-200d-2640-fe0f.svg","woman_vampire_tone1":"1f9db-1f3fb-200d-2640-fe0f.svg","woman_vampire_tone2":"1f9db-1f3fc-200d-2640-fe0f.svg","woman_vampire_tone3":"1f9db-1f3fd-200d-2640-fe0f.svg","woman_vampire_tone4":"1f9db-1f3fe-200d-2640-fe0f.svg","woman_vampire_tone5":"1f9db-1f3ff-200d-2640-fe0f.svg","woman_walking":"1f6b6-200d-2640-fe0f.svg","woman_walking_tone1":"1f6b6-1f3fb-200d-2640-fe0f.svg","woman_walking_tone2":"1f6b6-1f3fc-200d-2640-fe0f.svg","woman_walking_tone3":"1f6b6-1f3fd-200d-2640-fe0f.svg","woman_walking_tone4":"1f6b6-1f3fe-200d-2640-fe0f.svg","woman_walking_tone5":"1f6b6-1f3ff-200d-2640-fe0f.svg","woman_wearing_turban":"1f473-200d-2640-fe0f.svg","woman_wearing_turban_tone1":"1f473-1f3fb-200d-2640-fe0f.svg","woman_wearing_turban_tone2":"1f473-1f3fc-200d-2640-fe0f.svg","woman_wearing_turban_tone3":"1f473-1f3fd-200d-2640-fe0f.svg","woman_wearing_turban_tone4":"1f473-1f3fe-200d-2640-fe0f.svg","woman_wearing_turban_tone5":"1f473-1f3ff-200d-2640-fe0f.svg","woman_white_haired":"1f469-200d-1f9b3.svg","woman_white_haired_tone1":"1f469-1f3fb-200d-1f9b3.svg","woman_white_haired_tone2":"1f469-1f3fc-200d-1f9b3.svg","woman_white_haired_tone3":"1f469-1f3fd-200d-1f9b3.svg","woman_white_haired_tone4":"1f469-1f3fe-200d-1f9b3.svg","woman_white_haired_tone5":"1f469-1f3ff-200d-1f9b3.svg","woman_with_headscarf":"1f9d5.svg","woman_with_headscarf_tone1":"1f9d5-1f3fb.svg","woman_with_headscarf_tone2":"1f9d5-1f3fc.svg","woman_with_headscarf_tone3":"1f9d5-1f3fd.svg","woman_with_headscarf_tone4":"1f9d5-1f3fe.svg","woman_with_headscarf_tone5":"1f9d5-1f3ff.svg","woman_with_probing_cane":"1f469-200d-1f9af.svg","woman_with_probing_cane_tone1":"1f469-1f3fb-200d-1f9af.svg","woman_with_probing_cane_tone2":"1f469-1f3fc-200d-1f9af.svg","woman_with_probing_cane_tone3":"1f469-1f3fd-200d-1f9af.svg","woman_with_probing_cane_tone4":"1f469-1f3fe-200d-1f9af.svg","woman_with_probing_cane_tone5":"1f469-1f3ff-200d-1f9af.svg","woman_with_veil":"1f470-200d-2640-fe0f.svg","woman_with_veil_tone1":"1f470-1f3fb-200d-2640-fe0f.svg","woman_with_veil_tone2":"1f470-1f3fc-200d-2640-fe0f.svg","woman_with_veil_tone3":"1f470-1f3fd-200d-2640-fe0f.svg","woman_with_veil_tone4":"1f470-1f3fe-200d-2640-fe0f.svg","woman_with_veil_tone5":"1f470-1f3ff-200d-2640-fe0f.svg","woman_zombie":"1f9df-200d-2640-fe0f.svg","womans_clothes":"1f45a.svg","womans_flat_shoe":"1f97f.svg","womans_hat":"1f452.svg","women_holding_hands_tone1":"1f46d-1f3fb.svg","women_holding_hands_tone1_tone2":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc.svg","women_holding_hands_tone1_tone3":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd.svg","women_holding_hands_tone1_tone4":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe.svg","women_holding_hands_tone1_tone5":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff.svg","women_holding_hands_tone2":"1f46d-1f3fc.svg","women_holding_hands_tone2_tone1":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb.svg","women_holding_hands_tone2_tone3":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd.svg","women_holding_hands_tone2_tone4":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe.svg","women_holding_hands_tone2_tone5":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff.svg","women_holding_hands_tone3":"1f46d-1f3fd.svg","women_holding_hands_tone3_tone1":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb.svg","women_holding_hands_tone3_tone2":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc.svg","women_holding_hands_tone3_tone4":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe.svg","women_holding_hands_tone3_tone5":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff.svg","women_holding_hands_tone4":"1f46d-1f3fe.svg","women_holding_hands_tone4_tone1":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb.svg","women_holding_hands_tone4_tone2":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc.svg","women_holding_hands_tone4_tone3":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd.svg","women_holding_hands_tone4_tone5":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff.svg","women_holding_hands_tone5":"1f46d-1f3ff.svg","women_holding_hands_tone5_tone1":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb.svg","women_holding_hands_tone5_tone2":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc.svg","women_holding_hands_tone5_tone3":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd.svg","women_holding_hands_tone5_tone4":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe.svg","women_with_bunny_ears_partying":"1f46f-200d-2640-fe0f.svg","women_wrestling":"1f93c-200d-2640-fe0f.svg","womens":"1f6ba.svg","wood":"1fab5.svg","woozy_face":"1f974.svg","worm":"1fab1.svg","worried":"1f61f.svg","wrench":"1f527.svg","writing_hand":"270d.svg","writing_hand_tone1":"270d-1f3fb.svg","writing_hand_tone2":"270d-1f3fc.svg","writing_hand_tone3":"270d-1f3fd.svg","writing_hand_tone4":"270d-1f3fe.svg","writing_hand_tone5":"270d-1f3ff.svg","x":"274c.svg","x_ray":"1fa7b.svg","yarn":"1f9f6.svg","yawning_face":"1f971.svg","yellow_circle":"1f7e1.svg","yellow_heart":"1f49b.svg","yellow_square":"1f7e8.svg","yen":"1f4b4.svg","yin_yang":"262f.svg","yo_yo":"1fa80.svg","yum":"1f60b.svg","zany_face":"1f92a.svg","zap":"26a1.svg","zebra":"1f993.svg","zero":"30-20e3.svg","zipper_mouth":"1f910.svg","zombie":"1f9df.svg","zzz":"1f4a4.svg"}}} \ No newline at end of file
diff --git a/dev/src/overrides/assets/javascripts/integrations/analytics/index.ts b/dev/src/overrides/assets/javascripts/integrations/analytics/index.ts
deleted file mode 100644
index 658add2a..00000000
--- a/dev/src/overrides/assets/javascripts/integrations/analytics/index.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { fromEvent } from "rxjs"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Set up extra analytics events
- */
-export function setupAnalytics(): void {
- const { origin } = new URL(location.href)
- fromEvent(document.body, "click")
- .subscribe(ev => {
- if (ev.target instanceof HTMLElement) {
- const el = ev.target.closest("a")
- if (el && el.origin !== origin)
- ga("send", "event", "outbound", "click", el.href)
- }
- })
-}
diff --git a/dev/src/overrides/assets/javascripts/integrations/index.ts b/dev/src/overrides/assets/javascripts/integrations/index.ts
deleted file mode 100644
index 9179f2a2..00000000
--- a/dev/src/overrides/assets/javascripts/integrations/index.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./analytics"
diff --git a/dev/src/overrides/assets/javascripts/templates/iconsearch/index.tsx b/dev/src/overrides/assets/javascripts/templates/iconsearch/index.tsx
deleted file mode 100644
index 13cafa6d..00000000
--- a/dev/src/overrides/assets/javascripts/templates/iconsearch/index.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { wrap } from "fuzzaldrin-plus"
-
-import { translation } from "~/_"
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Icon
- */
-export interface Icon {
- shortcode: string /* Icon shortcode */
- url: string /* Icon URL */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Highlight an icon search result
- *
- * @param icon - Icon
- * @param query - Search query
- *
- * @returns Highlighted result
- */
-function highlight(icon: Icon, query: string): string {
- return wrap(icon.shortcode, query, {
- wrap: {
- tagOpen: "<b>",
- tagClose: "</b>"
- }
- })
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render an icon search result
- *
- * @param icon - Icon
- * @param query - Search query
- * @param file - Render as file
- *
- * @returns Element
- */
-export function renderIconSearchResult(
- icon: Icon, query: string, file?: boolean
-): HTMLElement {
- return (
- <li class="mdx-iconsearch-result__item">
- <span class="twemoji">
- <img src={icon.url} />
- </span>
- <button
- class="md-clipboard--inline"
- title={translation("clipboard.copy")}
- data-clipboard-text={file ? icon.shortcode : `:${icon.shortcode}:`}
- >
- <code>{
- file
- ? highlight(icon, query)
- : `:${highlight(icon, query)}:`
- }</code>
- </button>
- </li>
- )
-}
diff --git a/dev/src/overrides/assets/javascripts/templates/index.ts b/dev/src/overrides/assets/javascripts/templates/index.ts
deleted file mode 100644
index 02376b3d..00000000
--- a/dev/src/overrides/assets/javascripts/templates/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./iconsearch"
-export * from "./sponsorship"
diff --git a/dev/src/overrides/assets/javascripts/templates/sponsorship/index.tsx b/dev/src/overrides/assets/javascripts/templates/sponsorship/index.tsx
deleted file mode 100644
index 7891c2e0..00000000
--- a/dev/src/overrides/assets/javascripts/templates/sponsorship/index.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { h } from "~/utilities"
-
-import { SponsorUser } from "_/components"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render public sponsor
- *
- * @param user - Sponsor user
- *
- * @returns Element
- */
-export function renderPublicSponsor(
- user: SponsorUser
-): HTMLElement {
- const title = `@${user.name}`
- return (
- <a href={user.url} title={title} class="mdx-sponsorship__item">
- <img src={user.image} />
- </a>
- )
-}
-
-/**
- * Render private sponsor
- *
- * @param count - Number of private sponsors
- *
- * @returns Element
- */
-export function renderPrivateSponsor(
- count: number
-): HTMLElement {
- return (
- <a
- href="https://github.com/sponsors/squidfunk?metadata_origin=docs"
- class="mdx-sponsorship__item mdx-sponsorship__item--private"
- >
- +{count}
- </a>
- )
-}
diff --git a/dev/src/overrides/assets/stylesheets/custom.00c04c01.min.css b/dev/src/overrides/assets/stylesheets/custom.00c04c01.min.css
new file mode 100644
index 00000000..3d441c39
--- /dev/null
+++ b/dev/src/overrides/assets/stylesheets/custom.00c04c01.min.css
@@ -0,0 +1,572 @@
+@keyframes heart {
+
+ 0%,
+ 40%,
+ 80%,
+ to {
+ transform: scale(1)
+ }
+
+ 20%,
+ 60% {
+ transform: scale(1.15)
+ }
+}
+
+
+.md-typeset .twitter {
+ color: #00acee
+}
+
+.md-typeset .mastodon {
+ color: #897ff8
+}
+
+.md-typeset .mdx-video {
+ width: auto
+}
+
+.md-typeset .mdx-video__inner {
+ height: 0;
+ padding-bottom: 56.138%;
+ position: relative;
+ width: 100%
+}
+
+.md-typeset .mdx-video iframe {
+ border: none;
+ height: 100%;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ width: 100%
+}
+
+.md-typeset .mdx-heart {
+ animation: heart 1s infinite
+}
+
+.md-typeset .mdx-insiders {
+ color: #e91e63
+}
+
+.md-typeset .mdx-badge {
+ font-size: .85em
+}
+
+.md-typeset .mdx-badge--heart {
+ --md-typeset-a-color: #e92063;
+ --md-accent-fg-color: #ff4281;
+ --md-accent-fg-color--transparent: #e920631a
+}
+
+.md-typeset .mdx-badge--heart .twemoji {
+ animation: heart 1s infinite
+}
+
+.md-typeset .mdx-badge--right {
+ float: right;
+ margin-left: .35em
+}
+
+[dir=ltr] .md-typeset .mdx-badge__icon {
+ border-top-left-radius: .1rem
+}
+
+[dir=rtl] .md-typeset .mdx-badge__icon {
+ border-top-right-radius: .1rem
+}
+
+[dir=ltr] .md-typeset .mdx-badge__icon {
+ border-bottom-left-radius: .1rem
+}
+
+[dir=rtl] .md-typeset .mdx-badge__icon {
+ border-bottom-right-radius: .1rem
+}
+
+.md-typeset .mdx-badge__icon {
+ background: var(--md-accent-fg-color--transparent);
+ padding: .2rem
+}
+
+.md-typeset .mdx-badge__icon:last-child {
+ border-radius: .1rem
+}
+
+[dir=ltr] .md-typeset .mdx-badge__text {
+ border-top-right-radius: .1rem
+}
+
+[dir=rtl] .md-typeset .mdx-badge__text {
+ border-top-left-radius: .1rem
+}
+
+[dir=ltr] .md-typeset .mdx-badge__text {
+ border-bottom-right-radius: .1rem
+}
+
+[dir=rtl] .md-typeset .mdx-badge__text {
+ border-bottom-left-radius: .1rem
+}
+
+.md-typeset .mdx-badge__text {
+ box-shadow: 0 0 0 1px inset var(--md-accent-fg-color--transparent);
+ padding: .2rem .3rem
+}
+
+.md-typeset .mdx-switch button {
+ cursor: pointer;
+ transition: opacity .25s
+}
+
+.md-typeset .mdx-switch button:focus,
+.md-typeset .mdx-switch button:hover {
+ opacity: .75
+}
+
+.md-typeset .mdx-switch button>code {
+ background-color: var(--md-primary-fg-color);
+ color: var(--md-primary-bg-color);
+ display: block
+}
+
+.md-typeset .mdx-columns ol,
+.md-typeset .mdx-columns ul {
+ -moz-columns: 2;
+ column-count: 2
+}
+
+@media screen and (max-width:29.984375em) {
+
+ .md-typeset .mdx-columns ol,
+ .md-typeset .mdx-columns ul {
+ -moz-columns: initial;
+ columns: initial
+ }
+}
+
+.md-typeset .mdx-columns li {
+ -moz-column-break-inside: avoid;
+ break-inside: avoid
+}
+
+.md-typeset .mdx-flags {
+ margin: 2em auto
+}
+
+.md-typeset .mdx-flags ol {
+ list-style: none
+}
+
+.md-typeset .mdx-flags ol li {
+ margin-bottom: 1em
+}
+
+.md-typeset .mdx-flags__item {
+ display: flex;
+ gap: .6rem
+}
+
+.md-typeset .mdx-flags__content {
+ display: flex;
+ flex: 1;
+ flex-direction: column
+}
+
+.md-typeset .mdx-flags__content span {
+ align-items: baseline;
+ display: inline-flex;
+ justify-content: space-between
+}
+
+.md-typeset .mdx-flags__content>span:nth-child(2) {
+ font-size: 80%
+}
+
+.md-typeset .mdx-flags__content code {
+ float: right
+}
+
+.md-typeset .mdx-social {
+ height: min(27rem, 80vw);
+ position: relative
+}
+
+.md-typeset .mdx-social:hover .mdx-social__image {
+ background-color: #e4e4e40d
+}
+
+.md-typeset .mdx-social__layer {
+ margin-top: 4rem;
+ position: absolute;
+ transform-style: preserve-3d;
+ transition: .25s cubic-bezier(.7, 0, .3, 1)
+}
+
+.md-typeset .mdx-social__layer:hover .mdx-social__label {
+ opacity: 1
+}
+
+.md-typeset .mdx-social__layer:hover .mdx-social__image {
+ background-color: #7f7f7ffc
+}
+
+.md-typeset .mdx-social__layer:hover~.mdx-social__layer {
+ opacity: 0
+}
+
+.md-typeset .mdx-social__image {
+ box-shadow: -.25rem .25rem .5rem #0000000d;
+ transform: rotate(-40deg) skew(15deg, 15deg) scale(.7);
+ transition: all .25s
+}
+
+.md-typeset .mdx-social__image img {
+ display: block
+}
+
+.md-typeset .mdx-social__label {
+ background-color: var(--md-default-fg-color--light);
+ color: var(--md-default-bg-color);
+ display: block;
+ opacity: 0;
+ padding: .2rem .4rem;
+ position: absolute;
+ transition: all .25s
+}
+
+.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(6) {
+ transform: translateY(-30px)
+}
+
+.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(5) {
+ transform: translateY(-20px)
+}
+
+.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(4) {
+ transform: translateY(-10px)
+}
+
+.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(3) {
+ transform: translateY(0)
+}
+
+.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(2) {
+ transform: translateY(10px)
+}
+
+.md-typeset .mdx-social:hover .mdx-social__layer:first-child {
+ transform: translateY(20px)
+}
+
+.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(0) {
+ transform: translateY(30px)
+}
+
+.md-banner {
+ color: var(--md-footer-fg-color--lighter)
+}
+
+.md-banner strong {
+ white-space: nowrap
+}
+
+.md-banner a,
+.md-banner strong {
+ color: var(--md-footer-fg-color)
+}
+
+.md-banner a:focus,
+.md-banner a:hover {
+ color: currentcolor
+}
+
+.md-banner a:focus .twemoji,
+.md-banner a:hover .twemoji {
+ background-color: var(--md-footer-fg-color);
+ box-shadow: none
+}
+
+.md-banner .twemoji {
+ border-radius: 100%;
+ box-shadow: inset 0 0 0 .05rem currentcolor;
+ display: inline-block;
+ height: 1.2rem;
+ padding: .25rem;
+ transition: all .25s;
+ vertical-align: bottom;
+ width: 1.2rem
+}
+
+.md-banner .twemoji svg {
+ display: block;
+ max-height: none
+}
+
+.md-banner--warning {
+ background-color: #fa7575;
+ color: var(--md-warning-fg-color);
+}
+
+.mdx-container {
+ background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(0, 0%, 100%, 1)' /></svg>") no-repeat bottom, linear-gradient(to bottom, var(--md-primary-fg-color), #a63fd9 99%, var(--md-default-bg-color) 99%);
+ padding-top: 1rem
+}
+
+[data-md-color-scheme=slate] .mdx-container {
+ background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(230, 15%, 14%, 1)' /></svg>") no-repeat bottom, linear-gradient(to bottom, var(--md-primary-fg-color), #363949 99%, var(--md-default-bg-color) 99%)
+}
+
+.mdx-hero {
+ color: var(--md-primary-bg-color);
+ margin: 0 .8rem
+}
+
+.mdx-hero h1 {
+ color: currentcolor;
+ font-weight: 700;
+ margin-bottom: 1rem
+}
+
+@media screen and (max-width:29.984375em) {
+ .mdx-hero h1 {
+ font-size: 1.4rem
+ }
+}
+
+.mdx-hero__content {
+ padding-bottom: 6rem
+}
+
+@media screen and (min-width:60em) {
+ .mdx-hero {
+ align-items: stretch;
+ display: flex
+ }
+
+ .mdx-hero__content {
+ margin-top: 3.5rem;
+ max-width: 19rem;
+ padding-bottom: 14vw
+ }
+
+ .mdx-hero__image {
+ order: 1;
+ transform: translateX(4rem);
+ width: 38rem
+ }
+}
+
+@media screen and (min-width:76.25em) {
+ .mdx-hero__image {
+ transform: translateX(8rem)
+ }
+}
+
+.mdx-hero .md-button {
+ color: var(--md-primary-bg-color);
+ margin-right: .5rem;
+ margin-top: .5rem
+}
+
+.mdx-hero .md-button:focus,
+.mdx-hero .md-button:hover {
+ background-color: var(--md-accent-fg-color);
+ border-color: var(--md-accent-fg-color);
+ color: var(--md-accent-bg-color)
+}
+
+.mdx-hero .md-button--primary {
+ background-color: var(--md-primary-bg-color);
+ border-color: var(--md-primary-bg-color);
+ color: #894da8
+}
+
+.md-typeset .mdx-iconsearch {
+ background-color: var(--md-default-bg-color);
+ border-radius: .1rem;
+ box-shadow: var(--md-shadow-z1);
+ position: relative;
+ transition: box-shadow 125ms
+}
+
+.md-typeset .mdx-iconsearch:focus-within,
+.md-typeset .mdx-iconsearch:hover {
+ box-shadow: var(--md-shadow-z2)
+}
+
+.md-typeset .mdx-iconsearch .md-input {
+ background: var(--md-default-bg-color);
+ box-shadow: none
+}
+
+[data-md-color-scheme=slate] .md-typeset .mdx-iconsearch .md-input {
+ background: var(--md-code-bg-color)
+}
+
+.md-typeset .mdx-iconsearch-result {
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ max-height: 50vh;
+ overflow-y: auto;
+ scrollbar-color: var(--md-default-fg-color--lighter) #0000;
+ scrollbar-width: thin;
+ touch-action: pan-y
+}
+
+.md-tooltip .md-typeset .mdx-iconsearch-result {
+ max-height: 10.25rem
+}
+
+.md-typeset .mdx-iconsearch-result::-webkit-scrollbar {
+ height: .2rem;
+ width: .2rem
+}
+
+.md-typeset .mdx-iconsearch-result::-webkit-scrollbar-thumb {
+ background-color: var(--md-default-fg-color--lighter)
+}
+
+.md-typeset .mdx-iconsearch-result::-webkit-scrollbar-thumb:hover {
+ background-color: var(--md-accent-fg-color)
+}
+
+.md-typeset .mdx-iconsearch-result__meta {
+ color: var(--md-default-fg-color--lighter);
+ font-size: .64rem;
+ position: absolute;
+ right: .6rem;
+ top: .4rem
+}
+
+[dir=ltr] .md-typeset .mdx-iconsearch-result__list {
+ margin-left: 0
+}
+
+[dir=rtl] .md-typeset .mdx-iconsearch-result__list {
+ margin-right: 0
+}
+
+.md-typeset .mdx-iconsearch-result__list {
+ list-style: none;
+ margin: 0;
+ padding: 0
+}
+
+[dir=ltr] .md-typeset .mdx-iconsearch-result__item {
+ margin-left: 0
+}
+
+[dir=rtl] .md-typeset .mdx-iconsearch-result__item {
+ margin-right: 0
+}
+
+.md-typeset .mdx-iconsearch-result__item {
+ border-bottom: .05rem solid var(--md-default-fg-color--lightest);
+ margin: 0;
+ padding: .2rem .6rem
+}
+
+.md-typeset .mdx-iconsearch-result__item:last-child {
+ border-bottom: none
+}
+
+.md-typeset .mdx-iconsearch-result__item>* {
+ margin-right: .6rem
+}
+
+.md-typeset .mdx-iconsearch-result__item img {
+ height: .9rem;
+ width: .9rem
+}
+
+[data-md-color-scheme=slate] .md-typeset .mdx-iconsearch-result__item img[src*=squidfunk] {
+ filter: invert(1)
+}
+
+.md-typeset .mdx-premium p {
+ margin: 2em 0;
+ text-align: center
+}
+
+.md-typeset .mdx-premium img {
+ height: 3.25rem
+}
+
+.md-typeset .mdx-premium p:last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center
+}
+
+.md-typeset .mdx-premium p:last-child>a {
+ display: block;
+ flex-shrink: 0
+}
+
+.md-typeset .mdx-sponsorship__list {
+ margin: 2em 0
+}
+
+.md-typeset .mdx-sponsorship__list:after {
+ clear: both;
+ content: "";
+ display: block
+}
+
+[dir=ltr] .md-typeset .mdx-sponsorship__item {
+ float: left
+}
+
+[dir=rtl] .md-typeset .mdx-sponsorship__item {
+ float: right
+}
+
+.md-typeset .mdx-sponsorship__item {
+ border-radius: 100%;
+ display: block;
+ height: 1.6rem;
+ margin: .2rem;
+ overflow: hidden;
+ transform: scale(1);
+ transition: color 125ms, transform 125ms;
+ width: 1.6rem
+}
+
+.md-typeset .mdx-sponsorship__item:focus,
+.md-typeset .mdx-sponsorship__item:hover {
+ transform: scale(1.1)
+}
+
+.md-typeset .mdx-sponsorship__item:focus img,
+.md-typeset .mdx-sponsorship__item:hover img {
+ filter: grayscale(0)
+}
+
+.md-typeset .mdx-sponsorship__item--private {
+ background: var(--md-default-fg-color--lightest);
+ color: var(--md-default-fg-color--lighter);
+ font-size: .6rem;
+ font-weight: 700;
+ line-height: 1.6rem;
+ text-align: center
+}
+
+.md-typeset .mdx-sponsorship__item img {
+ display: block;
+ filter: grayscale(100%) opacity(75%);
+ height: auto;
+ transition: filter 125ms;
+ width: 100%
+}
+
+.md-typeset .mdx-sponsorship-button {
+ font-weight: 400
+}
+
+.md-typeset .mdx-sponsorship-count,
+.md-typeset .mdx-sponsorship-total {
+ font-weight: 700
+} \ No newline at end of file
diff --git a/dev/src/overrides/assets/stylesheets/custom.00c04c01.min.css.map b/dev/src/overrides/assets/stylesheets/custom.00c04c01.min.css.map
new file mode 100644
index 00000000..7937fd51
--- /dev/null
+++ b/dev/src/overrides/assets/stylesheets/custom.00c04c01.min.css.map
@@ -0,0 +1,15 @@
+{
+ "version": 3,
+ "sources": [
+ "src/overrides/assets/stylesheets/custom/_typeset.scss",
+ "../../../../src/overrides/assets/stylesheets/custom.scss",
+ "src/templates/assets/stylesheets/utilities/_break.scss",
+ "src/overrides/assets/stylesheets/custom/layout/_banner.scss",
+ "src/overrides/assets/stylesheets/custom/layout/_hero.scss",
+ "src/overrides/assets/stylesheets/custom/layout/_iconsearch.scss",
+ "src/overrides/assets/stylesheets/custom/layout/_sponsorship.scss"
+ ],
+ "names": [],
+ "mappings": "AA2BA,iBACE,cAIE,kBC7BF,CDgCA,QAEE,qBC/BF,CACF,CD0CE,qBACE,aCxCJ,CD6CE,sBACE,aC3CJ,CD+CE,uBACE,UC7CJ,CDgDI,8BAGE,QAAA,CACA,sBAAA,CAHA,iBAAA,CACA,UC5CN,CDkDI,8BAOE,WAAA,CAFA,WAAA,CAFA,MAAA,CAGA,eAAA,CALA,iBAAA,CACA,KAAA,CAEA,UC7CN,CDqDE,uBACE,2BCnDJ,CDuDE,0BACE,aCrDJ,CD2DE,uBACE,eCzDJ,CD4DI,8BACE,4BAAA,CACA,4BAAA,CACA,2CC1DN,CD6DM,uCACE,2BC3DR,CDgEI,8BACE,WAAA,CACA,iBC9DN,CDkEI,uCAGE,4BC/DN,CD4DI,uCAGE,6BC/DN,CD4DI,uCAIE,+BChEN,CD4DI,uCAIE,gCChEN,CD4DI,6BAEE,iDAAA,CADA,aC7DN,CDmEM,wCACE,mBCjER,CDsEI,uCAEE,6BClEN,CDgEI,uCAEE,4BClEN,CDgEI,uCAGE,gCCnEN,CDgEI,uCAGE,+BCnEN,CDgEI,6BAIE,iEAAA,CAHA,mBCjEN,CD2EE,+BACE,cAAA,CACA,uBCzEJ,CD4EI,0EACE,WC1EN,CD8EI,oCAGE,2CAAA,CADA,gCAAA,CADA,aC1EN,CDoFI,wDAEE,cAAA,CAAA,cClFN,CCiII,0CFjDA,wDAMI,oBAAA,CAAA,eCjFN,CACF,CDqFI,4BACE,8BAAA,CAAA,kBCnFN,CDwFE,uBACE,eCtFJ,CDyFI,0BACE,eCvFN,CD0FM,6BACE,iBCxFR,CD6FI,6BACE,YAAA,CACA,SC3FN,CD+FI,gCACE,YAAA,CACA,MAAA,CACA,qBC7FN,CDgGM,qCAEE,oBAAA,CADA,mBAAA,CAEA,6BC9FR,CDkGM,kDACE,aChGR,CDoGM,qCACE,WClGR,CDwGE,wBAEE,sBAAA,CADA,iBCrGJ,CDyGI,iDACE,0BCvGN,CD2GI,+BAEE,eAAA,CADA,iBAAA,CAGA,2BAAA,CADA,uCCxGN,CD+GQ,wDACE,SC7GV,CDiHQ,wDACE,0BC/GV,CDmHQ,wDACE,SCjHV,CDuHI,+BACE,yCACE,CAGF,oDAAA,CADA,mBCtHN,CD0HM,mCACE,aCxHR,CD6HI,+BAKE,kDAAA,CADA,gCAAA,CAFA,aAAA,CAIA,SAAA,CAHA,mBAAA,CAFA,iBAAA,CAMA,mBC3HN,CDgIM,8DACE,2BC9HR,CD6HM,8DACE,2BC3HR,CD0HM,8DACE,2BCxHR,CDuHM,8DACE,uBCrHR,CDoHM,8DACE,0BClHR,CDiHM,6DACE,0BC/GR,CD8GM,8DACE,0BC5GR,CE1JA,WACE,wCF6JF,CE1JE,kBAEE,kBF4JJ,CEzJE,+BAJE,+BFgKJ,CEzJI,sCAEE,kBF0JN,CExJM,wDACE,0CAAA,CACA,eF0JR,CErJE,oBAME,kBAAA,CACA,0CAAA,CANA,oBAAA,CAEA,aAAA,CACA,cAAA,CAIA,mBAAA,CAHA,qBAAA,CAHA,YF6JJ,CErJI,wBACE,aAAA,CACA,eFuJN,CG1LA,eAEE,uYACE,CAFF,gBH8LF,CGnLE,4CACE,yYHqLJ,CGzKA,UAEE,gCAAA,CADA,cH6KF,CGzKE,aAGE,kBAAA,CADA,eAAA,CADA,kBH6KJ,CCnBI,0CE3JF,aAOI,gBH2KJ,CACF,CGvKE,mBACE,mBHyKJ,CC9CI,mCE7IJ,UAwBI,mBAAA,CADA,YHyKF,CGrKE,mBAGE,iBAAA,CAFA,eAAA,CACA,mBHwKJ,CGnKE,iBACE,OAAA,CAEA,0BAAA,CADA,WHsKJ,CACF,CC9DI,sCEhGA,iBACE,0BHiKJ,CACF,CG7JE,qBAGE,gCAAA,CADA,kBAAA,CADA,gBHiKJ,CG5JI,sDAEE,0CAAA,CACA,sCAAA,CAFA,+BHgKN,CG1JI,8BAEE,2CAAA,CACA,uCAAA,CAFA,aH8JN,CIrPE,4BAEE,2CAAA,CACA,mBAAA,CACA,8BAAA,CAHA,iBAAA,CAIA,2BJwPJ,CIrPI,2EACE,8BJuPN,CInPI,sCACE,qCAAA,CACA,eJqPN,CIlPM,mEACE,kCJoPR,CI9OE,mCAIE,kCAAA,CAAA,0BAAA,CAHA,eAAA,CACA,eAAA,CAKA,yDAAA,CADA,oBAAA,CADA,kBJiPJ,CI5OI,+CACE,mBJ8ON,CI1OI,sDAEE,YAAA,CADA,WJ6ON,CIxOI,4DACE,oDJ0ON,CIvOM,kEACE,0CJyOR,CIpOI,yCAKE,yCAAA,CADA,gBAAA,CAHA,iBAAA,CAEA,WAAA,CADA,SJyON,CIlOI,mDAKE,aJmON,CIxOI,mDAKE,cJmON,CIxOI,yCAME,eAAA,CAJA,QAAA,CADA,SJuON,CI9NI,mDAKE,aJ+NN,CIpOI,mDAKE,cJ+NN,CIpOI,yCAME,+DAAA,CAJA,QAAA,CADA,mBJmON,CI3NM,oDACE,kBJ6NR,CIzNM,2CACE,kBJ2NR,CIvNM,6CAEE,YAAA,CADA,WJ0NR,CItNQ,0FACE,gBJwNV,CKzTI,2BACE,YAAA,CACA,iBL4TN,CKxTI,6BACE,cL0TN,CKtTI,sCACE,YAAA,CACA,cAAA,CACA,sBLwTN,CKrTM,wCACE,aAAA,CACA,aLuTR,CK9SI,mCACE,YLgTN,CK7SM,yCAEE,UAAA,CACA,UAAA,CAFA,aLiTR,CK1SI,6CAEE,ULmTN,CKrTI,6CAEE,WLmTN,CKrTI,mCAOE,kBAAA,CANA,aAAA,CAGA,aAAA,CACA,YAAA,CACA,eAAA,CAKA,kBAAA,CAHA,sCACE,CANF,YLkTN,CKvSM,kFACE,oBLySR,CKtSQ,0FACE,mBLwSV,CKnSM,4CAME,+CAAA,CAFA,yCAAA,CAHA,eAAA,CACA,eAAA,CACA,kBAAA,CAEA,iBLsSR,CKjSM,uCACE,aAAA,CAGA,mCAAA,CADA,WAAA,CAEA,uBAAA,CAHA,ULsSR,CK7RE,oCACE,eL+RJ,CK3RE,sEAEE,eL6RJ",
+ "file": "custom.css"
+} \ No newline at end of file
diff --git a/dev/src/overrides/assets/stylesheets/custom.scss b/dev/src/overrides/assets/stylesheets/custom.scss
deleted file mode 100644
index 8235e7d0..00000000
--- a/dev/src/overrides/assets/stylesheets/custom.scss
+++ /dev/null
@@ -1,44 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Dependencies
-// ----------------------------------------------------------------------------
-
-@import "material-color";
-@import "material-shadows";
-
-// ----------------------------------------------------------------------------
-// Local imports
-// ----------------------------------------------------------------------------
-
-@import "utilities/break";
-@import "utilities/convert";
-
-@import "config";
-
-@import "custom/typeset";
-
-@import "custom/layout/banner";
-@import "custom/layout/hero";
-@import "custom/layout/iconsearch";
-@import "custom/layout/sponsorship";
diff --git a/dev/src/overrides/assets/stylesheets/custom/_typeset.scss b/dev/src/overrides/assets/stylesheets/custom/_typeset.scss
deleted file mode 100644
index bef30073..00000000
--- a/dev/src/overrides/assets/stylesheets/custom/_typeset.scss
+++ /dev/null
@@ -1,294 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Keyframes
-// ----------------------------------------------------------------------------
-
-// Pumping heart animation
-@keyframes heart {
- 0%,
- 40%,
- 80%,
- 100% {
- transform: scale(1);
- }
-
- 20%,
- 60% {
- transform: scale(1.15);
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Twitter icon
- .twitter {
- color: #00acee;
- }
-
- // Mastodon icon - it's not the exact brand color, because that doesn't work
- // well on dark backgrounds, so we lightened it up a bit.
- .mastodon {
- color: #897ff8;
- }
-
- // Insiders video
- .mdx-video {
- width: auto;
-
- // Insiders video container
- &__inner {
- position: relative;
- width: 100%;
- height: 0;
- padding-bottom: 56.138%;
- }
-
- // Insiders video iframe
- iframe {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- overflow: hidden;
- border: none;
- }
- }
-
- // Pumping heart
- .mdx-heart {
- animation: heart 1000ms infinite;
- }
-
- // Insiders color (for links, etc.) // remove
- .mdx-insiders {
- color: $clr-pink-500;
- }
-
- // BETA #####################################################################
-
- // Badge
- .mdx-badge {
- font-size: 0.85em;
-
- // Badge with heart
- &--heart {
- --md-typeset-a-color: hsla(#{hex2hsl($clr-pink-500)}, 1);
- --md-accent-fg-color: hsla(#{hex2hsl($clr-pink-a200)}, 1);
- --md-accent-fg-color--transparent: hsla(#{hex2hsl($clr-pink-500)}, 0.1);
-
- // Animate icon
- .twemoji {
- animation: heart 1000ms infinite;
- }
- }
-
- // Badge moved to the right
- &--right {
- float: right;
- margin-left: 0.35em;
- }
-
- // Badge icon
- &__icon {
- padding: px2rem(4px);
- background: var(--md-accent-fg-color--transparent);
- border-start-start-radius: px2rem(2px);
- border-end-start-radius: px2rem(2px);
-
- // If icon is alone, round corners
- &:last-child {
- border-radius: px2rem(2px);
- }
- }
-
- // Badge text
- &__text {
- padding: px2rem(4px) px2rem(6px);
- border-start-end-radius: px2rem(2px);
- border-end-end-radius: px2rem(2px);
- box-shadow: 0 0 0 1px inset var(--md-accent-fg-color--transparent);
- }
- }
-
- // BETA #####################################################################
-
- // Switch buttons
- .mdx-switch button {
- cursor: pointer;
- transition: opacity 250ms;
-
- // Button on focus/hover
- &:is(:focus, :hover) {
- opacity: 0.75;
- }
-
- // Code block
- > code {
- display: block;
- color: var(--md-primary-bg-color);
- background-color: var(--md-primary-fg-color);
- }
- }
-
- // Two-column layout
- .mdx-columns {
-
- // Column
- ol,
- ul {
- columns: 2;
-
- // [mobile portrait -]: Reset columns on mobile
- @include break-to-device(mobile portrait) {
- columns: initial;
- }
- }
-
- // Column item
- li {
- break-inside: avoid;
- }
- }
-
- // Language list
- .mdx-flags {
- margin: 2em auto;
-
- // Language list
- ol {
- list-style: none;
-
- // Language list item
- li {
- margin-bottom: 1em;
- }
- }
-
- // Language item
- &__item {
- display: flex;
- gap: px2rem(12px);
- }
-
- // Language content
- &__content {
- display: flex;
- flex: 1;
- flex-direction: column;
-
- // Language name
- span {
- display: inline-flex;
- align-items: baseline;
- justify-content: space-between;
- }
-
- // Language link
- > span:nth-child(2) {
- font-size: 80%;
- }
-
- // Language code
- code {
- float: right;
- }
- }
- }
-
- // Social card
- .mdx-social {
- position: relative;
- height: min(#{px2rem(540px)}, 80vw);
-
- // Social card image on hover
- &:hover .mdx-social__image {
- background-color: rgba(228, 228, 228, 0.05);
- }
-
- // Social card layer
- &__layer {
- position: absolute;
- margin-top: px2rem(80px);
- transition: 250ms cubic-bezier(0.7, 0, 0.3, 1);
- transform-style: preserve-3d;
-
- // Social card layer on hover
- &:hover {
-
- // Social card label
- .mdx-social__label {
- opacity: 1;
- }
-
- // Social card image
- .mdx-social__image {
- background-color: rgba(127, 127, 127, 0.99);
- }
-
- // Hide top layers
- ~ .mdx-social__layer {
- opacity: 0;
- }
- }
- }
-
- // Social card image
- &__image {
- box-shadow:
- px2rem(-5px) px2rem(5px) px2rem(10px)
- rgba(0, 0, 0, 0.05);
- transition: all 250ms;
- transform: rotate(-40deg) skew(15deg, 15deg) scale(0.7);
-
- // Actual image
- img {
- display: block;
- }
- }
-
- // Social card label
- &__label {
- position: absolute;
- display: block;
- padding: px2rem(4px) px2rem(8px);
- color: var(--md-default-bg-color);
- background-color: var(--md-default-fg-color--light);
- opacity: 0;
- transition: all 250ms;
- }
-
- // Transform on hover
- @for $i from 6 through 0 {
- &:hover .mdx-social__layer:nth-child(#{$i}) {
- transform: translateY(#{($i - 3) * -10}px);
- }
- }
- }
-}
diff --git a/dev/src/overrides/assets/stylesheets/custom/layout/_banner.scss b/dev/src/overrides/assets/stylesheets/custom/layout/_banner.scss
deleted file mode 100644
index b67d7fff..00000000
--- a/dev/src/overrides/assets/stylesheets/custom/layout/_banner.scss
+++ /dev/null
@@ -1,66 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Banner for announcements and warnings
-.md-banner {
- color: var(--md-footer-fg-color--lighter);
-
- // Don't wrap name of blog article
- strong {
- color: var(--md-footer-fg-color);
- white-space: nowrap;
- }
-
- a {
- color: var(--md-footer-fg-color);
-
- &:focus,
- &:hover {
- color: currentcolor;
-
- .twemoji {
- background-color: var(--md-footer-fg-color);
- box-shadow: none;
- }
- }
- }
-
- .twemoji {
- display: inline-block;
- width: px2rem(24px);
- height: px2rem(24px);
- padding: px2rem(5px);
- vertical-align: bottom;
- border-radius: 100%;
- box-shadow: 0 0 0 px2rem(1px) currentcolor inset;
- transition: all 250ms;
-
- svg {
- display: block;
- max-height: initial;
- }
- }
-}
diff --git a/dev/src/overrides/assets/stylesheets/custom/layout/_hero.scss b/dev/src/overrides/assets/stylesheets/custom/layout/_hero.scss
deleted file mode 100644
index 428cd37e..00000000
--- a/dev/src/overrides/assets/stylesheets/custom/layout/_hero.scss
+++ /dev/null
@@ -1,123 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Landing page container
-.mdx-container {
- padding-top: px2rem(20px);
- background:
- url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(0, 0%, 100%, 1)' /></svg>") no-repeat bottom,
- linear-gradient(
- to bottom,
- var(--md-primary-fg-color),
- hsla(280, 67%, 55%, 1) 99%,
- var(--md-default-bg-color) 99%
- );
-
- // Adjust background for slate theme
- [data-md-color-scheme="slate"] & {
- background:
- url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1123 258'><path d='M1124,2c0,0 0,256 0,256l-1125,0l0,-48c0,0 16,5 55,5c116,0 197,-92 325,-92c121,0 114,46 254,46c140,0 214,-167 572,-166Z' style='fill: hsla(230, 15%, 14%, 1)' /></svg>") no-repeat bottom,
- linear-gradient(
- to bottom,
- var(--md-primary-fg-color),
- hsla(230, 15%, 25%, 1) 99%,
- var(--md-default-bg-color) 99%
- );
- }
-}
-
-// Landing page hero
-.mdx-hero {
- margin: 0 px2rem(16px);
- color: var(--md-primary-bg-color);
-
- // Hero headline
- h1 {
- margin-bottom: px2rem(20px);
- font-weight: 700;
- color: currentcolor;
-
- // [mobile portrait -]: Larger hero headline
- @include break-to-device(mobile portrait) {
- font-size: px2rem(28px);
- }
- }
-
- // Hero content
- &__content {
- padding-bottom: px2rem(120px);
- }
-
- // [tablet landscape +]: Columnar display
- @include break-from-device(tablet landscape) {
- display: flex;
- align-items: stretch;
-
- // Adjust spacing and set dimensions
- &__content {
- max-width: px2rem(380px);
- padding-bottom: 14vw;
- margin-top: px2rem(70px);
- }
-
- // Hero image
- &__image {
- order: 1;
- width: px2rem(760px);
- transform: translateX(#{px2rem(80px)});
- }
- }
-
- // [screen +]: Columnar display and adjusted spacing
- @include break-from-device(screen) {
-
- // Hero image
- &__image {
- transform: translateX(#{px2rem(160px)});
- }
- }
-
- // Button
- .md-button {
- margin-top: px2rem(10px);
- margin-right: px2rem(10px);
- color: var(--md-primary-bg-color);
-
- // Button on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-bg-color);
- background-color: var(--md-accent-fg-color);
- border-color: var(--md-accent-fg-color);
- }
-
- // Primary button
- &--primary {
- color: hsla(280, 37%, 48%, 1);
- background-color: var(--md-primary-bg-color);
- border-color: var(--md-primary-bg-color);
- }
- }
-}
diff --git a/dev/src/overrides/assets/stylesheets/custom/layout/_iconsearch.scss b/dev/src/overrides/assets/stylesheets/custom/layout/_iconsearch.scss
deleted file mode 100644
index 651c4135..00000000
--- a/dev/src/overrides/assets/stylesheets/custom/layout/_iconsearch.scss
+++ /dev/null
@@ -1,136 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Icon search
- .mdx-iconsearch {
- position: relative;
- background-color: var(--md-default-bg-color);
- border-radius: px2rem(2px);
- box-shadow: var(--md-shadow-z1);
- transition: box-shadow 125ms;
-
- // Icon search on focus/hover
- &:is(:focus-within, :hover) {
- box-shadow: var(--md-shadow-z2);
- }
-
- // Icon search input
- .md-input {
- background: var(--md-default-bg-color);
- box-shadow: none;
-
- // Slate theme, i.e. dark mode
- [data-md-color-scheme="slate"] & {
- background: var(--md-code-bg-color);
- }
- }
- }
-
- // Icon search result
- .mdx-iconsearch-result {
- max-height: 50vh;
- overflow-y: auto;
- // Hack: promote to own layer to reduce jitter
- backface-visibility: hidden;
- touch-action: pan-y;
- scrollbar-width: thin;
- scrollbar-color: var(--md-default-fg-color--lighter) transparent;
-
- // Icon search result inside tooltip
- .md-tooltip & {
- max-height: px2rem(205px);
- }
-
- // Webkit scrollbar
- &::-webkit-scrollbar {
- width: px2rem(4px);
- height: px2rem(4px);
- }
-
- // Webkit scrollbar thumb
- &::-webkit-scrollbar-thumb {
- background-color: var(--md-default-fg-color--lighter);
-
- // Webkit scrollbar thumb on hover
- &:hover {
- background-color: var(--md-accent-fg-color);
- }
- }
-
- // Icon search result metadata
- &__meta {
- position: absolute;
- top: px2rem(8px);
- right: px2rem(12px);
- font-size: px2rem(12.8px);
- color: var(--md-default-fg-color--lighter);
- }
-
- // Icon search result list
- &__list {
- padding: 0;
- margin: 0;
- // Hack: necessary because of increased specificity due to the PostCSS
- // plugin which prefixes this with `[dir=...]` selectors.
- margin-inline-start: 0;
- list-style: none;
- }
-
- // Icon search result item
- &__item {
- padding: px2rem(4px) px2rem(12px);
- margin: 0;
- // Hack: necessary because of increased specificity due to the PostCSS
- // plugin which prefixes this with `[dir=...]` selectors.
- margin-inline-start: 0;
- border-bottom: px2rem(1px) solid var(--md-default-fg-color--lightest);
-
- // Omit border on last child
- &:last-child {
- border-bottom: none;
- }
-
- // Item content
- > * {
- margin-right: px2rem(12px);
- }
-
- // Set icon dimensions to fit
- img {
- width: px2rem(18px);
- height: px2rem(18px);
-
- // Slate theme, i.e. dark mode
- [data-md-color-scheme="slate"] &[src*="squidfunk"] {
- filter: invert(1); /* stylelint-disable-line */
- }
- }
- }
- }
-}
diff --git a/dev/src/overrides/assets/stylesheets/custom/layout/_sponsorship.scss b/dev/src/overrides/assets/stylesheets/custom/layout/_sponsorship.scss
deleted file mode 100644
index e2b16570..00000000
--- a/dev/src/overrides/assets/stylesheets/custom/layout/_sponsorship.scss
+++ /dev/null
@@ -1,128 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Premium sponsors
- .mdx-premium {
-
- // Paragraphs
- p {
- margin: 2em 0;
- text-align: center;
- }
-
- // Premium sponsor image
- img {
- height: px2rem(65px);
- }
-
- // Premium sponsor list
- p:last-child {
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
-
- // Premium sponsor link
- > a {
- display: block;
- flex-shrink: 0;
- }
- }
- }
-
- // Sponsorship
- .mdx-sponsorship {
-
- // Sponsorship list
- &__list {
- margin: 2em 0;
-
- // Clearfix, because we can't use overflow: auto
- &::after {
- display: block;
- clear: both;
- content: "";
- }
- }
-
- // Sponsorship item
- &__item {
- display: block;
- float: inline-start;
- width: px2rem(32px);
- height: px2rem(32px);
- margin: px2rem(4px);
- overflow: hidden;
- border-radius: 100%;
- transition:
- color 125ms,
- transform 125ms;
- transform: scale(1);
-
- // Sponsor item on focus/hover
- &:is(:focus, :hover) {
- transform: scale(1.1);
-
- // Sponsor avatar
- img {
- filter: grayscale(0%);
- }
- }
-
- // Private sponsor
- &--private {
- font-size: px2rem(12px);
- font-weight: 700;
- line-height: px2rem(32px);
- color: var(--md-default-fg-color--lighter);
- text-align: center;
- background: var(--md-default-fg-color--lightest);
- }
-
- // Sponsor avatar
- img {
- display: block;
- width: 100%;
- height: auto;
- filter: grayscale(100%) opacity(75%);
- transition: filter 125ms;
- }
- }
- }
-
- // Sponsorship button
- .mdx-sponsorship-button {
- font-weight: 400;
- }
-
- // Sponsorship count and total
- .mdx-sponsorship-count,
- .mdx-sponsorship-total {
- font-weight: 700;
- }
-}
diff --git a/dev/src/overrides/home.html b/dev/src/overrides/home.html
index 3f54ca82..debea713 100644
--- a/dev/src/overrides/home.html
+++ b/dev/src/overrides/home.html
@@ -1,106 +1,26 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
{% extends "main.html" %}
-
-<!-- Render hero under tabs -->
{% block tabs %}
{{ super() }}
-
- <!-- Additional styles for landing page -->
- <style>
-
- /* Application header should be static for the landing page */
- .md-header {
- position: initial;
- }
-
- /* Remove spacing, as we cannot hide it completely */
- .md-main__inner {
- margin: 0;
- }
-
- /* Hide main content for now */
- .md-content {
- display: none;
- }
-
- /* Hide table of contents */
- @media screen and (min-width: 60em) {
- .md-sidebar--secondary {
- display: none;
- }
- }
-
- /* Hide navigation */
- @media screen and (min-width: 76.25em) {
- .md-sidebar--primary {
- display: none;
- }
- }
- </style>
-
- <!-- Hero for landing page -->
+ <style>.md-header{position:initial}.md-main__inner{margin:0}.md-content{display:none}@media screen and (min-width:60em){.md-sidebar--secondary{display:none}}@media screen and (min-width:76.25em){.md-sidebar--primary{display:none}}</style>
<section class="mdx-container">
<div class="md-grid md-typeset">
<div class="mdx-hero">
-
- <!-- Hero image -->
- <div class="mdx-hero__image">
- <img
- src="assets/images/illustration.png"
- alt=""
- width="1659"
- height="1200"
- draggable="false"
- >
- </div>
-
- <!-- Hero content -->
<div class="mdx-hero__content">
- <h1>Technical documentation that just works</h1>
- <p>{{ config.site_description }}. Set up in 5 minutes.</p>
- <a
- href="{{ page.next_page.url | url }}"
- title="{{ page.next_page.title | e }}"
- class="md-button md-button--primary"
- >
- Quick start
+ <h1>水系核心</h1>
+ <p>{{ config.site_description }}.</p>
+ <a href="{{ page.next_page.url | url }}" title="{{ page.next_page.title | e }}" class="md-button md-button--primary">
+ 快速开始
</a>
- <a
- href="{{ 'insiders/' | url }}"
- title="Material for MkDocs Insiders"
- class="md-button"
- >
- Get Insiders
+ <a href="{{ 'Standard/what-is-rule-package/' | url }}" title="通用规则包标准" class="md-button">
+ 查看标准
</a>
</div>
</div>
</div>
</section>
{% endblock %}
-
-<!-- Content -->
{% block content %}{% endblock %}
-
-<!-- Application footer -->
{% block footer %}{% endblock %}
diff --git a/dev/src/overrides/hooks/translations.html b/dev/src/overrides/hooks/translations.html
index ab41c77d..b77fcb4a 100644
--- a/dev/src/overrides/hooks/translations.html
+++ b/dev/src/overrides/hooks/translations.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Render translation language -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro render_language(language) %}
<div class="mdx-flags__item" markdown>
:flag_{{ language.flag }}:{ .lg .middle }
@@ -41,8 +21,6 @@
</span>
</div>
{% endmacro %}
-
-<!-- Render translations -->
{% macro render(translations, start = 1) %}
<div class="mdx-columns mdx-flags" markdown>
<ol markdown>
diff --git a/dev/src/overrides/main.html b/dev/src/overrides/main.html
index 39b68b5a..e723f098 100644
--- a/dev/src/overrides/main.html
+++ b/dev/src/overrides/main.html
@@ -1,59 +1,17 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
{% extends "base.html" %}
-
-<!-- Custom front matter -->
{% block extrahead %}
-
- <!-- Extra style sheets (can't be set in mkdocs.yml due to content hash) -->
- <link
- rel="stylesheet"
- href="{{ 'assets/stylesheets/custom.css' | url }}"
- />
+ <link rel="stylesheet" href="{{ 'assets/stylesheets/custom.00c04c01.min.css' | url }}">
{% endblock %}
-
-<!-- Announcement bar -->
-{% block announce %}
- For updates follow <strong>@squidfunk</strong> on
- <a rel="me" href="https://fosstodon.org/@squidfunk">
- <span class="twemoji mastodon">
- {% include ".icons/fontawesome/brands/mastodon.svg" %}
- </span>
- <strong>Fosstodon</strong>
- </a>
- and
- <a href="https://twitter.com/squidfunk">
- <span class="twemoji twitter">
- {% include ".icons/fontawesome/brands/twitter.svg" %}
- </span>
- <strong>Twitter</strong>
+{% block outdated %}
+ 当前阅览的并不是稳定版,
+ <a href="{{ '../' ~ base_url }}">
+ <strong>单击此处跳转到稳定版文档.</strong>
</a>
{% endblock %}
-
-<!-- Theme-related JavaScript -->
{% block scripts %}
{{ super() }}
-
- <!-- Extra JavaScript (can't be set in mkdocs.yml due to content hash) -->
- <script src="{{ 'assets/javascripts/custom.js' | url }}"></script>
+ <script src="{{ 'assets/javascripts/custom.9c11c319.min.js' | url }}"></script>
{% endblock %}
diff --git a/dev/src/templates/404.html b/dev/src/templates/404.html
index e87e7783..ae765c44 100644
--- a/dev/src/templates/404.html
+++ b/dev/src/templates/404.html
@@ -1,28 +1,7 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
{% extends "main.html" %}
-
-<!-- Content -->
{% block content %}
<h1>404 - Not found</h1>
{% endblock %}
diff --git a/dev/src/templates/assets/javascripts/_/index.ts b/dev/src/templates/assets/javascripts/_/index.ts
deleted file mode 100644
index be0f4a42..00000000
--- a/dev/src/templates/assets/javascripts/_/index.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { getElement, getLocation } from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Feature flag
- */
-export type Flag =
- | "announce.dismiss" /* Dismissable announcement bar */
- | "content.code.annotate" /* Code annotations */
- | "content.code.copy" /* Code copy button */
- | "content.lazy" /* Lazy content elements */
- | "content.tabs.link" /* Link content tabs */
- | "header.autohide" /* Hide header */
- | "navigation.expand" /* Automatic expansion */
- | "navigation.indexes" /* Section pages */
- | "navigation.instant" /* Instant navigation */
- | "navigation.instant.progress" /* Instant navigation progress */
- | "navigation.sections" /* Section navigation */
- | "navigation.tabs" /* Tabs navigation */
- | "navigation.tabs.sticky" /* Tabs navigation (sticky) */
- | "navigation.top" /* Back-to-top button */
- | "navigation.tracking" /* Anchor tracking */
- | "search.highlight" /* Search highlighting */
- | "search.share" /* Search sharing */
- | "search.suggest" /* Search suggestions */
- | "toc.follow" /* Following table of contents */
- | "toc.integrate" /* Integrated table of contents */
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Translation
- */
-export type Translation =
- | "clipboard.copy" /* Copy to clipboard */
- | "clipboard.copied" /* Copied to clipboard */
- | "search.result.placeholder" /* Type to start searching */
- | "search.result.none" /* No matching documents */
- | "search.result.one" /* 1 matching document */
- | "search.result.other" /* # matching documents */
- | "search.result.more.one" /* 1 more on this page */
- | "search.result.more.other" /* # more on this page */
- | "search.result.term.missing" /* Missing */
- | "select.version" /* Version selector */
-
-/**
- * Translations
- */
-export type Translations =
- Record<Translation, string>
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Versioning
- */
-export interface Versioning {
- provider: "mike" /* Version provider */
- default?: string | string[] /* Default version */
-}
-
-/**
- * Configuration
- */
-export interface Config {
- base: string /* Base URL */
- features: Flag[] /* Feature flags */
- translations: Translations /* Translations */
- search: string /* Search worker URL */
- tags?: Record<string, string> /* Tags mapping */
- version?: Versioning /* Versioning */
-}
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve global configuration and make base URL absolute
- */
-const script = getElement("#__config")
-const config: Config = JSON.parse(script.textContent!)
-config.base = `${new URL(config.base, getLocation())}`
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve global configuration
- *
- * @returns Global configuration
- */
-export function configuration(): Config {
- return config
-}
-
-/**
- * Check whether a feature flag is enabled
- *
- * @param flag - Feature flag
- *
- * @returns Test result
- */
-export function feature(flag: Flag): boolean {
- return config.features.includes(flag)
-}
-
-/**
- * Retrieve the translation for the given key
- *
- * @param key - Key to be translated
- * @param value - Positional value, if any
- *
- * @returns Translation
- */
-export function translation(
- key: Translation, value?: string | number
-): string {
- return typeof value !== "undefined"
- ? config.translations[key].replace("#", value.toString())
- : config.translations[key]
-}
diff --git a/dev/src/templates/assets/javascripts/browser/document/index.ts b/dev/src/templates/assets/javascripts/browser/document/index.ts
deleted file mode 100644
index 354c9b5c..00000000
--- a/dev/src/templates/assets/javascripts/browser/document/index.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- ReplaySubject,
- Subject,
- fromEvent
-} from "rxjs"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch document
- *
- * Documents are implemented as subjects, so all downstream observables are
- * automatically updated when a new document is emitted.
- *
- * @returns Document subject
- */
-export function watchDocument(): Subject<Document> {
- const document$ = new ReplaySubject<Document>(1)
- fromEvent(document, "DOMContentLoaded", { once: true })
- .subscribe(() => document$.next(document))
-
- /* Return document */
- return document$
-}
diff --git a/dev/src/templates/assets/javascripts/browser/element/_/index.ts b/dev/src/templates/assets/javascripts/browser/element/_/index.ts
deleted file mode 100644
index b7beb462..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/_/index.ts
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve all elements matching the query selector
- *
- * @template T - Element type
- *
- * @param selector - Query selector
- * @param node - Node of reference
- *
- * @returns Elements
- */
-export function getElements<T extends keyof HTMLElementTagNameMap>(
- selector: T, node?: ParentNode
-): HTMLElementTagNameMap[T][]
-
-export function getElements<T extends HTMLElement>(
- selector: string, node?: ParentNode
-): T[]
-
-export function getElements<T extends HTMLElement>(
- selector: string, node: ParentNode = document
-): T[] {
- return Array.from(node.querySelectorAll<T>(selector))
-}
-
-/**
- * Retrieve an element matching a query selector or throw a reference error
- *
- * Note that this function assumes that the element is present. If unsure if an
- * element is existent, use the `getOptionalElement` function instead.
- *
- * @template T - Element type
- *
- * @param selector - Query selector
- * @param node - Node of reference
- *
- * @returns Element
- */
-export function getElement<T extends keyof HTMLElementTagNameMap>(
- selector: T, node?: ParentNode
-): HTMLElementTagNameMap[T]
-
-export function getElement<T extends HTMLElement>(
- selector: string, node?: ParentNode
-): T
-
-export function getElement<T extends HTMLElement>(
- selector: string, node: ParentNode = document
-): T {
- const el = getOptionalElement<T>(selector, node)
- if (typeof el === "undefined")
- throw new ReferenceError(
- `Missing element: expected "${selector}" to be present`
- )
-
- /* Return element */
- return el
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Retrieve an optional element matching the query selector
- *
- * @template T - Element type
- *
- * @param selector - Query selector
- * @param node - Node of reference
- *
- * @returns Element or nothing
- */
-export function getOptionalElement<T extends keyof HTMLElementTagNameMap>(
- selector: T, node?: ParentNode
-): HTMLElementTagNameMap[T] | undefined
-
-export function getOptionalElement<T extends HTMLElement>(
- selector: string, node?: ParentNode
-): T | undefined
-
-export function getOptionalElement<T extends HTMLElement>(
- selector: string, node: ParentNode = document
-): T | undefined {
- return node.querySelector<T>(selector) || undefined
-}
-
-/**
- * Retrieve the currently active element
- *
- * @returns Element or nothing
- */
-export function getActiveElement(): HTMLElement | undefined {
- return document.activeElement instanceof HTMLElement
- ? document.activeElement || undefined
- : undefined
-}
diff --git a/dev/src/templates/assets/javascripts/browser/element/focus/index.ts b/dev/src/templates/assets/javascripts/browser/element/focus/index.ts
deleted file mode 100644
index f31fe276..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/focus/index.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- debounceTime,
- distinctUntilChanged,
- fromEvent,
- map,
- merge,
- shareReplay,
- startWith
-} from "rxjs"
-
-import { getActiveElement } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Focus observable
- *
- * Previously, this observer used `focus` and `blur` events to determine whether
- * an element is focused, but this doesn't work if there are focusable elements
- * within the elements itself. A better solutions are `focusin` and `focusout`
- * events, which bubble up the tree and allow for more fine-grained control.
- *
- * `debounceTime` is necessary, because when a focus change happens inside an
- * element, the observable would first emit `false` and then `true` again.
- */
-const observer$ = merge(
- fromEvent(document.body, "focusin"),
- fromEvent(document.body, "focusout")
-)
- .pipe(
- debounceTime(1),
- startWith(undefined),
- map(() => getActiveElement() || document.body),
- shareReplay(1)
- )
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch element focus
- *
- * @param el - Element
- *
- * @returns Element focus observable
- */
-export function watchElementFocus(
- el: HTMLElement
-): Observable<boolean> {
- return observer$
- .pipe(
- map(active => el.contains(active)),
- distinctUntilChanged()
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/element/index.ts b/dev/src/templates/assets/javascripts/browser/element/index.ts
deleted file mode 100644
index 50ce84b2..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./focus"
-export * from "./offset"
-export * from "./size"
-export * from "./visibility"
diff --git a/dev/src/templates/assets/javascripts/browser/element/offset/_/index.ts b/dev/src/templates/assets/javascripts/browser/element/offset/_/index.ts
deleted file mode 100644
index 6dd229d5..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/offset/_/index.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- animationFrameScheduler,
- auditTime,
- fromEvent,
- map,
- merge,
- startWith
-} from "rxjs"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Element offset
- */
-export interface ElementOffset {
- x: number /* Horizontal offset */
- y: number /* Vertical offset */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve element offset
- *
- * @param el - Element
- *
- * @returns Element offset
- */
-export function getElementOffset(
- el: HTMLElement
-): ElementOffset {
- return {
- x: el.offsetLeft,
- y: el.offsetTop
- }
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Watch element offset
- *
- * @param el - Element
- *
- * @returns Element offset observable
- */
-export function watchElementOffset(
- el: HTMLElement
-): Observable<ElementOffset> {
- return merge(
- fromEvent(window, "load"),
- fromEvent(window, "resize")
- )
- .pipe(
- auditTime(0, animationFrameScheduler),
- map(() => getElementOffset(el)),
- startWith(getElementOffset(el))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/element/offset/content/index.ts b/dev/src/templates/assets/javascripts/browser/element/offset/content/index.ts
deleted file mode 100644
index 557301a6..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/offset/content/index.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- animationFrameScheduler,
- auditTime,
- fromEvent,
- map,
- merge,
- startWith
-} from "rxjs"
-
-import { ElementOffset } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve element content offset (= scroll offset)
- *
- * @param el - Element
- *
- * @returns Element content offset
- */
-export function getElementContentOffset(
- el: HTMLElement
-): ElementOffset {
- return {
- x: el.scrollLeft,
- y: el.scrollTop
- }
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Watch element content offset
- *
- * @param el - Element
- *
- * @returns Element content offset observable
- */
-export function watchElementContentOffset(
- el: HTMLElement
-): Observable<ElementOffset> {
- return merge(
- fromEvent(el, "scroll"),
- fromEvent(window, "resize")
- )
- .pipe(
- auditTime(0, animationFrameScheduler),
- map(() => getElementContentOffset(el)),
- startWith(getElementContentOffset(el))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/element/offset/index.ts b/dev/src/templates/assets/javascripts/browser/element/offset/index.ts
deleted file mode 100644
index 602ff2cf..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/offset/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./content"
diff --git a/dev/src/templates/assets/javascripts/browser/element/size/_/index.ts b/dev/src/templates/assets/javascripts/browser/element/size/_/index.ts
deleted file mode 100644
index 35a5e68b..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/size/_/index.ts
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- NEVER,
- Observable,
- Subject,
- defer,
- filter,
- finalize,
- map,
- merge,
- of,
- shareReplay,
- startWith,
- switchMap,
- tap
-} from "rxjs"
-
-import { watchScript } from "../../../script"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Element offset
- */
-export interface ElementSize {
- width: number /* Element width */
- height: number /* Element height */
-}
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Resize observer entry subject
- */
-const entry$ = new Subject<ResizeObserverEntry>()
-
-/**
- * Resize observer observable
- *
- * This observable will create a `ResizeObserver` on the first subscription
- * and will automatically terminate it when there are no more subscribers.
- * It's quite important to centralize observation in a single `ResizeObserver`,
- * as the performance difference can be quite dramatic, as the link shows.
- *
- * If the browser doesn't have a `ResizeObserver` implementation available, a
- * polyfill is automatically downloaded from unpkg.com. This is also compatible
- * with the built-in privacy plugin, which will download the polyfill and put
- * it alongside the built site for self-hosting.
- *
- * @see https://bit.ly/3iIYfEm - Google Groups on performance
- */
-const observer$ = defer(() => (
- typeof ResizeObserver === "undefined"
- ? watchScript("https://unpkg.com/resize-observer-polyfill")
- : of(undefined)
-))
- .pipe(
- map(() => new ResizeObserver(entries => {
- for (const entry of entries)
- entry$.next(entry)
- })),
- switchMap(observer => merge(NEVER, of(observer))
- .pipe(
- finalize(() => observer.disconnect())
- )
- ),
- shareReplay(1)
- )
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve element size
- *
- * @param el - Element
- *
- * @returns Element size
- */
-export function getElementSize(
- el: HTMLElement
-): ElementSize {
- return {
- width: el.offsetWidth,
- height: el.offsetHeight
- }
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Watch element size
- *
- * This function returns an observable that subscribes to a single internal
- * instance of `ResizeObserver` upon subscription, and emit resize events until
- * termination. Note that this function should not be called with the same
- * element twice, as the first unsubscription will terminate observation.
- *
- * Sadly, we can't use the `DOMRect` objects returned by the observer, because
- * we need the emitted values to be consistent with `getElementSize`, which will
- * return the used values (rounded) and not actual values (unrounded). Thus, we
- * use the `offset*` properties. See the linked GitHub issue.
- *
- * @see https://bit.ly/3m0k3he - GitHub issue
- *
- * @param el - Element
- *
- * @returns Element size observable
- */
-export function watchElementSize(
- el: HTMLElement
-): Observable<ElementSize> {
- return observer$
- .pipe(
- tap(observer => observer.observe(el)),
- switchMap(observer => entry$
- .pipe(
- filter(({ target }) => target === el),
- finalize(() => observer.unobserve(el)),
- map(() => getElementSize(el))
- )
- ),
- startWith(getElementSize(el))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/element/size/content/index.ts b/dev/src/templates/assets/javascripts/browser/element/size/content/index.ts
deleted file mode 100644
index 5ed388cf..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/size/content/index.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { ElementSize } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve element content size (= scroll width and height)
- *
- * @param el - Element
- *
- * @returns Element content size
- */
-export function getElementContentSize(
- el: HTMLElement
-): ElementSize {
- return {
- width: el.scrollWidth,
- height: el.scrollHeight
- }
-}
-
-/**
- * Retrieve the overflowing container of an element, if any
- *
- * @param el - Element
- *
- * @returns Overflowing container or nothing
- */
-export function getElementContainer(
- el: HTMLElement
-): HTMLElement | undefined {
- let parent = el.parentElement
- while (parent)
- if (
- el.scrollWidth <= parent.scrollWidth &&
- el.scrollHeight <= parent.scrollHeight
- )
- parent = (el = parent).parentElement
- else
- break
-
- /* Return overflowing container */
- return parent ? el : undefined
-}
diff --git a/dev/src/templates/assets/javascripts/browser/element/size/index.ts b/dev/src/templates/assets/javascripts/browser/element/size/index.ts
deleted file mode 100644
index 602ff2cf..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/size/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./content"
diff --git a/dev/src/templates/assets/javascripts/browser/element/visibility/index.ts b/dev/src/templates/assets/javascripts/browser/element/visibility/index.ts
deleted file mode 100644
index 1ffe0b8d..00000000
--- a/dev/src/templates/assets/javascripts/browser/element/visibility/index.ts
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- NEVER,
- Observable,
- Subject,
- defer,
- distinctUntilChanged,
- filter,
- finalize,
- map,
- merge,
- of,
- shareReplay,
- switchMap,
- tap
-} from "rxjs"
-
-import {
- getElementContentSize,
- getElementSize,
- watchElementContentOffset
-} from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Intersection observer entry subject
- */
-const entry$ = new Subject<IntersectionObserverEntry>()
-
-/**
- * Intersection observer observable
- *
- * This observable will create an `IntersectionObserver` on first subscription
- * and will automatically terminate it when there are no more subscribers.
- *
- * @see https://bit.ly/3iIYfEm - Google Groups on performance
- */
-const observer$ = defer(() => of(
- new IntersectionObserver(entries => {
- for (const entry of entries)
- entry$.next(entry)
- }, {
- threshold: 0
- })
-))
- .pipe(
- switchMap(observer => merge(NEVER, of(observer))
- .pipe(
- finalize(() => observer.disconnect())
- )
- ),
- shareReplay(1)
- )
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch element visibility
- *
- * @param el - Element
- *
- * @returns Element visibility observable
- */
-export function watchElementVisibility(
- el: HTMLElement
-): Observable<boolean> {
- return observer$
- .pipe(
- tap(observer => observer.observe(el)),
- switchMap(observer => entry$
- .pipe(
- filter(({ target }) => target === el),
- finalize(() => observer.unobserve(el)),
- map(({ isIntersecting }) => isIntersecting)
- )
- )
- )
-}
-
-/**
- * Watch element boundary
- *
- * This function returns an observable which emits whether the bottom content
- * boundary (= scroll offset) of an element is within a certain threshold.
- *
- * @param el - Element
- * @param threshold - Threshold
- *
- * @returns Element boundary observable
- */
-export function watchElementBoundary(
- el: HTMLElement, threshold = 16
-): Observable<boolean> {
- return watchElementContentOffset(el)
- .pipe(
- map(({ y }) => {
- const visible = getElementSize(el)
- const content = getElementContentSize(el)
- return y >= (
- content.height - visible.height - threshold
- )
- }),
- distinctUntilChanged()
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/index.ts b/dev/src/templates/assets/javascripts/browser/index.ts
deleted file mode 100644
index f1ee2bae..00000000
--- a/dev/src/templates/assets/javascripts/browser/index.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./document"
-export * from "./element"
-export * from "./keyboard"
-export * from "./location"
-export * from "./media"
-export * from "./request"
-export * from "./script"
-export * from "./toggle"
-export * from "./viewport"
-export * from "./worker"
diff --git a/dev/src/templates/assets/javascripts/browser/keyboard/index.ts b/dev/src/templates/assets/javascripts/browser/keyboard/index.ts
deleted file mode 100644
index 783f2cda..00000000
--- a/dev/src/templates/assets/javascripts/browser/keyboard/index.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Observable,
- filter,
- fromEvent,
- map,
- merge,
- share,
- startWith,
- switchMap
-} from "rxjs"
-
-import { getActiveElement } from "../element"
-import { getToggle } from "../toggle"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Keyboard mode
- */
-export type KeyboardMode =
- | "global" /* Global */
- | "search" /* Search is open */
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Keyboard
- */
-export interface Keyboard {
- mode: KeyboardMode /* Keyboard mode */
- type: string /* Key type */
- claim(): void /* Key claim */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Check whether an element may receive keyboard input
- *
- * @param el - Element
- * @param type - Key type
- *
- * @returns Test result
- */
-function isSusceptibleToKeyboard(
- el: HTMLElement, type: string
-): boolean {
- switch (el.constructor) {
-
- /* Input elements */
- case HTMLInputElement:
- /* @ts-expect-error - omit unnecessary type cast */
- if (el.type === "radio")
- return /^Arrow/.test(type)
- else
- return true
-
- /* Select element and textarea */
- case HTMLSelectElement:
- case HTMLTextAreaElement:
- return true
-
- /* Everything else */
- default:
- return el.isContentEditable
- }
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch composition events
- *
- * @returns Composition observable
- */
-export function watchComposition(): Observable<boolean> {
- return merge(
- fromEvent(window, "compositionstart").pipe(map(() => true)),
- fromEvent(window, "compositionend").pipe(map(() => false))
- )
- .pipe(
- startWith(false)
- )
-}
-
-/**
- * Watch keyboard
- *
- * @returns Keyboard observable
- */
-export function watchKeyboard(): Observable<Keyboard> {
- const keyboard$ = fromEvent<KeyboardEvent>(window, "keydown")
- .pipe(
- filter(ev => !(ev.metaKey || ev.ctrlKey)),
- map(ev => ({
- mode: getToggle("search") ? "search" : "global",
- type: ev.key,
- claim() {
- ev.preventDefault()
- ev.stopPropagation()
- }
- } as Keyboard)),
- filter(({ mode, type }) => {
- if (mode === "global") {
- const active = getActiveElement()
- if (typeof active !== "undefined")
- return !isSusceptibleToKeyboard(active, type)
- }
- return true
- }),
- share()
- )
-
- /* Don't emit during composition events - see https://bit.ly/3te3Wl8 */
- return watchComposition()
- .pipe(
- switchMap(active => !active ? keyboard$ : EMPTY)
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/location/_/index.ts b/dev/src/templates/assets/javascripts/browser/location/_/index.ts
deleted file mode 100644
index 2672fa74..00000000
--- a/dev/src/templates/assets/javascripts/browser/location/_/index.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { Subject } from "rxjs"
-
-import { feature } from "~/_"
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve location
- *
- * This function returns a `URL` object (and not `Location`) to normalize the
- * typings across the application. Furthermore, locations need to be tracked
- * without setting them and `Location` is a singleton which represents the
- * current location.
- *
- * @returns URL
- */
-export function getLocation(): URL {
- return new URL(location.href)
-}
-
-/**
- * Set location
- *
- * If instant navigation is enabled, this function creates a temporary anchor
- * element, sets the `href` attribute, appends it to the body, clicks it, and
- * then removes it again. The event will bubble up the DOM and trigger be
- * intercepted by the instant loading business logic.
- *
- * Note that we must append and remove the anchor element, or the event will
- * not bubble up the DOM, making it impossible to intercept it.
- *
- * @param url - URL to navigate to
- * @param navigate - Force navigation
- */
-export function setLocation(
- url: URL | HTMLLinkElement, navigate = false
-): void {
- if (feature("navigation.instant") && !navigate) {
- const el = h("a", { href: url.href })
- document.body.appendChild(el)
- el.click()
- el.remove()
-
- // If we're not using instant navigation, and the page should not be reloaded
- // just instruct the browser to navigate to the given URL
- } else {
- location.href = url.href
- }
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Watch location
- *
- * @returns Location subject
- */
-export function watchLocation(): Subject<URL> {
- return new Subject<URL>()
-}
diff --git a/dev/src/templates/assets/javascripts/browser/location/hash/index.ts b/dev/src/templates/assets/javascripts/browser/location/hash/index.ts
deleted file mode 100644
index 5d3a134a..00000000
--- a/dev/src/templates/assets/javascripts/browser/location/hash/index.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- filter,
- fromEvent,
- map,
- merge,
- shareReplay,
- startWith
-} from "rxjs"
-
-import { getOptionalElement } from "~/browser"
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve location hash
- *
- * @returns Location hash
- */
-export function getLocationHash(): string {
- return location.hash.slice(1)
-}
-
-/**
- * Set location hash
- *
- * Setting a new fragment identifier via `location.hash` will have no effect
- * if the value doesn't change. When a new fragment identifier is set, we want
- * the browser to target the respective element at all times, which is why we
- * use this dirty little trick.
- *
- * @param hash - Location hash
- */
-export function setLocationHash(hash: string): void {
- const el = h("a", { href: hash })
- el.addEventListener("click", ev => ev.stopPropagation())
- el.click()
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Watch location hash
- *
- * @param location$ - Location observable
- *
- * @returns Location hash observable
- */
-export function watchLocationHash(
- location$: Observable<URL>
-): Observable<string> {
- return merge(
- fromEvent<HashChangeEvent>(window, "hashchange"),
- location$
- )
- .pipe(
- map(getLocationHash),
- startWith(getLocationHash()),
- filter(hash => hash.length > 0),
- shareReplay(1)
- )
-}
-
-/**
- * Watch location target
- *
- * @param location$ - Location observable
- *
- * @returns Location target observable
- */
-export function watchLocationTarget(
- location$: Observable<URL>
-): Observable<HTMLElement> {
- return watchLocationHash(location$)
- .pipe(
- map(id => getOptionalElement(`[id="${id}"]`)!),
- filter(el => typeof el !== "undefined")
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/location/index.ts b/dev/src/templates/assets/javascripts/browser/location/index.ts
deleted file mode 100644
index d77a5444..00000000
--- a/dev/src/templates/assets/javascripts/browser/location/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./hash"
diff --git a/dev/src/templates/assets/javascripts/browser/media/index.ts b/dev/src/templates/assets/javascripts/browser/media/index.ts
deleted file mode 100644
index dd7400d4..00000000
--- a/dev/src/templates/assets/javascripts/browser/media/index.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Observable,
- fromEvent,
- fromEventPattern,
- map,
- merge,
- startWith,
- switchMap
-} from "rxjs"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch media query
- *
- * Note that although `MediaQueryList.addListener` is deprecated we have to
- * use it, because it's the only way to ensure proper downward compatibility.
- *
- * @see https://bit.ly/3dUBH2m - GitHub issue
- *
- * @param query - Media query
- *
- * @returns Media observable
- */
-export function watchMedia(query: string): Observable<boolean> {
- const media = matchMedia(query)
- return fromEventPattern<boolean>(next => (
- media.addListener(() => next(media.matches))
- ))
- .pipe(
- startWith(media.matches)
- )
-}
-
-/**
- * Watch print mode
- *
- * @returns Print observable
- */
-export function watchPrint(): Observable<boolean> {
- const media = matchMedia("print")
- return merge(
- fromEvent(window, "beforeprint").pipe(map(() => true)),
- fromEvent(window, "afterprint").pipe(map(() => false))
- )
- .pipe(
- startWith(media.matches)
- )
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Toggle an observable with a media observable
- *
- * @template T - Data type
- *
- * @param query$ - Media observable
- * @param factory - Observable factory
- *
- * @returns Toggled observable
- */
-export function at<T>(
- query$: Observable<boolean>, factory: () => Observable<T>
-): Observable<T> {
- return query$
- .pipe(
- switchMap(active => active ? factory() : EMPTY)
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/request/index.ts b/dev/src/templates/assets/javascripts/browser/request/index.ts
deleted file mode 100644
index 74a56a64..00000000
--- a/dev/src/templates/assets/javascripts/browser/request/index.ts
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- map,
- shareReplay,
- switchMap
-} from "rxjs"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Options
- */
-interface Options {
- progress$?: Subject<number> // Progress subject
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Fetch the given URL
- *
- * If the request fails (e.g. when dispatched from `file://` locations), the
- * observable will complete without emitting a value.
- *
- * @param url - Request URL
- * @param options - Options
- *
- * @returns Response observable
- */
-export function request(
- url: URL | string, options?: Options
-): Observable<Blob> {
- return new Observable<Blob>(observer => {
- const req = new XMLHttpRequest()
- req.open("GET", `${url}`)
- req.responseType = "blob"
-
- // Handle response
- req.addEventListener("load", () => {
- if (req.status >= 200 && req.status < 300) {
- observer.next(req.response)
- observer.complete()
- } else {
- observer.error(new Error(req.statusText))
- }
- })
-
- // Handle network errors
- req.addEventListener("error", () => {
- observer.error(new Error("Network Error"))
- })
-
- // Handle aborted requests
- req.addEventListener("abort", () => {
- observer.error(new Error("Request aborted"))
- })
-
- // Handle download progress
- if (typeof options?.progress$ !== "undefined") {
- req.addEventListener("progress", event => {
- options.progress$!.next((event.loaded / event.total) * 100)
- })
-
- // Immediately set progress to 5% to indicate that we're loading
- options.progress$.next(5)
- }
-
- // Send request
- req.send()
- })
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Fetch JSON from the given URL
- *
- * @template T - Data type
- *
- * @param url - Request URL
- * @param options - Options
- *
- * @returns Data observable
- */
-export function requestJSON<T>(
- url: URL | string, options?: Options
-): Observable<T> {
- return request(url, options)
- .pipe(
- switchMap(res => res.text()),
- map(body => JSON.parse(body) as T),
- shareReplay(1)
- )
-}
-
-/**
- * Fetch XML from the given URL
- *
- * @param url - Request URL
- * @param options - Options
- *
- * @returns Data observable
- */
-export function requestXML(
- url: URL | string, options?: Options
-): Observable<Document> {
- const dom = new DOMParser()
- return request(url, options)
- .pipe(
- switchMap(res => res.text()),
- map(res => dom.parseFromString(res, "text/xml")),
- shareReplay(1)
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/script/index.ts b/dev/src/templates/assets/javascripts/browser/script/index.ts
deleted file mode 100644
index ef5c89e6..00000000
--- a/dev/src/templates/assets/javascripts/browser/script/index.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- defer,
- finalize,
- fromEvent,
- map,
- merge,
- switchMap,
- take,
- throwError
-} from "rxjs"
-
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Create and load a `script` element
- *
- * This function returns an observable that will emit when the script was
- * successfully loaded, or throw an error if it wasn't.
- *
- * @param src - Script URL
- *
- * @returns Script observable
- */
-export function watchScript(src: string): Observable<void> {
- const script = h("script", { src })
- return defer(() => {
- document.head.appendChild(script)
- return merge(
- fromEvent(script, "load"),
- fromEvent(script, "error")
- .pipe(
- switchMap(() => (
- throwError(() => new ReferenceError(`Invalid script: ${src}`))
- ))
- )
- )
- .pipe(
- map(() => undefined),
- finalize(() => document.head.removeChild(script)),
- take(1)
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/browser/toggle/index.ts b/dev/src/templates/assets/javascripts/browser/toggle/index.ts
deleted file mode 100644
index 0be4b29d..00000000
--- a/dev/src/templates/assets/javascripts/browser/toggle/index.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- fromEvent,
- map,
- startWith
-} from "rxjs"
-
-import { getElement } from "../element"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Toggle
- */
-export type Toggle =
- | "drawer" /* Toggle for drawer */
- | "search" /* Toggle for search */
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Toggle map
- */
-const toggles: Record<Toggle, HTMLInputElement> = {
- drawer: getElement("[data-md-toggle=drawer]"),
- search: getElement("[data-md-toggle=search]")
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve the value of a toggle
- *
- * @param name - Toggle
- *
- * @returns Toggle value
- */
-export function getToggle(name: Toggle): boolean {
- return toggles[name].checked
-}
-
-/**
- * Set toggle
- *
- * Simulating a click event seems to be the most cross-browser compatible way
- * of changing the value while also emitting a `change` event. Before, Material
- * used `CustomEvent` to programmatically change the value of a toggle, but this
- * is a much simpler and cleaner solution which doesn't require a polyfill.
- *
- * @param name - Toggle
- * @param value - Toggle value
- */
-export function setToggle(name: Toggle, value: boolean): void {
- if (toggles[name].checked !== value)
- toggles[name].click()
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Watch toggle
- *
- * @param name - Toggle
- *
- * @returns Toggle value observable
- */
-export function watchToggle(name: Toggle): Observable<boolean> {
- const el = toggles[name]
- return fromEvent(el, "change")
- .pipe(
- map(() => el.checked),
- startWith(el.checked)
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/viewport/_/index.ts b/dev/src/templates/assets/javascripts/browser/viewport/_/index.ts
deleted file mode 100644
index 09c45f32..00000000
--- a/dev/src/templates/assets/javascripts/browser/viewport/_/index.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- combineLatest,
- map,
- shareReplay
-} from "rxjs"
-
-import {
- ViewportOffset,
- watchViewportOffset
-} from "../offset"
-import {
- ViewportSize,
- watchViewportSize
-} from "../size"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Viewport
- */
-export interface Viewport {
- offset: ViewportOffset /* Viewport offset */
- size: ViewportSize /* Viewport size */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch viewport
- *
- * @returns Viewport observable
- */
-export function watchViewport(): Observable<Viewport> {
- return combineLatest([
- watchViewportOffset(),
- watchViewportSize()
- ])
- .pipe(
- map(([offset, size]) => ({ offset, size })),
- shareReplay(1)
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/viewport/at/index.ts b/dev/src/templates/assets/javascripts/browser/viewport/at/index.ts
deleted file mode 100644
index 8769cf3b..00000000
--- a/dev/src/templates/assets/javascripts/browser/viewport/at/index.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- combineLatest,
- distinctUntilKeyChanged,
- map
-} from "rxjs"
-
-import { Header } from "~/components"
-
-import { getElementOffset } from "../../element"
-import { Viewport } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch viewport relative to element
- *
- * @param el - Element
- * @param options - Options
- *
- * @returns Viewport observable
- */
-export function watchViewportAt(
- el: HTMLElement, { viewport$, header$ }: WatchOptions
-): Observable<Viewport> {
- const size$ = viewport$
- .pipe(
- distinctUntilKeyChanged("size")
- )
-
- /* Compute element offset */
- const offset$ = combineLatest([size$, header$])
- .pipe(
- map(() => getElementOffset(el))
- )
-
- /* Compute relative viewport, return hot observable */
- return combineLatest([header$, viewport$, offset$])
- .pipe(
- map(([{ height }, { offset, size }, { x, y }]) => ({
- offset: {
- x: offset.x - x,
- y: offset.y - y + height
- },
- size
- }))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/viewport/index.ts b/dev/src/templates/assets/javascripts/browser/viewport/index.ts
deleted file mode 100644
index b3d135e9..00000000
--- a/dev/src/templates/assets/javascripts/browser/viewport/index.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./at"
-export * from "./offset"
-export * from "./size"
diff --git a/dev/src/templates/assets/javascripts/browser/viewport/offset/index.ts b/dev/src/templates/assets/javascripts/browser/viewport/offset/index.ts
deleted file mode 100644
index 63d37dd2..00000000
--- a/dev/src/templates/assets/javascripts/browser/viewport/offset/index.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- fromEvent,
- map,
- merge,
- startWith
-} from "rxjs"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Viewport offset
- */
-export interface ViewportOffset {
- x: number /* Horizontal offset */
- y: number /* Vertical offset */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve viewport offset
- *
- * On iOS Safari, viewport offset can be negative due to overflow scrolling.
- * As this may induce strange behaviors downstream, we'll just limit it to 0.
- *
- * @returns Viewport offset
- */
-export function getViewportOffset(): ViewportOffset {
- return {
- x: Math.max(0, scrollX),
- y: Math.max(0, scrollY)
- }
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Watch viewport offset
- *
- * @returns Viewport offset observable
- */
-export function watchViewportOffset(): Observable<ViewportOffset> {
- return merge(
- fromEvent(window, "scroll", { passive: true }),
- fromEvent(window, "resize", { passive: true })
- )
- .pipe(
- map(getViewportOffset),
- startWith(getViewportOffset())
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/viewport/size/index.ts b/dev/src/templates/assets/javascripts/browser/viewport/size/index.ts
deleted file mode 100644
index 06694888..00000000
--- a/dev/src/templates/assets/javascripts/browser/viewport/size/index.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- fromEvent,
- map,
- startWith
-} from "rxjs"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Viewport size
- */
-export interface ViewportSize {
- width: number /* Viewport width */
- height: number /* Viewport height */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve viewport size
- *
- * @returns Viewport size
- */
-export function getViewportSize(): ViewportSize {
- return {
- width: innerWidth,
- height: innerHeight
- }
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Watch viewport size
- *
- * @returns Viewport size observable
- */
-export function watchViewportSize(): Observable<ViewportSize> {
- return fromEvent(window, "resize", { passive: true })
- .pipe(
- map(getViewportSize),
- startWith(getViewportSize())
- )
-}
diff --git a/dev/src/templates/assets/javascripts/browser/worker/index.ts b/dev/src/templates/assets/javascripts/browser/worker/index.ts
deleted file mode 100644
index 12e4e63b..00000000
--- a/dev/src/templates/assets/javascripts/browser/worker/index.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- endWith,
- fromEvent,
- ignoreElements,
- mergeWith,
- share,
- takeUntil
-} from "rxjs"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Worker message
- */
-export interface WorkerMessage {
- type: unknown /* Message type */
- data?: unknown /* Message data */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Create an observable for receiving from a web worker
- *
- * @template T - Data type
- *
- * @param worker - Web worker
- *
- * @returns Message observable
- */
-function recv<T>(worker: Worker): Observable<T> {
- return fromEvent<MessageEvent<T>, T>(worker, "message", ev => ev.data)
-}
-
-/**
- * Create a subject for sending to a web worker
- *
- * @template T - Data type
- *
- * @param worker - Web worker
- *
- * @returns Message subject
- */
-function send<T>(worker: Worker): Subject<T> {
- const send$ = new Subject<T>()
- send$.subscribe(data => worker.postMessage(data))
-
- /* Return message subject */
- return send$
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Create a bidirectional communication channel to a web worker
- *
- * @template T - Data type
- *
- * @param url - Worker URL
- * @param worker - Worker
- *
- * @returns Worker subject
- */
-export function watchWorker<T extends WorkerMessage>(
- url: string, worker = new Worker(url)
-): Subject<T> {
- const recv$ = recv<T>(worker)
- const send$ = send<T>(worker)
-
- /* Create worker subject and forward messages */
- const worker$ = new Subject<T>()
- worker$.subscribe(send$)
-
- /* Return worker subject */
- const done$ = send$.pipe(ignoreElements(), endWith(true))
- return worker$
- .pipe(
- ignoreElements(),
- mergeWith(recv$.pipe(takeUntil(done$))),
- share()
- ) as Subject<T>
-}
diff --git a/dev/src/material/templates/assets/javascripts/bundle.94c44541.min.js b/dev/src/templates/assets/javascripts/bundle.94c44541.min.js
index 1a77477b..1a77477b 100644
--- a/dev/src/material/templates/assets/javascripts/bundle.94c44541.min.js
+++ b/dev/src/templates/assets/javascripts/bundle.94c44541.min.js
diff --git a/dev/src/material/templates/assets/javascripts/bundle.94c44541.min.js.map b/dev/src/templates/assets/javascripts/bundle.94c44541.min.js.map
index 72c8c728..72c8c728 100644
--- a/dev/src/material/templates/assets/javascripts/bundle.94c44541.min.js.map
+++ b/dev/src/templates/assets/javascripts/bundle.94c44541.min.js.map
diff --git a/dev/src/templates/assets/javascripts/bundle.ts b/dev/src/templates/assets/javascripts/bundle.ts
deleted file mode 100644
index 141789c9..00000000
--- a/dev/src/templates/assets/javascripts/bundle.ts
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import "focus-visible"
-
-import {
- EMPTY,
- NEVER,
- Observable,
- Subject,
- defer,
- delay,
- filter,
- map,
- merge,
- mergeWith,
- shareReplay,
- switchMap
-} from "rxjs"
-
-import { configuration, feature } from "./_"
-import {
- at,
- getActiveElement,
- getOptionalElement,
- requestJSON,
- setLocation,
- setToggle,
- watchDocument,
- watchKeyboard,
- watchLocation,
- watchLocationTarget,
- watchMedia,
- watchPrint,
- watchScript,
- watchViewport
-} from "./browser"
-import {
- getComponentElement,
- getComponentElements,
- mountAnnounce,
- mountBackToTop,
- mountConsent,
- mountContent,
- mountDialog,
- mountHeader,
- mountHeaderTitle,
- mountPalette,
- mountProgress,
- mountSearch,
- mountSearchHiglight,
- mountSidebar,
- mountSource,
- mountTableOfContents,
- mountTabs,
- watchHeader,
- watchMain
-} from "./components"
-import {
- SearchIndex,
- setupClipboardJS,
- setupInstantNavigation,
- setupVersionSelector
-} from "./integrations"
-import {
- patchIndeterminate,
- patchScrollfix,
- patchScrolllock
-} from "./patches"
-import "./polyfills"
-
-/* ----------------------------------------------------------------------------
- * Functions - @todo refactor
- * ------------------------------------------------------------------------- */
-
-/**
- * Fetch search index
- *
- * @returns Search index observable
- */
-function fetchSearchIndex(): Observable<SearchIndex> {
- if (location.protocol === "file:") {
- return watchScript(
- `${new URL("search/search_index.js", config.base)}`
- )
- .pipe(
- // @ts-ignore - @todo fix typings
- map(() => __index),
- shareReplay(1)
- )
- } else {
- return requestJSON<SearchIndex>(
- new URL("search/search_index.json", config.base)
- )
- }
-}
-
-/* ----------------------------------------------------------------------------
- * Application
- * ------------------------------------------------------------------------- */
-
-/* Yay, JavaScript is available */
-document.documentElement.classList.remove("no-js")
-document.documentElement.classList.add("js")
-
-/* Set up navigation observables and subjects */
-const document$ = watchDocument()
-const location$ = watchLocation()
-const target$ = watchLocationTarget(location$)
-const keyboard$ = watchKeyboard()
-
-/* Set up media observables */
-const viewport$ = watchViewport()
-const tablet$ = watchMedia("(min-width: 960px)")
-const screen$ = watchMedia("(min-width: 1220px)")
-const print$ = watchPrint()
-
-/* Retrieve search index, if search is enabled */
-const config = configuration()
-const index$ = document.forms.namedItem("search")
- ? fetchSearchIndex()
- : NEVER
-
-/* Set up Clipboard.js integration */
-const alert$ = new Subject<string>()
-setupClipboardJS({ alert$ })
-
-/* Set up progress indicator */
-const progress$ = new Subject<number>()
-
-/* Set up instant navigation, if enabled */
-if (feature("navigation.instant"))
- setupInstantNavigation({ location$, viewport$, progress$ })
- .subscribe(document$)
-
-/* Set up version selector */
-if (config.version?.provider === "mike")
- setupVersionSelector({ document$ })
-
-/* Always close drawer and search on navigation */
-merge(location$, target$)
- .pipe(
- delay(125)
- )
- .subscribe(() => {
- setToggle("drawer", false)
- setToggle("search", false)
- })
-
-/* Set up global keyboard handlers */
-keyboard$
- .pipe(
- filter(({ mode }) => mode === "global")
- )
- .subscribe(key => {
- switch (key.type) {
-
- /* Go to previous page */
- case "p":
- case ",":
- const prev = getOptionalElement<HTMLLinkElement>("link[rel=prev]")
- if (typeof prev !== "undefined")
- setLocation(prev)
- break
-
- /* Go to next page */
- case "n":
- case ".":
- const next = getOptionalElement<HTMLLinkElement>("link[rel=next]")
- if (typeof next !== "undefined")
- setLocation(next)
- break
-
- /* Expand navigation, see https://bit.ly/3ZjG5io */
- case "Enter":
- const active = getActiveElement()
- if (active instanceof HTMLLabelElement)
- active.click()
- }
- })
-
-/* Set up patches */
-patchIndeterminate({ document$, tablet$ })
-patchScrollfix({ document$ })
-patchScrolllock({ viewport$, tablet$ })
-
-/* Set up header and main area observable */
-const header$ = watchHeader(getComponentElement("header"), { viewport$ })
-const main$ = document$
- .pipe(
- map(() => getComponentElement("main")),
- switchMap(el => watchMain(el, { viewport$, header$ })),
- shareReplay(1)
- )
-
-/* Set up control component observables */
-const control$ = merge(
-
- /* Consent */
- ...getComponentElements("consent")
- .map(el => mountConsent(el, { target$ })),
-
- /* Dialog */
- ...getComponentElements("dialog")
- .map(el => mountDialog(el, { alert$ })),
-
- /* Header */
- ...getComponentElements("header")
- .map(el => mountHeader(el, { viewport$, header$, main$ })),
-
- /* Color palette */
- ...getComponentElements("palette")
- .map(el => mountPalette(el)),
-
- /* Progress bar */
- ...getComponentElements("progress")
- .map(el => mountProgress(el, { progress$ })),
-
- /* Search */
- ...getComponentElements("search")
- .map(el => mountSearch(el, { index$, keyboard$ })),
-
- /* Repository information */
- ...getComponentElements("source")
- .map(el => mountSource(el))
-)
-
-/* Set up content component observables */
-const content$ = defer(() => merge(
-
- /* Announcement bar */
- ...getComponentElements("announce")
- .map(el => mountAnnounce(el)),
-
- /* Content */
- ...getComponentElements("content")
- .map(el => mountContent(el, { viewport$, target$, print$ })),
-
- /* Search highlighting */
- ...getComponentElements("content")
- .map(el => feature("search.highlight")
- ? mountSearchHiglight(el, { index$, location$ })
- : EMPTY
- ),
-
- /* Header title */
- ...getComponentElements("header-title")
- .map(el => mountHeaderTitle(el, { viewport$, header$ })),
-
- /* Sidebar */
- ...getComponentElements("sidebar")
- .map(el => el.getAttribute("data-md-type") === "navigation"
- ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))
- : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))
- ),
-
- /* Navigation tabs */
- ...getComponentElements("tabs")
- .map(el => mountTabs(el, { viewport$, header$ })),
-
- /* Table of contents */
- ...getComponentElements("toc")
- .map(el => mountTableOfContents(el, {
- viewport$, header$, main$, target$
- })),
-
- /* Back-to-top button */
- ...getComponentElements("top")
- .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))
-))
-
-/* Set up component observables */
-const component$ = document$
- .pipe(
- switchMap(() => content$),
- mergeWith(control$),
- shareReplay(1)
- )
-
-/* Subscribe to all components */
-component$.subscribe()
-
-/* ----------------------------------------------------------------------------
- * Exports
- * ------------------------------------------------------------------------- */
-
-window.document$ = document$ /* Document observable */
-window.location$ = location$ /* Location subject */
-window.target$ = target$ /* Location target observable */
-window.keyboard$ = keyboard$ /* Keyboard observable */
-window.viewport$ = viewport$ /* Viewport observable */
-window.tablet$ = tablet$ /* Media tablet observable */
-window.screen$ = screen$ /* Media screen observable */
-window.print$ = print$ /* Media print observable */
-window.alert$ = alert$ /* Alert subject */
-window.progress$ = progress$ /* Progress indicator subject */
-window.component$ = component$ /* Component observable */
diff --git a/dev/src/templates/assets/javascripts/components/_/index.ts b/dev/src/templates/assets/javascripts/components/_/index.ts
deleted file mode 100644
index 61c471d9..00000000
--- a/dev/src/templates/assets/javascripts/components/_/index.ts
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { getElement, getElements } from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Component type
- */
-export type ComponentType =
- | "announce" /* Announcement bar */
- | "container" /* Container */
- | "consent" /* Consent */
- | "content" /* Content */
- | "dialog" /* Dialog */
- | "header" /* Header */
- | "header-title" /* Header title */
- | "header-topic" /* Header topic */
- | "main" /* Main area */
- | "outdated" /* Version warning */
- | "palette" /* Color palette */
- | "progress" /* Progress indicator */
- | "search" /* Search */
- | "search-query" /* Search input */
- | "search-result" /* Search results */
- | "search-share" /* Search sharing */
- | "search-suggest" /* Search suggestions */
- | "sidebar" /* Sidebar */
- | "skip" /* Skip link */
- | "source" /* Repository information */
- | "tabs" /* Navigation tabs */
- | "toc" /* Table of contents */
- | "top" /* Back-to-top button */
-
-/**
- * Component
- *
- * @template T - Component type
- * @template U - Reference type
- */
-export type Component<
- T extends {} = {},
- U extends HTMLElement = HTMLElement
-> =
- T & {
- ref: U /* Component reference */
- }
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Component type map
- */
-interface ComponentTypeMap {
- "announce": HTMLElement /* Announcement bar */
- "container": HTMLElement /* Container */
- "consent": HTMLElement /* Consent */
- "content": HTMLElement /* Content */
- "dialog": HTMLElement /* Dialog */
- "header": HTMLElement /* Header */
- "header-title": HTMLElement /* Header title */
- "header-topic": HTMLElement /* Header topic */
- "main": HTMLElement /* Main area */
- "outdated": HTMLElement /* Version warning */
- "palette": HTMLElement /* Color palette */
- "progress": HTMLElement /* Progress indicator */
- "search": HTMLElement /* Search */
- "search-query": HTMLInputElement /* Search input */
- "search-result": HTMLElement /* Search results */
- "search-share": HTMLAnchorElement /* Search sharing */
- "search-suggest": HTMLElement /* Search suggestions */
- "sidebar": HTMLElement /* Sidebar */
- "skip": HTMLAnchorElement /* Skip link */
- "source": HTMLAnchorElement /* Repository information */
- "tabs": HTMLElement /* Navigation tabs */
- "toc": HTMLElement /* Table of contents */
- "top": HTMLAnchorElement /* Back-to-top button */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Retrieve the element for a given component or throw a reference error
- *
- * @template T - Component type
- *
- * @param type - Component type
- * @param node - Node of reference
- *
- * @returns Element
- */
-export function getComponentElement<T extends ComponentType>(
- type: T, node: ParentNode = document
-): ComponentTypeMap[T] {
- return getElement(`[data-md-component=${type}]`, node)
-}
-
-/**
- * Retrieve all elements for a given component
- *
- * @template T - Component type
- *
- * @param type - Component type
- * @param node - Node of reference
- *
- * @returns Elements
- */
-export function getComponentElements<T extends ComponentType>(
- type: T, node: ParentNode = document
-): ComponentTypeMap[T][] {
- return getElements(`[data-md-component=${type}]`, node)
-}
diff --git a/dev/src/templates/assets/javascripts/components/announce/index.ts b/dev/src/templates/assets/javascripts/components/announce/index.ts
deleted file mode 100644
index dd04b4ff..00000000
--- a/dev/src/templates/assets/javascripts/components/announce/index.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Observable,
- Subject,
- defer,
- finalize,
- fromEvent,
- map,
- tap
-} from "rxjs"
-
-import { feature } from "~/_"
-import { getElement } from "~/browser"
-
-import { Component } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Announcement bar
- */
-export interface Announce {
- hash: number /* Content hash */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch announcement bar
- *
- * @param el - Announcement bar element
- *
- * @returns Announcement bar observable
- */
-export function watchAnnounce(
- el: HTMLElement
-): Observable<Announce> {
- const button = getElement(".md-typeset > :first-child", el)
- return fromEvent(button, "click", { once: true })
- .pipe(
- map(() => getElement(".md-typeset", el)),
- map(content => ({ hash: __md_hash(content.innerHTML) }))
- )
-}
-
-/**
- * Mount announcement bar
- *
- * @param el - Announcement bar element
- *
- * @returns Announcement bar component observable
- */
-export function mountAnnounce(
- el: HTMLElement
-): Observable<Component<Announce>> {
- if (!feature("announce.dismiss") || !el.childElementCount)
- return EMPTY
-
- /* Support instant navigation - see https://t.ly/3FTme */
- if (!el.hidden) {
- const content = getElement(".md-typeset", el)
- if (__md_hash(content.innerHTML) === __md_get("__announce"))
- el.hidden = true
- }
-
- /* Mount component on subscription */
- return defer(() => {
- const push$ = new Subject<Announce>()
- push$.subscribe(({ hash }) => {
- el.hidden = true
-
- /* Persist preference in local storage */
- __md_set<number>("__announce", hash)
- })
-
- /* Create and return component */
- return watchAnnounce(el)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/consent/index.ts b/dev/src/templates/assets/javascripts/components/consent/index.ts
deleted file mode 100644
index bc99db58..00000000
--- a/dev/src/templates/assets/javascripts/components/consent/index.ts
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- finalize,
- map,
- tap
-} from "rxjs"
-
-import { Component } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Consent
- */
-export interface Consent {
- hidden: boolean /* Consent is hidden */
-}
-
-/**
- * Consent defaults
- */
-export interface ConsentDefaults {
- analytics?: boolean /* Consent for Analytics */
- github?: boolean /* Consent for GitHub */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- target$: Observable<HTMLElement> /* Target observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- target$: Observable<HTMLElement> /* Target observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch consent
- *
- * @param el - Consent element
- * @param options - Options
- *
- * @returns Consent observable
- */
-export function watchConsent(
- el: HTMLElement, { target$ }: WatchOptions
-): Observable<Consent> {
- return target$
- .pipe(
- map(target => ({ hidden: target !== el }))
- )
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Mount consent
- *
- * @param el - Consent element
- * @param options - Options
- *
- * @returns Consent component observable
- */
-export function mountConsent(
- el: HTMLElement, options: MountOptions
-): Observable<Component<Consent>> {
- const internal$ = new Subject<Consent>()
- internal$.subscribe(({ hidden }) => {
- el.hidden = hidden
- })
-
- /* Create and return component */
- return watchConsent(el, options)
- .pipe(
- tap(state => internal$.next(state)),
- finalize(() => internal$.complete()),
- map(state => ({ ref: el, ...state }))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/_/index.ts b/dev/src/templates/assets/javascripts/components/content/_/index.ts
deleted file mode 100644
index 899a695c..00000000
--- a/dev/src/templates/assets/javascripts/components/content/_/index.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { Observable, merge } from "rxjs"
-
-import { Viewport, getElements } from "~/browser"
-
-import { Component } from "../../_"
-import {
- Annotation,
- mountAnnotationBlock
-} from "../annotation"
-import {
- CodeBlock,
- mountCodeBlock
-} from "../code"
-import {
- Details,
- mountDetails
-} from "../details"
-import {
- Mermaid,
- mountMermaid
-} from "../mermaid"
-import {
- DataTable,
- mountDataTable
-} from "../table"
-import {
- ContentTabs,
- mountContentTabs
-} from "../tabs"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Content
- */
-export type Content =
- | Annotation
- | CodeBlock
- | ContentTabs
- | DataTable
- | Details
- | Mermaid
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- target$: Observable<HTMLElement> /* Location target observable */
- print$: Observable<boolean> /* Media print observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount content
- *
- * This function mounts all components that are found in the content of the
- * actual article, including code blocks, data tables and details.
- *
- * @param el - Content element
- * @param options - Options
- *
- * @returns Content component observable
- */
-export function mountContent(
- el: HTMLElement, { viewport$, target$, print$ }: MountOptions
-): Observable<Component<Content>> {
- return merge(
-
- /* Annotations */
- ...getElements(".annotate:not(.highlight)", el)
- .map(child => mountAnnotationBlock(child, { target$, print$ })),
-
- /* Code blocks */
- ...getElements("pre:not(.mermaid) > code", el)
- .map(child => mountCodeBlock(child, { target$, print$ })),
-
- /* Mermaid diagrams */
- ...getElements("pre.mermaid", el)
- .map(child => mountMermaid(child)),
-
- /* Data tables */
- ...getElements("table:not([class])", el)
- .map(child => mountDataTable(child)),
-
- /* Details */
- ...getElements("details", el)
- .map(child => mountDetails(child, { target$, print$ })),
-
- /* Content tabs */
- ...getElements("[data-tabs]", el)
- .map(child => mountContentTabs(child, { viewport$ }))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/annotation/_/index.ts b/dev/src/templates/assets/javascripts/components/content/annotation/_/index.ts
deleted file mode 100644
index c5138fa4..00000000
--- a/dev/src/templates/assets/javascripts/components/content/annotation/_/index.ts
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- animationFrameScheduler,
- auditTime,
- combineLatest,
- debounceTime,
- defer,
- delay,
- endWith,
- filter,
- finalize,
- fromEvent,
- ignoreElements,
- map,
- merge,
- switchMap,
- take,
- takeUntil,
- tap,
- throttleTime,
- withLatestFrom
-} from "rxjs"
-
-import {
- ElementOffset,
- getActiveElement,
- getElementSize,
- watchElementContentOffset,
- watchElementFocus,
- watchElementOffset,
- watchElementVisibility
-} from "~/browser"
-
-import { Component } from "../../../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Annotation
- */
-export interface Annotation {
- active: boolean /* Annotation is active */
- offset: ElementOffset /* Annotation offset */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- target$: Observable<HTMLElement> /* Location target observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch annotation
- *
- * @param el - Annotation element
- * @param container - Containing element
- *
- * @returns Annotation observable
- */
-export function watchAnnotation(
- el: HTMLElement, container: HTMLElement
-): Observable<Annotation> {
- const offset$ = defer(() => combineLatest([
- watchElementOffset(el),
- watchElementContentOffset(container)
- ]))
- .pipe(
- map(([{ x, y }, scroll]): ElementOffset => {
- const { width, height } = getElementSize(el)
- return ({
- x: x - scroll.x + width / 2,
- y: y - scroll.y + height / 2
- })
- })
- )
-
- /* Actively watch annotation on focus */
- return watchElementFocus(el)
- .pipe(
- switchMap(active => offset$
- .pipe(
- map(offset => ({ active, offset })),
- take(+!active || Infinity)
- )
- )
- )
-}
-
-/**
- * Mount annotation
- *
- * @param el - Annotation element
- * @param container - Containing element
- * @param options - Options
- *
- * @returns Annotation component observable
- */
-export function mountAnnotation(
- el: HTMLElement, container: HTMLElement, { target$ }: MountOptions
-): Observable<Component<Annotation>> {
- const [tooltip, index] = Array.from(el.children)
-
- /* Mount component on subscription */
- return defer(() => {
- const push$ = new Subject<Annotation>()
- const done$ = push$.pipe(ignoreElements(), endWith(true))
- push$.subscribe({
-
- /* Handle emission */
- next({ offset }) {
- el.style.setProperty("--md-tooltip-x", `${offset.x}px`)
- el.style.setProperty("--md-tooltip-y", `${offset.y}px`)
- },
-
- /* Handle complete */
- complete() {
- el.style.removeProperty("--md-tooltip-x")
- el.style.removeProperty("--md-tooltip-y")
- }
- })
-
- /* Start animation only when annotation is visible */
- watchElementVisibility(el)
- .pipe(
- takeUntil(done$)
- )
- .subscribe(visible => {
- el.toggleAttribute("data-md-visible", visible)
- })
-
- /* Toggle tooltip presence to mitigate empty lines when copying */
- merge(
- push$.pipe(filter(({ active }) => active)),
- push$.pipe(debounceTime(250), filter(({ active }) => !active))
- )
- .subscribe({
-
- /* Handle emission */
- next({ active }) {
- if (active)
- el.prepend(tooltip)
- else
- tooltip.remove()
- },
-
- /* Handle complete */
- complete() {
- el.prepend(tooltip)
- }
- })
-
- /* Toggle tooltip visibility */
- push$
- .pipe(
- auditTime(16, animationFrameScheduler)
- )
- .subscribe(({ active }) => {
- tooltip.classList.toggle("md-tooltip--active", active)
- })
-
- /* Track relative origin of tooltip */
- push$
- .pipe(
- throttleTime(125, animationFrameScheduler),
- filter(() => !!el.offsetParent),
- map(() => el.offsetParent!.getBoundingClientRect()),
- map(({ x }) => x)
- )
- .subscribe({
-
- /* Handle emission */
- next(origin) {
- if (origin)
- el.style.setProperty("--md-tooltip-0", `${-origin}px`)
- else
- el.style.removeProperty("--md-tooltip-0")
- },
-
- /* Handle complete */
- complete() {
- el.style.removeProperty("--md-tooltip-0")
- }
- })
-
- /* Allow to copy link without scrolling to anchor */
- fromEvent<MouseEvent>(index, "click")
- .pipe(
- takeUntil(done$),
- filter(ev => !(ev.metaKey || ev.ctrlKey))
- )
- .subscribe(ev => {
- ev.stopPropagation()
- ev.preventDefault()
- })
-
- /* Allow to open link in new tab or blur on close */
- fromEvent<MouseEvent>(index, "mousedown")
- .pipe(
- takeUntil(done$),
- withLatestFrom(push$)
- )
- .subscribe(([ev, { active }]) => {
-
- /* Open in new tab */
- if (ev.button !== 0 || ev.metaKey || ev.ctrlKey) {
- ev.preventDefault()
-
- /* Close annotation */
- } else if (active) {
- ev.preventDefault()
-
- /* Focus parent annotation, if any */
- const parent = el.parentElement!.closest(".md-annotation")
- if (parent instanceof HTMLElement)
- parent.focus()
- else
- getActiveElement()?.blur()
- }
- })
-
- /* Open and focus annotation on location target */
- target$
- .pipe(
- takeUntil(done$),
- filter(target => target === tooltip),
- delay(125)
- )
- .subscribe(() => el.focus())
-
- /* Create and return component */
- return watchAnnotation(el, container)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/annotation/block/index.ts b/dev/src/templates/assets/javascripts/components/content/annotation/block/index.ts
deleted file mode 100644
index c73b01fa..00000000
--- a/dev/src/templates/assets/javascripts/components/content/annotation/block/index.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { EMPTY, Observable, defer } from "rxjs"
-
-import { Component } from "../../../_"
-import { Annotation } from "../_"
-import { mountAnnotationList } from "../list"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- target$: Observable<HTMLElement> /* Location target observable */
- print$: Observable<boolean> /* Media print observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Find list element directly following a block
- *
- * @param el - Annotation block element
- *
- * @returns List element or nothing
- */
-function findList(el: HTMLElement): HTMLElement | undefined {
- if (el.nextElementSibling) {
- const sibling = el.nextElementSibling as HTMLElement
- if (sibling.tagName === "OL")
- return sibling
-
- /* Skip empty paragraphs - see https://bit.ly/3r4ZJ2O */
- else if (sibling.tagName === "P" && !sibling.children.length)
- return findList(sibling)
- }
-
- /* Everything else */
- return undefined
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount annotation block
- *
- * @param el - Annotation block element
- * @param options - Options
- *
- * @returns Annotation component observable
- */
-export function mountAnnotationBlock(
- el: HTMLElement, options: MountOptions
-): Observable<Component<Annotation>> {
- return defer(() => {
- const list = findList(el)
- return typeof list !== "undefined"
- ? mountAnnotationList(list, el, options)
- : EMPTY
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/annotation/index.ts b/dev/src/templates/assets/javascripts/components/content/annotation/index.ts
deleted file mode 100644
index c593b723..00000000
--- a/dev/src/templates/assets/javascripts/components/content/annotation/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./block"
-export * from "./list"
diff --git a/dev/src/templates/assets/javascripts/components/content/annotation/list/index.ts b/dev/src/templates/assets/javascripts/components/content/annotation/list/index.ts
deleted file mode 100644
index 725dd583..00000000
--- a/dev/src/templates/assets/javascripts/components/content/annotation/list/index.ts
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Observable,
- Subject,
- defer,
- endWith,
- finalize,
- ignoreElements,
- merge,
- share,
- takeUntil
-} from "rxjs"
-
-import {
- getElement,
- getElements,
- getOptionalElement
-} from "~/browser"
-import { renderAnnotation } from "~/templates"
-
-import { Component } from "../../../_"
-import {
- Annotation,
- mountAnnotation
-} from "../_"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- target$: Observable<HTMLElement> /* Location target observable */
- print$: Observable<boolean> /* Media print observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Find all annotation hosts in the containing element
- *
- * @param container - Containing element
- *
- * @returns Annotation hosts
- */
-function findHosts(container: HTMLElement): HTMLElement[] {
- return container.tagName === "CODE"
- ? getElements(".c, .c1, .cm", container)
- : [container]
-}
-
-/**
- * Find all annotation markers in the containing element
- *
- * @param container - Containing element
- *
- * @returns Annotation markers
- */
-function findMarkers(container: HTMLElement): Text[] {
- const markers: Text[] = []
- for (const el of findHosts(container)) {
- const nodes: Text[] = []
-
- /* Find all text nodes in current element */
- const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)
- for (let node = it.nextNode(); node; node = it.nextNode())
- nodes.push(node as Text)
-
- /* Find all markers in each text node */
- for (let text of nodes) {
- let match: RegExpExecArray | null
-
- /* Split text at marker and add to list */
- while ((match = /(\(\d+\))(!)?/.exec(text.textContent!))) {
- const [, id, force] = match
- if (typeof force === "undefined") {
- const marker = text.splitText(match.index)
- text = marker.splitText(id.length)
- markers.push(marker)
-
- /* Replace entire text with marker */
- } else {
- text.textContent = id
- markers.push(text)
- break
- }
- }
- }
- }
- return markers
-}
-
-/**
- * Swap the child nodes of two elements
- *
- * @param source - Source element
- * @param target - Target element
- */
-function swap(source: HTMLElement, target: HTMLElement): void {
- target.append(...Array.from(source.childNodes))
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount annotation list
- *
- * This function analyzes the containing code block and checks for markers
- * referring to elements in the given annotation list. If no markers are found,
- * the list is left untouched. Otherwise, list elements are rendered as
- * annotations inside the code block.
- *
- * @param el - Annotation list element
- * @param container - Containing element
- * @param options - Options
- *
- * @returns Annotation component observable
- */
-export function mountAnnotationList(
- el: HTMLElement, container: HTMLElement, { target$, print$ }: MountOptions
-): Observable<Component<Annotation>> {
-
- /* Compute prefix for tooltip anchors */
- const parent = container.closest("[id]")
- const prefix = parent?.id
-
- /* Find and replace all markers with empty annotations */
- const annotations = new Map<string, HTMLElement>()
- for (const marker of findMarkers(container)) {
- const [, id] = marker.textContent!.match(/\((\d+)\)/)!
- if (getOptionalElement(`:scope > li:nth-child(${id})`, el)) {
- annotations.set(id, renderAnnotation(id, prefix))
- marker.replaceWith(annotations.get(id)!)
- }
- }
-
- /* Keep list if there are no annotations to render */
- if (annotations.size === 0)
- return EMPTY
-
- /* Mount component on subscription */
- return defer(() => {
- const push$ = new Subject()
- const done$ = push$.pipe(ignoreElements(), endWith(true))
-
- /* Retrieve container pairs for swapping */
- const pairs: [HTMLElement, HTMLElement][] = []
- for (const [id, annotation] of annotations)
- pairs.push([
- getElement(".md-typeset", annotation),
- getElement(`:scope > li:nth-child(${id})`, el)
- ])
-
- /* Handle print mode - see https://bit.ly/3rgPdpt */
- print$.pipe(takeUntil(done$))
- .subscribe(active => {
- el.hidden = !active
-
- /* Add class to discern list element */
- el.classList.toggle("md-annotation-list", active)
-
- /* Show annotations in code block or list (print) */
- for (const [inner, child] of pairs)
- if (!active)
- swap(child, inner)
- else
- swap(inner, child)
- })
-
- /* Create and return component */
- return merge(...[...annotations]
- .map(([, annotation]) => (
- mountAnnotation(annotation, container, { target$ })
- ))
- )
- .pipe(
- finalize(() => push$.complete()),
- share()
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/code/_/index.ts b/dev/src/templates/assets/javascripts/components/content/code/_/index.ts
deleted file mode 100644
index ccc09339..00000000
--- a/dev/src/templates/assets/javascripts/components/content/code/_/index.ts
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import ClipboardJS from "clipboard"
-import {
- EMPTY,
- Observable,
- Subject,
- defer,
- distinctUntilChanged,
- distinctUntilKeyChanged,
- filter,
- finalize,
- map,
- mergeWith,
- switchMap,
- take,
- tap
-} from "rxjs"
-
-import { feature } from "~/_"
-import {
- getElementContentSize,
- watchElementSize,
- watchElementVisibility
-} from "~/browser"
-import { renderClipboardButton } from "~/templates"
-
-import { Component } from "../../../_"
-import {
- Annotation,
- mountAnnotationList
-} from "../../annotation"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Code block
- */
-export interface CodeBlock {
- scrollable: boolean /* Code block overflows */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- target$: Observable<HTMLElement> /* Location target observable */
- print$: Observable<boolean> /* Media print observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Global sequence number for code blocks
- */
-let sequence = 0
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Find candidate list element directly following a code block
- *
- * @param el - Code block element
- *
- * @returns List element or nothing
- */
-function findCandidateList(el: HTMLElement): HTMLElement | undefined {
- if (el.nextElementSibling) {
- const sibling = el.nextElementSibling as HTMLElement
- if (sibling.tagName === "OL")
- return sibling
-
- /* Skip empty paragraphs - see https://bit.ly/3r4ZJ2O */
- else if (sibling.tagName === "P" && !sibling.children.length)
- return findCandidateList(sibling)
- }
-
- /* Everything else */
- return undefined
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch code block
- *
- * This function monitors size changes of the viewport, as well as switches of
- * content tabs with embedded code blocks, as both may trigger overflow.
- *
- * @param el - Code block element
- *
- * @returns Code block observable
- */
-export function watchCodeBlock(
- el: HTMLElement
-): Observable<CodeBlock> {
- return watchElementSize(el)
- .pipe(
- map(({ width }) => {
- const content = getElementContentSize(el)
- return {
- scrollable: content.width > width
- }
- }),
- distinctUntilKeyChanged("scrollable")
- )
-}
-
-/**
- * Mount code block
- *
- * This function ensures that an overflowing code block is focusable through
- * keyboard, so it can be scrolled without a mouse to improve on accessibility.
- * Furthermore, if code annotations are enabled, they are mounted if and only
- * if the code block is currently visible, e.g., not in a hidden content tab.
- *
- * Note that code blocks may be mounted eagerly or lazily. If they're mounted
- * lazily (on first visibility), code annotation anchor links will not work,
- * as they are evaluated on initial page load, and code annotations in general
- * might feel a little bumpier.
- *
- * @param el - Code block element
- * @param options - Options
- *
- * @returns Code block and annotation component observable
- */
-export function mountCodeBlock(
- el: HTMLElement, options: MountOptions
-): Observable<Component<CodeBlock | Annotation>> {
- const { matches: hover } = matchMedia("(hover)")
-
- /* Defer mounting of code block - see https://bit.ly/3vHVoVD */
- const factory$ = defer(() => {
- const push$ = new Subject<CodeBlock>()
- push$.subscribe(({ scrollable }) => {
- if (scrollable && hover)
- el.setAttribute("tabindex", "0")
- else
- el.removeAttribute("tabindex")
- })
-
- /* Render button for Clipboard.js integration */
- if (ClipboardJS.isSupported()) {
- if (el.closest(".copy") || (
- feature("content.code.copy") && !el.closest(".no-copy")
- )) {
- const parent = el.closest("pre")!
- parent.id = `__code_${sequence++}`
- parent.insertBefore(
- renderClipboardButton(parent.id),
- el
- )
- }
- }
-
- /* Handle code annotations */
- const container = el.closest(".highlight")
- if (container instanceof HTMLElement) {
- const list = findCandidateList(container)
-
- /* Mount code annotations, if enabled */
- if (typeof list !== "undefined" && (
- container.classList.contains("annotate") ||
- feature("content.code.annotate")
- )) {
- const annotations$ = mountAnnotationList(list, el, options)
-
- /* Create and return component */
- return watchCodeBlock(el)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state })),
- mergeWith(
- watchElementSize(container)
- .pipe(
- map(({ width, height }) => width && height),
- distinctUntilChanged(),
- switchMap(active => active ? annotations$ : EMPTY)
- )
- )
- )
- }
- }
-
- /* Create and return component */
- return watchCodeBlock(el)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-
- /* Mount code block lazily */
- if (feature("content.lazy"))
- return watchElementVisibility(el)
- .pipe(
- filter(visible => visible),
- take(1),
- switchMap(() => factory$)
- )
-
- /* Mount code block */
- return factory$
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/code/index.ts b/dev/src/templates/assets/javascripts/components/content/code/index.ts
deleted file mode 100644
index 3f86e2b4..00000000
--- a/dev/src/templates/assets/javascripts/components/content/code/index.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
diff --git a/dev/src/templates/assets/javascripts/components/content/details/index.ts b/dev/src/templates/assets/javascripts/components/content/details/index.ts
deleted file mode 100644
index 17bfae45..00000000
--- a/dev/src/templates/assets/javascripts/components/content/details/index.ts
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- defer,
- filter,
- finalize,
- map,
- merge,
- tap
-} from "rxjs"
-
-import { Component } from "../../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Details
- */
-export interface Details {
- action: "open" | "close" /* Details state */
- reveal?: boolean /* Details is revealed */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- target$: Observable<HTMLElement> /* Location target observable */
- print$: Observable<boolean> /* Media print observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- target$: Observable<HTMLElement> /* Location target observable */
- print$: Observable<boolean> /* Media print observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch details
- *
- * @param el - Details element
- * @param options - Options
- *
- * @returns Details observable
- */
-export function watchDetails(
- el: HTMLDetailsElement, { target$, print$ }: WatchOptions
-): Observable<Details> {
- let open = true
- return merge(
-
- /* Open and focus details on location target */
- target$
- .pipe(
- map(target => target.closest("details:not([open])")!),
- filter(details => el === details),
- map(() => ({
- action: "open", reveal: true
- }) as Details)
- ),
-
- /* Open details on print and close afterwards */
- print$
- .pipe(
- filter(active => active || !open),
- tap(() => open = el.open),
- map(active => ({
- action: active ? "open" : "close"
- }) as Details)
- )
- )
-}
-
-/**
- * Mount details
- *
- * This function ensures that `details` tags are opened on anchor jumps and
- * prior to printing, so the whole content of the page is visible.
- *
- * @param el - Details element
- * @param options - Options
- *
- * @returns Details component observable
- */
-export function mountDetails(
- el: HTMLDetailsElement, options: MountOptions
-): Observable<Component<Details>> {
- return defer(() => {
- const push$ = new Subject<Details>()
- push$.subscribe(({ action, reveal }) => {
- el.toggleAttribute("open", action === "open")
- if (reveal)
- el.scrollIntoView()
- })
-
- /* Create and return component */
- return watchDetails(el, options)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/index.ts b/dev/src/templates/assets/javascripts/components/content/index.ts
deleted file mode 100644
index a29d8b41..00000000
--- a/dev/src/templates/assets/javascripts/components/content/index.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./annotation"
-export * from "./code"
-export * from "./details"
-export * from "./table"
-export * from "./tabs"
diff --git a/dev/src/templates/assets/javascripts/components/content/mermaid/index.css b/dev/src/templates/assets/javascripts/components/content/mermaid/index.css
deleted file mode 100644
index 3092b8ec..00000000
--- a/dev/src/templates/assets/javascripts/components/content/mermaid/index.css
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Rules: general
- * ------------------------------------------------------------------------- */
-
-/* General node */
-.node circle,
-.node ellipse,
-.node path,
-.node polygon,
-.node rect {
- fill: var(--md-mermaid-node-bg-color);
- stroke: var(--md-mermaid-node-fg-color);
-}
-
-/* General marker */
-marker {
- fill: var(--md-mermaid-edge-color) !important;
-}
-
-/* General edge label */
-.edgeLabel .label rect {
- fill: transparent;
-}
-
-/* ----------------------------------------------------------------------------
- * Rules: flowcharts
- * ------------------------------------------------------------------------- */
-
-/* Flowchart node label */
-.label {
- color: var(--md-mermaid-label-fg-color);
- font-family: var(--md-mermaid-font-family);
-}
-
-/* Flowchart node label container */
-.label foreignObject {
- overflow: visible;
- line-height: initial;
-}
-
-/* Flowchart edge label in node label */
-.label div .edgeLabel {
- color: var(--md-mermaid-label-fg-color);
- background-color: var(--md-mermaid-label-bg-color);
-}
-
-/* Flowchart edge label */
-.edgeLabel,
-.edgeLabel rect {
- color: var(--md-mermaid-edge-color);
- background-color: var(--md-mermaid-label-bg-color);
- fill: var(--md-mermaid-label-bg-color);
-}
-
-/* Flowchart edge path */
-.edgePath .path,
-.flowchart-link {
- stroke: var(--md-mermaid-edge-color);
- stroke-width: .05rem;
-}
-
-/* Flowchart arrow head */
-.edgePath .arrowheadPath {
- fill: var(--md-mermaid-edge-color);
- stroke: none;
-}
-
-/* Flowchart subgraph */
-.cluster rect {
- fill: var(--md-default-fg-color--lightest);
- stroke: var(--md-default-fg-color--lighter);
-}
-
-/* Flowchart subgraph labels */
-.cluster span {
- color: var(--md-mermaid-label-fg-color);
- font-family: var(--md-mermaid-font-family);
-}
-
-/* Flowchart markers */
-g #flowchart-circleStart,
-g #flowchart-circleEnd,
-g #flowchart-crossStart,
-g #flowchart-crossEnd,
-g #flowchart-pointStart,
-g #flowchart-pointEnd {
- stroke: none;
-}
-
-/* ----------------------------------------------------------------------------
- * Rules: class diagrams
- * ------------------------------------------------------------------------- */
-
-/* Class group node */
-g.classGroup line,
-g.classGroup rect {
- fill: var(--md-mermaid-node-bg-color);
- stroke: var(--md-mermaid-node-fg-color);
-}
-
-/* Class group node text */
-g.classGroup text {
- font-family: var(--md-mermaid-font-family);
- fill: var(--md-mermaid-label-fg-color);
-}
-
-/* Class label box */
-.classLabel .box {
- background-color: var(--md-mermaid-label-bg-color);
- opacity: 1;
- fill: var(--md-mermaid-label-bg-color);
-}
-
-/* Class label text */
-.classLabel .label {
- font-family: var(--md-mermaid-font-family);
- fill: var(--md-mermaid-label-fg-color);
-}
-
-/* Class group divider */
-.node .divider {
- stroke: var(--md-mermaid-node-fg-color);
-}
-
-/* Class relation */
-.relation {
- stroke: var(--md-mermaid-edge-color);
-}
-
-/* Class relation cardinality */
-.cardinality {
- font-family: var(--md-mermaid-font-family);
- fill: var(--md-mermaid-label-fg-color);
-}
-
-/* Class relation cardinality text */
-.cardinality text {
- fill: inherit !important;
-}
-
-/* Class extension, composition and dependency marker */
-defs #classDiagram-extensionStart,
-defs #classDiagram-extensionEnd,
-defs #classDiagram-compositionStart,
-defs #classDiagram-compositionEnd,
-defs #classDiagram-dependencyStart,
-defs #classDiagram-dependencyEnd {
- fill: var(--md-mermaid-edge-color) !important;
- stroke: var(--md-mermaid-edge-color) !important;
-}
-
-/* Class aggregation marker */
-defs #classDiagram-aggregationStart,
-defs #classDiagram-aggregationEnd {
- fill: var(--md-mermaid-label-bg-color) !important;
- stroke: var(--md-mermaid-edge-color) !important;
-}
-
-/* ----------------------------------------------------------------------------
- * Rules: state diagrams
- * ------------------------------------------------------------------------- */
-
-/* State group node */
-g.stateGroup rect {
- fill: var(--md-mermaid-node-bg-color);
- stroke: var(--md-mermaid-node-fg-color);
-}
-
-/* State group title */
-g.stateGroup .state-title {
- font-family: var(--md-mermaid-font-family);
- fill: var(--md-mermaid-label-fg-color) !important;
-}
-
-/* State group background */
-g.stateGroup .composit {
- fill: var(--md-mermaid-label-bg-color);
-}
-
-/* State node label */
-.nodeLabel {
- color: var(--md-mermaid-label-fg-color);
- font-family: var(--md-mermaid-font-family);
-}
-
-/* State start and end marker */
-.start-state,
-.node circle.state-start,
-.node circle.state-end {
- fill: var(--md-mermaid-edge-color);
- stroke: none;
-}
-
-/* State end marker */
-.end-state-outer,
-.end-state-inner {
- fill: var(--md-mermaid-edge-color);
-}
-
-/* State end marker */
-.end-state-inner,
-.node circle.state-end {
- stroke: var(--md-mermaid-label-bg-color);
-}
-
-/* State transition */
-.transition {
- stroke: var(--md-mermaid-edge-color);
-}
-
-/* State fork and join */
-[id^=state-fork] rect,
-[id^=state-join] rect {
- fill: var(--md-mermaid-edge-color) !important;
- stroke: none !important;
-}
-
-/* State cluster (yes, 2x... Mermaid WTF) */
-.statediagram-cluster.statediagram-cluster .inner {
- fill: var(--md-default-bg-color);
-}
-
-/* State cluster node */
-.statediagram-cluster rect {
- fill: var(--md-mermaid-node-bg-color);
- stroke: var(--md-mermaid-node-fg-color);
-}
-
-/* State cluster divider */
-.statediagram-state rect.divider {
- fill: var(--md-default-fg-color--lightest);
- stroke: var(--md-default-fg-color--lighter);
-}
-
-/* State diagram markers */
-defs #statediagram-barbEnd {
- stroke: var(--md-mermaid-edge-color);
-}
-
-/* ----------------------------------------------------------------------------
- * Rules: entity-relationship diagrams
- * ------------------------------------------------------------------------- */
-
-/* Attribute box */
-.attributeBoxEven,
-.attributeBoxOdd {
- fill: var(--md-mermaid-node-bg-color);
- stroke: var(--md-mermaid-node-fg-color);
-}
-
-/* Entity node */
-.entityBox {
- fill: var(--md-mermaid-label-bg-color);
- stroke: var(--md-mermaid-node-fg-color);
-}
-
-/* Entity node label */
-.entityLabel {
- font-family: var(--md-mermaid-font-family);
- fill: var(--md-mermaid-label-fg-color);
-}
-
-/* Entity relationship label container */
-.relationshipLabelBox {
- background-color: var(--md-mermaid-label-bg-color);
- opacity: 1;
- fill: var(--md-mermaid-label-bg-color);
- fill-opacity: 1;
-}
-
-/* Entity relationship label */
-.relationshipLabel {
- fill: var(--md-mermaid-label-fg-color);
-}
-
-/* Entity relationship line { */
-.relationshipLine {
- stroke: var(--md-mermaid-edge-color);
-}
-
-/* Entity relationship line markers */
-defs #ZERO_OR_ONE_START *,
-defs #ZERO_OR_ONE_END *,
-defs #ZERO_OR_MORE_START *,
-defs #ZERO_OR_MORE_END *,
-defs #ONLY_ONE_START *,
-defs #ONLY_ONE_END *,
-defs #ONE_OR_MORE_START *,
-defs #ONE_OR_MORE_END * {
- stroke: var(--md-mermaid-edge-color) !important;
-}
-
-/* Entity relationship line markers */
-defs #ZERO_OR_MORE_START circle,
-defs #ZERO_OR_MORE_END circle {
- fill: var(--md-mermaid-label-bg-color);
-}
-
-/* ----------------------------------------------------------------------------
- * Rules: sequence diagrams
- * ------------------------------------------------------------------------- */
-
-/* Sequence actor */
-.actor {
- fill: var(--md-mermaid-sequence-actor-bg-color);
- stroke: var(--md-mermaid-sequence-actor-border-color);
-}
-
-/* Sequence actor text */
-text.actor > tspan {
- font-family: var(--md-mermaid-font-family);
- fill: var(--md-mermaid-sequence-actor-fg-color);
-}
-
-/* Sequence actor line */
-line {
- stroke: var(--md-mermaid-sequence-actor-line-color);
-}
-
-/* Sequence actor */
-.actor-man circle,
-.actor-man line {
- fill: var(--md-mermaid-sequence-actorman-bg-color);
- stroke: var(--md-mermaid-sequence-actorman-line-color);
-}
-
-/* Sequence message line */
-.messageLine0,
-.messageLine1 {
- stroke: var(--md-mermaid-sequence-message-line-color);
-}
-
-/* Sequence note */
-.note {
- fill: var(--md-mermaid-sequence-note-bg-color);
- stroke: var(--md-mermaid-sequence-note-border-color);
-}
-
-/* Sequence message, loop and note text */
-.messageText,
-.loopText,
-.loopText > tspan,
-.noteText > tspan {
- font-family: var(--md-mermaid-font-family) !important;
- stroke: none;
-}
-
-/* Sequence message text */
-.messageText {
- fill: var(--md-mermaid-sequence-message-fg-color);
-}
-
-/* Sequence loop text */
-.loopText,
-.loopText > tspan {
- fill: var(--md-mermaid-sequence-loop-fg-color);
-}
-
-/* Sequence note text */
-.noteText > tspan {
- fill: var(--md-mermaid-sequence-note-fg-color);
-}
-
-/* Sequence arrow head */
-#arrowhead path {
- fill: var(--md-mermaid-sequence-message-line-color);
- stroke: none;
-}
-
-/* Sequence loop line */
-.loopLine {
- fill: var(--md-mermaid-sequence-loop-bg-color);
- stroke: var(--md-mermaid-sequence-loop-border-color);
-}
-
-/* Sequence label box */
-.labelBox {
- fill: var(--md-mermaid-sequence-label-bg-color);
- stroke: none;
-}
-
-/* Sequence label text */
-.labelText,
-.labelText > span {
- font-family: var(--md-mermaid-font-family);
- fill: var(--md-mermaid-sequence-label-fg-color);
-}
-
-/* Sequence number */
-.sequenceNumber {
- fill: var(--md-mermaid-sequence-number-fg-color);
-}
-
-/* Sequence rectangle */
-rect.rect {
- fill: var(--md-mermaid-sequence-box-bg-color);
- stroke: none;
-}
-
-/* Sequence rectangle text */
-rect.rect + text.text {
- fill: var(--md-mermaid-sequence-box-fg-color);
-}
-
-/* Sequence diagram markers */
-defs #sequencenumber {
- fill: var(--md-mermaid-sequence-number-bg-color) !important;
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/mermaid/index.ts b/dev/src/templates/assets/javascripts/components/content/mermaid/index.ts
deleted file mode 100644
index 3f6480fd..00000000
--- a/dev/src/templates/assets/javascripts/components/content/mermaid/index.ts
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- map,
- of,
- shareReplay,
- tap
-} from "rxjs"
-
-import { watchScript } from "~/browser"
-import { h } from "~/utilities"
-
-import { Component } from "../../_"
-
-import themeCSS from "./index.css"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mermaid diagram
- */
-export interface Mermaid {}
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Mermaid instance observable
- */
-let mermaid$: Observable<void>
-
-/**
- * Global sequence number for diagrams
- */
-let sequence = 0
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Fetch Mermaid script
- *
- * @returns Mermaid scripts observable
- */
-function fetchScripts(): Observable<void> {
- return typeof mermaid === "undefined" || mermaid instanceof Element
- ? watchScript("https://unpkg.com/mermaid@9.4.3/dist/mermaid.min.js")
- : of(undefined)
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount Mermaid diagram
- *
- * @param el - Code block element
- *
- * @returns Mermaid diagram component observable
- */
-export function mountMermaid(
- el: HTMLElement
-): Observable<Component<Mermaid>> {
- el.classList.remove("mermaid") // Hack: mitigate https://bit.ly/3CiN6Du
- mermaid$ ||= fetchScripts()
- .pipe(
- tap(() => mermaid.initialize({
- startOnLoad: false,
- themeCSS,
- sequence: {
- actorFontSize: "16px", // Hack: mitigate https://bit.ly/3y0NEi3
- messageFontSize: "16px",
- noteFontSize: "16px"
- }
- })),
- map(() => undefined),
- shareReplay(1)
- )
-
- /* Render diagram */
- mermaid$.subscribe(() => {
- el.classList.add("mermaid") // Hack: mitigate https://bit.ly/3CiN6Du
- const id = `__mermaid_${sequence++}`
-
- /* Create host element to replace code block */
- const host = h("div", { class: "mermaid" })
- const text = el.textContent
-
- /* Render and inject diagram */
- mermaid.mermaidAPI.render(id, text, (svg: string, fn: Function) => {
-
- /* Create a shadow root and inject diagram */
- const shadow = host.attachShadow({ mode: "closed" })
- shadow.innerHTML = svg
-
- /* Replace code block with diagram and bind functions */
- el.replaceWith(host)
- fn?.(shadow)
- })
- })
-
- /* Create and return component */
- return mermaid$
- .pipe(
- map(() => ({ ref: el }))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/table/index.ts b/dev/src/templates/assets/javascripts/components/content/table/index.ts
deleted file mode 100644
index c318e7a6..00000000
--- a/dev/src/templates/assets/javascripts/components/content/table/index.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { Observable, of } from "rxjs"
-
-import { renderTable } from "~/templates"
-import { h } from "~/utilities"
-
-import { Component } from "../../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Data table
- */
-export interface DataTable {}
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Sentinel for replacement
- */
-const sentinel = h("table")
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount data table
- *
- * This function wraps a data table in another scrollable container, so it can
- * be smoothly scrolled on smaller screen sizes and won't break the layout.
- *
- * @param el - Data table element
- *
- * @returns Data table component observable
- */
-export function mountDataTable(
- el: HTMLElement
-): Observable<Component<DataTable>> {
- el.replaceWith(sentinel)
- sentinel.replaceWith(renderTable(el))
-
- /* Create and return component */
- return of({ ref: el })
-}
diff --git a/dev/src/templates/assets/javascripts/components/content/tabs/index.ts b/dev/src/templates/assets/javascripts/components/content/tabs/index.ts
deleted file mode 100644
index f57447e2..00000000
--- a/dev/src/templates/assets/javascripts/components/content/tabs/index.ts
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- animationFrameScheduler,
- asyncScheduler,
- auditTime,
- combineLatest,
- defer,
- endWith,
- finalize,
- fromEvent,
- ignoreElements,
- map,
- merge,
- skip,
- startWith,
- subscribeOn,
- takeUntil,
- tap,
- withLatestFrom
-} from "rxjs"
-
-import { feature } from "~/_"
-import {
- Viewport,
- getElement,
- getElementContentOffset,
- getElementContentSize,
- getElementOffset,
- getElementSize,
- getElements,
- watchElementContentOffset,
- watchElementSize
-} from "~/browser"
-import { renderTabbedControl } from "~/templates"
-
-import { Component } from "../../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Content tabs
- */
-export interface ContentTabs {
- active: HTMLLabelElement /* Active tab label */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch content tabs
- *
- * @param el - Content tabs element
- *
- * @returns Content tabs observable
- */
-export function watchContentTabs(
- el: HTMLElement
-): Observable<ContentTabs> {
- const inputs = getElements<HTMLInputElement>(":scope > input", el)
- const initial = inputs.find(input => input.checked) || inputs[0]
- return merge(...inputs.map(input => fromEvent(input, "change")
- .pipe(
- map(() => getElement<HTMLLabelElement>(`label[for="${input.id}"]`))
- )
- ))
- .pipe(
- startWith(getElement<HTMLLabelElement>(`label[for="${initial.id}"]`)),
- map(active => ({ active }))
- )
-}
-
-/**
- * Mount content tabs
- *
- * This function scrolls the active tab into view. While this functionality is
- * provided by browsers as part of `scrollInfoView`, browsers will always also
- * scroll the vertical axis, which we do not want. Thus, we decided to provide
- * this functionality ourselves.
- *
- * @param el - Content tabs element
- * @param options - Options
- *
- * @returns Content tabs component observable
- */
-export function mountContentTabs(
- el: HTMLElement, { viewport$ }: MountOptions
-): Observable<Component<ContentTabs>> {
-
- /* Render content tab previous button for pagination */
- const prev = renderTabbedControl("prev")
- el.append(prev)
-
- /* Render content tab next button for pagination */
- const next = renderTabbedControl("next")
- el.append(next)
-
- /* Mount component on subscription */
- const container = getElement(".tabbed-labels", el)
- return defer(() => {
- const push$ = new Subject<ContentTabs>()
- const done$ = push$.pipe(ignoreElements(), endWith(true))
- combineLatest([push$, watchElementSize(el)])
- .pipe(
- auditTime(1, animationFrameScheduler),
- takeUntil(done$)
- )
- .subscribe({
-
- /* Handle emission */
- next([{ active }, size]) {
- const offset = getElementOffset(active)
- const { width } = getElementSize(active)
-
- /* Set tab indicator offset and width */
- el.style.setProperty("--md-indicator-x", `${offset.x}px`)
- el.style.setProperty("--md-indicator-width", `${width}px`)
-
- /* Scroll container to active content tab */
- const content = getElementContentOffset(container)
- if (
- offset.x < content.x ||
- offset.x + width > content.x + size.width
- )
- container.scrollTo({
- left: Math.max(0, offset.x - 16),
- behavior: "smooth"
- })
- },
-
- /* Handle complete */
- complete() {
- el.style.removeProperty("--md-indicator-x")
- el.style.removeProperty("--md-indicator-width")
- }
- })
-
- /* Hide content tab buttons on borders */
- combineLatest([
- watchElementContentOffset(container),
- watchElementSize(container)
- ])
- .pipe(
- takeUntil(done$)
- )
- .subscribe(([offset, size]) => {
- const content = getElementContentSize(container)
- prev.hidden = offset.x < 16
- next.hidden = offset.x > content.width - size.width - 16
- })
-
- /* Paginate content tab container on click */
- merge(
- fromEvent(prev, "click").pipe(map(() => -1)),
- fromEvent(next, "click").pipe(map(() => +1))
- )
- .pipe(
- takeUntil(done$)
- )
- .subscribe(direction => {
- const { width } = getElementSize(container)
- container.scrollBy({
- left: width * direction,
- behavior: "smooth"
- })
- })
-
- /* Set up linking of content tabs, if enabled */
- if (feature("content.tabs.link"))
- push$.pipe(
- skip(1),
- withLatestFrom(viewport$)
- )
- .subscribe(([{ active }, { offset }]) => {
- const tab = active.innerText.trim()
- if (active.hasAttribute("data-md-switching")) {
- active.removeAttribute("data-md-switching")
-
- /* Determine viewport offset of active tab */
- } else {
- const y = el.offsetTop - offset.y
-
- /* Passively activate other tabs */
- for (const set of getElements("[data-tabs]"))
- for (const input of getElements<HTMLInputElement>(
- ":scope > input", set
- )) {
- const label = getElement(`label[for="${input.id}"]`)
- if (
- label !== active &&
- label.innerText.trim() === tab
- ) {
- label.setAttribute("data-md-switching", "")
- input.click()
- break
- }
- }
-
- /* Bring active tab into view */
- window.scrollTo({
- top: el.offsetTop - y
- })
-
- /* Persist active tabs in local storage */
- const tabs = __md_get<string[]>("__tabs") || []
- __md_set("__tabs", [...new Set([tab, ...tabs])])
- }
- })
-
- /* Pause media (audio, video) on switch - see https://bit.ly/3Bk6cel */
- push$.pipe(takeUntil(done$))
- .subscribe(() => {
- for (const media of getElements<HTMLAudioElement>("audio, video", el))
- media.pause()
- })
-
- /* Create and return component */
- return watchContentTabs(el)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
- .pipe(
- subscribeOn(asyncScheduler)
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/dialog/index.ts b/dev/src/templates/assets/javascripts/components/dialog/index.ts
deleted file mode 100644
index 6ff1bd44..00000000
--- a/dev/src/templates/assets/javascripts/components/dialog/index.ts
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- defer,
- delay,
- finalize,
- map,
- merge,
- of,
- switchMap,
- tap
-} from "rxjs"
-
-import { getElement } from "~/browser"
-
-import { Component } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Dialog
- */
-export interface Dialog {
- message: string /* Dialog message */
- active: boolean /* Dialog is active */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- alert$: Subject<string> /* Alert subject */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- alert$: Subject<string> /* Alert subject */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch dialog
- *
- * @param _el - Dialog element
- * @param options - Options
- *
- * @returns Dialog observable
- */
-export function watchDialog(
- _el: HTMLElement, { alert$ }: WatchOptions
-): Observable<Dialog> {
- return alert$
- .pipe(
- switchMap(message => merge(
- of(true),
- of(false).pipe(delay(2000))
- )
- .pipe(
- map(active => ({ message, active }))
- )
- )
- )
-}
-
-/**
- * Mount dialog
- *
- * This function reveals the dialog in the right corner when a new alert is
- * emitted through the subject that is passed as part of the options.
- *
- * @param el - Dialog element
- * @param options - Options
- *
- * @returns Dialog component observable
- */
-export function mountDialog(
- el: HTMLElement, options: MountOptions
-): Observable<Component<Dialog>> {
- const inner = getElement(".md-typeset", el)
- return defer(() => {
- const push$ = new Subject<Dialog>()
- push$.subscribe(({ message, active }) => {
- el.classList.toggle("md-dialog--active", active)
- inner.textContent = message
- })
-
- /* Create and return component */
- return watchDialog(el, options)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/header/_/index.ts b/dev/src/templates/assets/javascripts/components/header/_/index.ts
deleted file mode 100644
index 0f33eb48..00000000
--- a/dev/src/templates/assets/javascripts/components/header/_/index.ts
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- bufferCount,
- combineLatest,
- combineLatestWith,
- defer,
- distinctUntilChanged,
- distinctUntilKeyChanged,
- endWith,
- filter,
- ignoreElements,
- map,
- of,
- shareReplay,
- startWith,
- switchMap,
- takeUntil
-} from "rxjs"
-
-import { feature } from "~/_"
-import {
- Viewport,
- watchElementSize,
- watchToggle
-} from "~/browser"
-
-import { Component } from "../../_"
-import { Main } from "../../main"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Header
- */
-export interface Header {
- height: number /* Header visible height */
- hidden: boolean /* Header is hidden */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
- main$: Observable<Main> /* Main area observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Compute whether the header is hidden
- *
- * If the user scrolls past a certain threshold, the header can be hidden when
- * scrolling down, and shown when scrolling up.
- *
- * @param options - Options
- *
- * @returns Toggle observable
- */
-function isHidden({ viewport$ }: WatchOptions): Observable<boolean> {
- if (!feature("header.autohide"))
- return of(false)
-
- /* Compute direction and turning point */
- const direction$ = viewport$
- .pipe(
- map(({ offset: { y } }) => y),
- bufferCount(2, 1),
- map(([a, b]) => [a < b, b] as const),
- distinctUntilKeyChanged(0)
- )
-
- /* Compute whether header should be hidden */
- const hidden$ = combineLatest([viewport$, direction$])
- .pipe(
- filter(([{ offset }, [, y]]) => Math.abs(y - offset.y) > 100),
- map(([, [direction]]) => direction),
- distinctUntilChanged()
- )
-
- /* Compute threshold for hiding */
- const search$ = watchToggle("search")
- return combineLatest([viewport$, search$])
- .pipe(
- map(([{ offset }, search]) => offset.y > 400 && !search),
- distinctUntilChanged(),
- switchMap(active => active ? hidden$ : of(false)),
- startWith(false)
- )
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch header
- *
- * @param el - Header element
- * @param options - Options
- *
- * @returns Header observable
- */
-export function watchHeader(
- el: HTMLElement, options: WatchOptions
-): Observable<Header> {
- return defer(() => combineLatest([
- watchElementSize(el),
- isHidden(options)
- ]))
- .pipe(
- map(([{ height }, hidden]) => ({
- height,
- hidden
- })),
- distinctUntilChanged((a, b) => (
- a.height === b.height &&
- a.hidden === b.hidden
- )),
- shareReplay(1)
- )
-}
-
-/**
- * Mount header
- *
- * This function manages the different states of the header, i.e. whether it's
- * hidden or rendered with a shadow. This depends heavily on the main area.
- *
- * @param el - Header element
- * @param options - Options
- *
- * @returns Header component observable
- */
-export function mountHeader(
- el: HTMLElement, { header$, main$ }: MountOptions
-): Observable<Component<Header>> {
- return defer(() => {
- const push$ = new Subject<Main>()
- const done$ = push$.pipe(ignoreElements(), endWith(true))
- push$
- .pipe(
- distinctUntilKeyChanged("active"),
- combineLatestWith(header$)
- )
- .subscribe(([{ active }, { hidden }]) => {
- el.classList.toggle("md-header--shadow", active && !hidden)
- el.hidden = hidden
- })
-
- /* Link to main area */
- main$.subscribe(push$)
-
- /* Create and return component */
- return header$
- .pipe(
- takeUntil(done$),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/header/index.ts b/dev/src/templates/assets/javascripts/components/header/index.ts
deleted file mode 100644
index cf23ec1a..00000000
--- a/dev/src/templates/assets/javascripts/components/header/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./title"
diff --git a/dev/src/templates/assets/javascripts/components/header/title/index.ts b/dev/src/templates/assets/javascripts/components/header/title/index.ts
deleted file mode 100644
index f3bc0d08..00000000
--- a/dev/src/templates/assets/javascripts/components/header/title/index.ts
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Observable,
- Subject,
- defer,
- distinctUntilKeyChanged,
- finalize,
- map,
- tap
-} from "rxjs"
-
-import {
- Viewport,
- getElementSize,
- getOptionalElement,
- watchViewportAt
-} from "~/browser"
-
-import { Component } from "../../_"
-import { Header } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Header
- */
-export interface HeaderTitle {
- active: boolean /* Header title is active */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch header title
- *
- * @param el - Heading element
- * @param options - Options
- *
- * @returns Header title observable
- */
-export function watchHeaderTitle(
- el: HTMLElement, { viewport$, header$ }: WatchOptions
-): Observable<HeaderTitle> {
- return watchViewportAt(el, { viewport$, header$ })
- .pipe(
- map(({ offset: { y } }) => {
- const { height } = getElementSize(el)
- return {
- active: y >= height
- }
- }),
- distinctUntilKeyChanged("active")
- )
-}
-
-/**
- * Mount header title
- *
- * This function swaps the header title from the site title to the title of the
- * current page when the user scrolls past the first headline.
- *
- * @param el - Header title element
- * @param options - Options
- *
- * @returns Header title component observable
- */
-export function mountHeaderTitle(
- el: HTMLElement, options: MountOptions
-): Observable<Component<HeaderTitle>> {
- return defer(() => {
- const push$ = new Subject<HeaderTitle>()
- push$.subscribe({
-
- /* Handle emission */
- next({ active }) {
- el.classList.toggle("md-header__title--active", active)
- },
-
- /* Handle complete */
- complete() {
- el.classList.remove("md-header__title--active")
- }
- })
-
- /* Obtain headline, if any */
- const heading = getOptionalElement(".md-content h1")
- if (typeof heading === "undefined")
- return EMPTY
-
- /* Create and return component */
- return watchHeaderTitle(heading, options)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/index.ts b/dev/src/templates/assets/javascripts/components/index.ts
deleted file mode 100644
index 3d4391d1..00000000
--- a/dev/src/templates/assets/javascripts/components/index.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./announce"
-export * from "./consent"
-export * from "./content"
-export * from "./dialog"
-export * from "./header"
-export * from "./main"
-export * from "./palette"
-export * from "./progress"
-export * from "./search"
-export * from "./sidebar"
-export * from "./source"
-export * from "./tabs"
-export * from "./toc"
-export * from "./top"
diff --git a/dev/src/templates/assets/javascripts/components/main/index.ts b/dev/src/templates/assets/javascripts/components/main/index.ts
deleted file mode 100644
index 2509f9b9..00000000
--- a/dev/src/templates/assets/javascripts/components/main/index.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- combineLatest,
- distinctUntilChanged,
- distinctUntilKeyChanged,
- map,
- switchMap
-} from "rxjs"
-
-import {
- Viewport,
- watchElementSize
-} from "~/browser"
-
-import { Header } from "../header"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Main area
- */
-export interface Main {
- offset: number /* Main area top offset */
- height: number /* Main area visible height */
- active: boolean /* Main area is active */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch main area
- *
- * This function returns an observable that computes the visual parameters of
- * the main area which depends on the viewport vertical offset and height, as
- * well as the height of the header element, if the header is fixed.
- *
- * @param el - Main area element
- * @param options - Options
- *
- * @returns Main area observable
- */
-export function watchMain(
- el: HTMLElement, { viewport$, header$ }: WatchOptions
-): Observable<Main> {
-
- /* Compute necessary adjustment for header */
- const adjust$ = header$
- .pipe(
- map(({ height }) => height),
- distinctUntilChanged()
- )
-
- /* Compute the main area's top and bottom borders */
- const border$ = adjust$
- .pipe(
- switchMap(() => watchElementSize(el)
- .pipe(
- map(({ height }) => ({
- top: el.offsetTop,
- bottom: el.offsetTop + height
- })),
- distinctUntilKeyChanged("bottom")
- )
- )
- )
-
- /* Compute the main area's offset, visible height and if we scrolled past */
- return combineLatest([adjust$, border$, viewport$])
- .pipe(
- map(([header, { top, bottom }, { offset: { y }, size: { height } }]) => {
- height = Math.max(0, height
- - Math.max(0, top - y, header)
- - Math.max(0, height + y - bottom)
- )
- return {
- offset: top - header,
- height,
- active: top - header <= y
- }
- }),
- distinctUntilChanged((a, b) => (
- a.offset === b.offset &&
- a.height === b.height &&
- a.active === b.active
- ))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/palette/index.ts b/dev/src/templates/assets/javascripts/components/palette/index.ts
deleted file mode 100644
index cf578f60..00000000
--- a/dev/src/templates/assets/javascripts/components/palette/index.ts
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- asyncScheduler,
- defer,
- finalize,
- fromEvent,
- map,
- mergeMap,
- observeOn,
- of,
- shareReplay,
- startWith,
- tap
-} from "rxjs"
-
-import { getElements } from "~/browser"
-import { h } from "~/utilities"
-
-import {
- Component,
- getComponentElement
-} from "../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Palette colors
- */
-export interface PaletteColor {
- scheme?: string /* Color scheme */
- primary?: string /* Primary color */
- accent?: string /* Accent color */
-}
-
-/**
- * Palette
- */
-export interface Palette {
- index: number /* Palette index */
- color: PaletteColor /* Palette colors */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch color palette
- *
- * @param inputs - Color palette element
- *
- * @returns Color palette observable
- */
-export function watchPalette(
- inputs: HTMLInputElement[]
-): Observable<Palette> {
- const current = __md_get<Palette>("__palette") || {
- index: inputs.findIndex(input => matchMedia(
- input.getAttribute("data-md-color-media")!
- ).matches)
- }
-
- /* Emit changes in color palette */
- return of(...inputs)
- .pipe(
- mergeMap(input => fromEvent(input, "change")
- .pipe(
- map(() => input)
- )
- ),
- startWith(inputs[Math.max(0, current.index)]),
- map(input => ({
- index: inputs.indexOf(input),
- color: {
- scheme: input.getAttribute("data-md-color-scheme"),
- primary: input.getAttribute("data-md-color-primary"),
- accent: input.getAttribute("data-md-color-accent")
- }
- } as Palette)),
- shareReplay(1)
- )
-}
-
-/**
- * Mount color palette
- *
- * @param el - Color palette element
- *
- * @returns Color palette component observable
- */
-export function mountPalette(
- el: HTMLElement
-): Observable<Component<Palette>> {
- const meta = h("meta", { name: "theme-color" })
- document.head.appendChild(meta)
-
- // Add color scheme meta tag
- const scheme = h("meta", { name: "color-scheme" })
- document.head.appendChild(scheme)
-
- /* Mount component on subscription */
- return defer(() => {
- const push$ = new Subject<Palette>()
- push$.subscribe(palette => {
- document.body.setAttribute("data-md-color-switching", "")
-
- /* Set color palette */
- for (const [key, value] of Object.entries(palette.color))
- document.body.setAttribute(`data-md-color-${key}`, value)
-
- /* Toggle visibility */
- for (let index = 0; index < inputs.length; index++) {
- const label = inputs[index].nextElementSibling
- if (label instanceof HTMLElement)
- label.hidden = palette.index !== index
- }
-
- /* Persist preference in local storage */
- __md_set("__palette", palette)
- })
-
- /* Update theme-color meta tag */
- push$
- .pipe(
- map(() => {
- const header = getComponentElement("header")
- const style = window.getComputedStyle(header)
-
- // Set color scheme
- scheme.content = style.colorScheme
-
- /* Return color in hexadecimal format */
- return style.backgroundColor.match(/\d+/g)!
- .map(value => (+value).toString(16).padStart(2, "0"))
- .join("")
- })
- )
- .subscribe(color => meta.content = `#${color}`)
-
- /* Revert transition durations after color switch */
- push$.pipe(observeOn(asyncScheduler))
- .subscribe(() => {
- document.body.removeAttribute("data-md-color-switching")
- })
-
- /* Create and return component */
- const inputs = getElements<HTMLInputElement>("input", el)
- return watchPalette(inputs)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/progress/index.ts b/dev/src/templates/assets/javascripts/components/progress/index.ts
deleted file mode 100644
index 30c722b8..00000000
--- a/dev/src/templates/assets/javascripts/components/progress/index.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- defer,
- finalize,
- map,
- tap
-} from "rxjs"
-
-import { Component } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Progress indicator
- */
-export interface Progress {
- value: number // Progress value
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- progress$: Subject<number> // Progress subject
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount progress indicator
- *
- * @param el - Progress indicator element
- * @param options - Options
- *
- * @returns Progress indicator component observable
- */
-export function mountProgress(
- el: HTMLElement, { progress$ }: MountOptions
-): Observable<Component<Progress>> {
-
- // Mount component on subscription
- return defer(() => {
- const push$ = new Subject<Progress>()
- push$.subscribe(({ value }) => {
- el.style.setProperty("--md-progress-value", `${value}`)
- })
-
- // Create and return component
- return progress$
- .pipe(
- tap(value => push$.next({ value })),
- finalize(() => push$.complete()),
- map(value => ({ ref: el, value }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/search/_/index.ts b/dev/src/templates/assets/javascripts/components/search/_/index.ts
deleted file mode 100644
index aa963b47..00000000
--- a/dev/src/templates/assets/javascripts/components/search/_/index.ts
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- NEVER,
- Observable,
- ObservableInput,
- filter,
- fromEvent,
- merge,
- mergeWith
-} from "rxjs"
-
-import { configuration } from "~/_"
-import {
- Keyboard,
- getActiveElement,
- getElements,
- setToggle
-} from "~/browser"
-import {
- SearchIndex,
- SearchResult,
- setupSearchWorker
-} from "~/integrations"
-
-import {
- Component,
- getComponentElement,
- getComponentElements
-} from "../../_"
-import {
- SearchQuery,
- mountSearchQuery
-} from "../query"
-import { mountSearchResult } from "../result"
-import {
- SearchShare,
- mountSearchShare
-} from "../share"
-import {
- SearchSuggest,
- mountSearchSuggest
-} from "../suggest"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search
- */
-export type Search =
- | SearchQuery
- | SearchResult
- | SearchShare
- | SearchSuggest
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- index$: ObservableInput<SearchIndex> /* Search index observable */
- keyboard$: Observable<Keyboard> /* Keyboard observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount search
- *
- * This function sets up the search functionality, including the underlying
- * web worker and all keyboard bindings.
- *
- * @param el - Search element
- * @param options - Options
- *
- * @returns Search component observable
- */
-export function mountSearch(
- el: HTMLElement, { index$, keyboard$ }: MountOptions
-): Observable<Component<Search>> {
- const config = configuration()
- try {
- const worker$ = setupSearchWorker(config.search, index$)
-
- /* Retrieve query and result components */
- const query = getComponentElement("search-query", el)
- const result = getComponentElement("search-result", el)
-
- /* Always close search on result selection */
- fromEvent<PointerEvent>(el, "click")
- .pipe(
- filter(({ target }) => (
- target instanceof Element && !!target.closest("a")
- ))
- )
- .subscribe(() => setToggle("search", false))
-
- /* Set up search keyboard handlers */
- keyboard$
- .pipe(
- filter(({ mode }) => mode === "search")
- )
- .subscribe(key => {
- const active = getActiveElement()
- switch (key.type) {
-
- /* Enter: go to first (best) result */
- case "Enter":
- if (active === query) {
- const anchors = new Map<HTMLAnchorElement, number>()
- for (const anchor of getElements<HTMLAnchorElement>(
- ":first-child [href]", result
- )) {
- const article = anchor.firstElementChild!
- anchors.set(anchor, parseFloat(
- article.getAttribute("data-md-score")!
- ))
- }
-
- /* Go to result with highest score, if any */
- if (anchors.size) {
- const [[best]] = [...anchors].sort(([, a], [, b]) => b - a)
- best.click()
- }
-
- /* Otherwise omit form submission */
- key.claim()
- }
- break
-
- /* Escape or Tab: close search */
- case "Escape":
- case "Tab":
- setToggle("search", false)
- query.blur()
- break
-
- /* Vertical arrows: select previous or next search result */
- case "ArrowUp":
- case "ArrowDown":
- if (typeof active === "undefined") {
- query.focus()
- } else {
- const els = [query, ...getElements(
- ":not(details) > [href], summary, details[open] [href]",
- result
- )]
- const i = Math.max(0, (
- Math.max(0, els.indexOf(active)) + els.length + (
- key.type === "ArrowUp" ? -1 : +1
- )
- ) % els.length)
- els[i].focus()
- }
-
- /* Prevent scrolling of page */
- key.claim()
- break
-
- /* All other keys: hand to search query */
- default:
- if (query !== getActiveElement())
- query.focus()
- }
- })
-
- /* Set up global keyboard handlers */
- keyboard$
- .pipe(
- filter(({ mode }) => mode === "global")
- )
- .subscribe(key => {
- switch (key.type) {
-
- /* Open search and select query */
- case "f":
- case "s":
- case "/":
- query.focus()
- query.select()
-
- /* Prevent scrolling of page */
- key.claim()
- break
- }
- })
-
- /* Create and return component */
- const query$ = mountSearchQuery(query, { worker$ })
- return merge(
- query$,
- mountSearchResult(result, { worker$, query$ })
- )
- .pipe(
- mergeWith(
-
- /* Search sharing */
- ...getComponentElements("search-share", el)
- .map(child => mountSearchShare(child, { query$ })),
-
- /* Search suggestions */
- ...getComponentElements("search-suggest", el)
- .map(child => mountSearchSuggest(child, { worker$, keyboard$ }))
- )
- )
-
- /* Gracefully handle broken search */
- } catch (err) {
- el.hidden = true
- return NEVER
- }
-}
diff --git a/dev/src/templates/assets/javascripts/components/search/highlight/index.ts b/dev/src/templates/assets/javascripts/components/search/highlight/index.ts
deleted file mode 100644
index bc3f94c9..00000000
--- a/dev/src/templates/assets/javascripts/components/search/highlight/index.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- ObservableInput,
- combineLatest,
- filter,
- map,
- startWith
-} from "rxjs"
-
-import { getLocation } from "~/browser"
-import {
- SearchIndex,
- setupSearchHighlighter
-} from "~/integrations"
-import { h } from "~/utilities"
-
-import { Component } from "../../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search highlighting
- */
-export interface SearchHighlight {
- nodes: Map<ChildNode, string> /* Map of replacements */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- index$: ObservableInput<SearchIndex> /* Search index observable */
- location$: Observable<URL> /* Location observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount search highlighting
- *
- * @param el - Content element
- * @param options - Options
- *
- * @returns Search highlighting component observable
- */
-export function mountSearchHiglight(
- el: HTMLElement, { index$, location$ }: MountOptions
-): Observable<Component<SearchHighlight>> {
- return combineLatest([
- index$,
- location$
- .pipe(
- startWith(getLocation()),
- filter(url => !!url.searchParams.get("h"))
- )
- ])
- .pipe(
- map(([index, url]) => setupSearchHighlighter(index.config)(
- url.searchParams.get("h")!
- )),
- map(fn => {
- const nodes = new Map<ChildNode, string>()
-
- /* Traverse text nodes and collect matches */
- const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)
- for (let node = it.nextNode(); node; node = it.nextNode()) {
- if (node.parentElement?.offsetHeight) {
- const original = node.textContent!
- const replaced = fn(original)
- if (replaced.length > original.length)
- nodes.set(node as ChildNode, replaced)
- }
- }
-
- /* Replace original nodes with matches */
- for (const [node, text] of nodes) {
- const { childNodes } = h("span", null, text)
- node.replaceWith(...Array.from(childNodes))
- }
-
- /* Return component */
- return { ref: el, nodes }
- })
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/search/index.ts b/dev/src/templates/assets/javascripts/components/search/index.ts
deleted file mode 100644
index 846d8685..00000000
--- a/dev/src/templates/assets/javascripts/components/search/index.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./highlight"
-export * from "./query"
-export * from "./result"
-export * from "./share"
-export * from "./suggest"
diff --git a/dev/src/templates/assets/javascripts/components/search/query/index.ts b/dev/src/templates/assets/javascripts/components/search/query/index.ts
deleted file mode 100644
index 4ce21279..00000000
--- a/dev/src/templates/assets/javascripts/components/search/query/index.ts
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- combineLatest,
- distinctUntilChanged,
- distinctUntilKeyChanged,
- endWith,
- finalize,
- first,
- fromEvent,
- ignoreElements,
- map,
- merge,
- shareReplay,
- takeUntil,
- tap
-} from "rxjs"
-
-import {
- getElement,
- getLocation,
- setToggle,
- watchElementFocus,
- watchToggle
-} from "~/browser"
-import {
- SearchMessage,
- SearchMessageType,
- isSearchReadyMessage
-} from "~/integrations"
-
-import { Component } from "../../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search query
- */
-export interface SearchQuery {
- value: string /* Query value */
- focus: boolean /* Query focus */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- worker$: Subject<SearchMessage> /* Search worker */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- worker$: Subject<SearchMessage> /* Search worker */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch search query
- *
- * Note that the focus event which triggers re-reading the current query value
- * is delayed by `1ms` so the input's empty state is allowed to propagate.
- *
- * @param el - Search query element
- * @param options - Options
- *
- * @returns Search query observable
- */
-export function watchSearchQuery(
- el: HTMLInputElement, { worker$ }: WatchOptions
-): Observable<SearchQuery> {
-
- /* Support search deep linking */
- const { searchParams } = getLocation()
- if (searchParams.has("q")) {
- setToggle("search", true)
-
- /* Set query from parameter */
- el.value = searchParams.get("q")!
- el.focus()
-
- /* Remove query parameter on close */
- watchToggle("search")
- .pipe(
- first(active => !active)
- )
- .subscribe(() => {
- const url = getLocation()
- url.searchParams.delete("q")
- history.replaceState({}, "", `${url}`)
- })
- }
-
- /* Intercept focus and input events */
- const focus$ = watchElementFocus(el)
- const value$ = merge(
- worker$.pipe(first(isSearchReadyMessage)),
- fromEvent(el, "keyup"),
- focus$
- )
- .pipe(
- map(() => el.value),
- distinctUntilChanged()
- )
-
- /* Combine into single observable */
- return combineLatest([value$, focus$])
- .pipe(
- map(([value, focus]) => ({ value, focus })),
- shareReplay(1)
- )
-}
-
-/**
- * Mount search query
- *
- * @param el - Search query element
- * @param options - Options
- *
- * @returns Search query component observable
- */
-export function mountSearchQuery(
- el: HTMLInputElement, { worker$ }: MountOptions
-): Observable<Component<SearchQuery, HTMLInputElement>> {
- const push$ = new Subject<SearchQuery>()
- const done$ = push$.pipe(ignoreElements(), endWith(true))
-
- /* Handle value change */
- combineLatest([
- worker$.pipe(first(isSearchReadyMessage)),
- push$
- ], (_, query) => query)
- .pipe(
- distinctUntilKeyChanged("value")
- )
- .subscribe(({ value }) => worker$.next({
- type: SearchMessageType.QUERY,
- data: value
- }))
-
- /* Handle focus change */
- push$
- .pipe(
- distinctUntilKeyChanged("focus")
- )
- .subscribe(({ focus }) => {
- if (focus)
- setToggle("search", focus)
- })
-
- /* Handle reset */
- fromEvent(el.form!, "reset")
- .pipe(
- takeUntil(done$)
- )
- .subscribe(() => el.focus())
-
- // Focus search query on label click - note that this is necessary to bring
- // up the keyboard on iOS and other mobile platforms, as the search dialog is
- // not visible at first, and programatically focusing an input element must
- // be triggered by a user interaction - see https://t.ly/Cb30n
- const label = getElement("header [for=__search]")
- fromEvent(label, "click")
- .subscribe(() => el.focus())
-
- /* Create and return component */
- return watchSearchQuery(el, { worker$ })
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state })),
- shareReplay(1)
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/search/result/index.ts b/dev/src/templates/assets/javascripts/components/search/result/index.ts
deleted file mode 100644
index c3c9ef20..00000000
--- a/dev/src/templates/assets/javascripts/components/search/result/index.ts
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Observable,
- Subject,
- bufferCount,
- filter,
- finalize,
- first,
- fromEvent,
- map,
- merge,
- mergeMap,
- of,
- share,
- skipUntil,
- switchMap,
- takeUntil,
- tap,
- withLatestFrom,
- zipWith
-} from "rxjs"
-
-import { translation } from "~/_"
-import {
- getElement,
- getOptionalElement,
- watchElementBoundary,
- watchToggle
-} from "~/browser"
-import {
- SearchMessage,
- SearchResult,
- isSearchReadyMessage,
- isSearchResultMessage
-} from "~/integrations"
-import { renderSearchResultItem } from "~/templates"
-import { round } from "~/utilities"
-
-import { Component } from "../../_"
-import { SearchQuery } from "../query"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- query$: Observable<SearchQuery> /* Search query observable */
- worker$: Subject<SearchMessage> /* Search worker */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount search result list
- *
- * This function performs a lazy rendering of the search results, depending on
- * the vertical offset of the search result container.
- *
- * @param el - Search result list element
- * @param options - Options
- *
- * @returns Search result list component observable
- */
-export function mountSearchResult(
- el: HTMLElement, { worker$, query$ }: MountOptions
-): Observable<Component<SearchResult>> {
- const push$ = new Subject<SearchResult>()
- const boundary$ = watchElementBoundary(el.parentElement!)
- .pipe(
- filter(Boolean)
- )
-
- /* Retrieve container */
- const container = el.parentElement!
-
- /* Retrieve nested components */
- const meta = getElement(":scope > :first-child", el)
- const list = getElement(":scope > :last-child", el)
-
- /* Reveal to accessibility tree – see https://bit.ly/3iAA7t8 */
- watchToggle("search")
- .subscribe(active => list.setAttribute(
- "role", active ? "list" : "presentation"
- ))
-
- /* Update search result metadata */
- push$
- .pipe(
- withLatestFrom(query$),
- skipUntil(worker$.pipe(first(isSearchReadyMessage)))
- )
- .subscribe(([{ items }, { value }]) => {
- switch (items.length) {
-
- /* No results */
- case 0:
- meta.textContent = value.length
- ? translation("search.result.none")
- : translation("search.result.placeholder")
- break
-
- /* One result */
- case 1:
- meta.textContent = translation("search.result.one")
- break
-
- /* Multiple result */
- default:
- const count = round(items.length)
- meta.textContent = translation("search.result.other", count)
- }
- })
-
- /* Render search result item */
- const render$ = push$
- .pipe(
- tap(() => list.innerHTML = ""),
- switchMap(({ items }) => merge(
- of(...items.slice(0, 10)),
- of(...items.slice(10))
- .pipe(
- bufferCount(4),
- zipWith(boundary$),
- switchMap(([chunk]) => chunk)
- )
- )),
- map(renderSearchResultItem),
- share()
- )
-
- /* Update search result list */
- render$.subscribe(item => list.appendChild(item))
- render$
- .pipe(
- mergeMap(item => {
- const details = getOptionalElement("details", item)
- if (typeof details === "undefined")
- return EMPTY
-
- /* Keep position of details element stable */
- return fromEvent(details, "toggle")
- .pipe(
- takeUntil(push$),
- map(() => details)
- )
- })
- )
- .subscribe(details => {
- if (
- details.open === false &&
- details.offsetTop <= container.scrollTop
- )
- container.scrollTo({ top: details.offsetTop })
- })
-
- /* Filter search result message */
- const result$ = worker$
- .pipe(
- filter(isSearchResultMessage),
- map(({ data }) => data)
- )
-
- /* Create and return component */
- return result$
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/search/share/index.ts b/dev/src/templates/assets/javascripts/components/search/share/index.ts
deleted file mode 100644
index 3db382c8..00000000
--- a/dev/src/templates/assets/javascripts/components/search/share/index.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- endWith,
- finalize,
- fromEvent,
- ignoreElements,
- map,
- takeUntil,
- tap
-} from "rxjs"
-
-import { getLocation } from "~/browser"
-
-import { Component } from "../../_"
-import { SearchQuery } from "../query"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search sharing
- */
-export interface SearchShare {
- url: URL /* Deep link for sharing */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- query$: Observable<SearchQuery> /* Search query observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- query$: Observable<SearchQuery> /* Search query observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount search sharing
- *
- * @param _el - Search sharing element
- * @param options - Options
- *
- * @returns Search sharing observable
- */
-export function watchSearchShare(
- _el: HTMLElement, { query$ }: WatchOptions
-): Observable<SearchShare> {
- return query$
- .pipe(
- map(({ value }) => {
- const url = getLocation()
- url.hash = ""
-
- /* Compute readable query strings */
- value = value
- .replace(/\s+/g, "+") /* Collapse whitespace */
- .replace(/&/g, "%26") /* Escape '&' character */
- .replace(/=/g, "%3D") /* Escape '=' character */
-
- /* Replace query string */
- url.search = `q=${value}`
- return { url }
- })
- )
-}
-
-/**
- * Mount search sharing
- *
- * @param el - Search sharing element
- * @param options - Options
- *
- * @returns Search sharing component observable
- */
-export function mountSearchShare(
- el: HTMLAnchorElement, options: MountOptions
-): Observable<Component<SearchShare>> {
- const push$ = new Subject<SearchShare>()
- const done$ = push$.pipe(ignoreElements(), endWith(true))
- push$.subscribe(({ url }) => {
- el.setAttribute("data-clipboard-text", el.href)
- el.href = `${url}`
- })
-
- /* Prevent following of link */
- fromEvent(el, "click")
- .pipe(
- takeUntil(done$)
- )
- .subscribe(ev => ev.preventDefault())
-
- /* Create and return component */
- return watchSearchShare(el, options)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/search/suggest/index.ts b/dev/src/templates/assets/javascripts/components/search/suggest/index.ts
deleted file mode 100644
index e7881475..00000000
--- a/dev/src/templates/assets/javascripts/components/search/suggest/index.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- asyncScheduler,
- combineLatestWith,
- distinctUntilChanged,
- filter,
- finalize,
- fromEvent,
- map,
- merge,
- observeOn,
- tap
-} from "rxjs"
-
-import { Keyboard } from "~/browser"
-import {
- SearchMessage,
- SearchResult,
- isSearchResultMessage
-} from "~/integrations"
-
-import { Component, getComponentElement } from "../../_"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search suggestions
- */
-export interface SearchSuggest {}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount options
- */
-interface MountOptions {
- keyboard$: Observable<Keyboard> /* Keyboard observable */
- worker$: Subject<SearchMessage> /* Search worker */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Mount search suggestions
- *
- * This function will perform a lazy rendering of the search results, depending
- * on the vertical offset of the search result container.
- *
- * @param el - Search result list element
- * @param options - Options
- *
- * @returns Search result list component observable
- */
-export function mountSearchSuggest(
- el: HTMLElement, { worker$, keyboard$ }: MountOptions
-): Observable<Component<SearchSuggest>> {
- const push$ = new Subject<SearchResult>()
-
- /* Retrieve query component and track all changes */
- const query = getComponentElement("search-query")
- const query$ = merge(
- fromEvent(query, "keydown"),
- fromEvent(query, "focus")
- )
- .pipe(
- observeOn(asyncScheduler),
- map(() => query.value),
- distinctUntilChanged(),
- )
-
- /* Update search suggestions */
- push$
- .pipe(
- combineLatestWith(query$),
- map(([{ suggest }, value]) => {
- const words = value.split(/([\s-]+)/)
- if (suggest?.length && words[words.length - 1]) {
- const last = suggest[suggest.length - 1]
- if (last.startsWith(words[words.length - 1]))
- words[words.length - 1] = last
- } else {
- words.length = 0
- }
- return words
- })
- )
- .subscribe(words => el.innerHTML = words
- .join("")
- .replace(/\s/g, "&nbsp;")
- )
-
- /* Set up search keyboard handlers */
- keyboard$
- .pipe(
- filter(({ mode }) => mode === "search")
- )
- .subscribe(key => {
- switch (key.type) {
-
- /* Right arrow: accept current suggestion */
- case "ArrowRight":
- if (
- el.innerText.length &&
- query.selectionStart === query.value.length
- )
- query.value = el.innerText
- break
- }
- })
-
- /* Filter search result message */
- const result$ = worker$
- .pipe(
- filter(isSearchResultMessage),
- map(({ data }) => data)
- )
-
- /* Create and return component */
- return result$
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(() => ({ ref: el }))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/sidebar/index.ts b/dev/src/templates/assets/javascripts/components/sidebar/index.ts
deleted file mode 100644
index 82f3d03e..00000000
--- a/dev/src/templates/assets/javascripts/components/sidebar/index.ts
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- animationFrameScheduler,
- asyncScheduler,
- auditTime,
- combineLatest,
- defer,
- distinctUntilChanged,
- endWith,
- finalize,
- first,
- from,
- fromEvent,
- ignoreElements,
- map,
- mergeMap,
- observeOn,
- takeUntil,
- tap,
- withLatestFrom
-} from "rxjs"
-
-import {
- Viewport,
- getElement,
- getElementContainer,
- getElementOffset,
- getElementSize,
- getElements
-} from "~/browser"
-
-import { Component } from "../_"
-import { Header } from "../header"
-import { Main } from "../main"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Sidebar
- */
-export interface Sidebar {
- height: number /* Sidebar height */
- locked: boolean /* Sidebar is locked */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- main$: Observable<Main> /* Main area observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
- main$: Observable<Main> /* Main area observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch sidebar
- *
- * This function returns an observable that computes the visual parameters of
- * the sidebar which depends on the vertical viewport offset, as well as the
- * height of the main area. When the page is scrolled beyond the header, the
- * sidebar is locked and fills the remaining space.
- *
- * @param el - Sidebar element
- * @param options - Options
- *
- * @returns Sidebar observable
- */
-export function watchSidebar(
- el: HTMLElement, { viewport$, main$ }: WatchOptions
-): Observable<Sidebar> {
- const parent = el.closest<HTMLElement>(".md-grid")!
- const adjust =
- parent.offsetTop -
- parent.parentElement!.offsetTop
-
- /* Compute the sidebar's available height and if it should be locked */
- return combineLatest([main$, viewport$])
- .pipe(
- map(([{ offset, height }, { offset: { y } }]) => {
- height = height
- + Math.min(adjust, Math.max(0, y - offset))
- - adjust
- return {
- height,
- locked: y >= offset + adjust
- }
- }),
- distinctUntilChanged((a, b) => (
- a.height === b.height &&
- a.locked === b.locked
- ))
- )
-}
-
-/**
- * Mount sidebar
- *
- * This function doesn't set the height of the actual sidebar, but of its first
- * child – the `.md-sidebar__scrollwrap` element in order to mitigiate jittery
- * sidebars when the footer is scrolled into view. At some point we switched
- * from `absolute` / `fixed` positioning to `sticky` positioning, significantly
- * reducing jitter in some browsers (respectively Firefox and Safari) when
- * scrolling from the top. However, top-aligned sticky positioning means that
- * the sidebar snaps to the bottom when the end of the container is reached.
- * This is what leads to the mentioned jitter, as the sidebar's height may be
- * updated too slowly.
- *
- * This behaviour can be mitigiated by setting the height of the sidebar to `0`
- * while preserving the padding, and the height on its first element.
- *
- * @param el - Sidebar element
- * @param options - Options
- *
- * @returns Sidebar component observable
- */
-export function mountSidebar(
- el: HTMLElement, { header$, ...options }: MountOptions
-): Observable<Component<Sidebar>> {
- const inner = getElement(".md-sidebar__scrollwrap", el)
- const { y } = getElementOffset(inner)
- return defer(() => {
- const push$ = new Subject<Sidebar>()
- const done$ = push$.pipe(ignoreElements(), endWith(true))
- const next$ = push$
- .pipe(
- auditTime(0, animationFrameScheduler)
- )
-
- /* Update sidebar height and offset */
- next$.pipe(withLatestFrom(header$))
- .subscribe({
-
- /* Handle emission */
- next([{ height }, { height: offset }]) {
- inner.style.height = `${height - 2 * y}px`
- el.style.top = `${offset}px`
- },
-
- /* Handle complete */
- complete() {
- inner.style.height = ""
- el.style.top = ""
- }
- })
-
- /* Bring active item into view on initial load */
- next$.pipe(first())
- .subscribe(() => {
- for (const item of getElements(".md-nav__link--active[href]", el)) {
- const container = getElementContainer(item)
- if (typeof container !== "undefined") {
- const offset = item.offsetTop - container.offsetTop
- const { height } = getElementSize(container)
- container.scrollTo({
- top: offset - height / 2
- })
- }
- }
- })
-
- /* Handle accessibility for expandable items, see https://bit.ly/3jaod9p */
- from(getElements<HTMLLabelElement>("label[tabindex]", el))
- .pipe(
- mergeMap(label => fromEvent(label, "click")
- .pipe(
- observeOn(asyncScheduler),
- map(() => label),
- takeUntil(done$)
- )
- )
- )
- .subscribe(label => {
- const input = getElement<HTMLInputElement>(`[id="${label.htmlFor}"]`)
- const nav = getElement(`[aria-labelledby="${label.id}"]`)
- nav.setAttribute("aria-expanded", `${input.checked}`)
- })
-
- /* Create and return component */
- return watchSidebar(el, options)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/source/_/index.ts b/dev/src/templates/assets/javascripts/components/source/_/index.ts
deleted file mode 100644
index 5f6c4d11..00000000
--- a/dev/src/templates/assets/javascripts/components/source/_/index.ts
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Observable,
- Subject,
- catchError,
- defer,
- filter,
- finalize,
- map,
- of,
- shareReplay,
- tap
-} from "rxjs"
-
-import { getElement } from "~/browser"
-import { ConsentDefaults } from "~/components/consent"
-import { renderSourceFacts } from "~/templates"
-
-import {
- Component,
- getComponentElements
-} from "../../_"
-import {
- SourceFacts,
- fetchSourceFacts
-} from "../facts"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Repository information
- */
-export interface Source {
- facts: SourceFacts /* Repository facts */
-}
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Repository information observable
- */
-let fetch$: Observable<Source>
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch repository information
- *
- * This function tries to read the repository facts from session storage, and
- * if unsuccessful, fetches them from the underlying provider.
- *
- * @param el - Repository information element
- *
- * @returns Repository information observable
- */
-export function watchSource(
- el: HTMLAnchorElement
-): Observable<Source> {
- return fetch$ ||= defer(() => {
- const cached = __md_get<SourceFacts>("__source", sessionStorage)
- if (cached) {
- return of(cached)
- } else {
-
- /* Check if consent is configured and was given */
- const els = getComponentElements("consent")
- if (els.length) {
- const consent = __md_get<ConsentDefaults>("__consent")
- if (!(consent && consent.github))
- return EMPTY
- }
-
- /* Fetch repository facts */
- return fetchSourceFacts(el.href)
- .pipe(
- tap(facts => __md_set("__source", facts, sessionStorage))
- )
- }
- })
- .pipe(
- catchError(() => EMPTY),
- filter(facts => Object.keys(facts).length > 0),
- map(facts => ({ facts })),
- shareReplay(1)
- )
-}
-
-/**
- * Mount repository information
- *
- * @param el - Repository information element
- *
- * @returns Repository information component observable
- */
-export function mountSource(
- el: HTMLAnchorElement
-): Observable<Component<Source>> {
- const inner = getElement(":scope > :last-child", el)
- return defer(() => {
- const push$ = new Subject<Source>()
- push$.subscribe(({ facts }) => {
- inner.appendChild(renderSourceFacts(facts))
- inner.classList.add("md-source__repository--active")
- })
-
- /* Create and return component */
- return watchSource(el)
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/source/facts/_/index.ts b/dev/src/templates/assets/javascripts/components/source/facts/_/index.ts
deleted file mode 100644
index 154f229f..00000000
--- a/dev/src/templates/assets/javascripts/components/source/facts/_/index.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { EMPTY, Observable } from "rxjs"
-
-import { fetchSourceFactsFromGitHub } from "../github"
-import { fetchSourceFactsFromGitLab } from "../gitlab"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Repository facts for repositories
- */
-export interface RepositoryFacts {
- stars?: number /* Number of stars */
- forks?: number /* Number of forks */
- version?: string /* Latest version */
-}
-
-/**
- * Repository facts for organizations
- */
-export interface OrganizationFacts {
- repositories?: number /* Number of repositories */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Repository facts
- */
-export type SourceFacts =
- | RepositoryFacts
- | OrganizationFacts
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Fetch repository facts
- *
- * @param url - Repository URL
- *
- * @returns Repository facts observable
- */
-export function fetchSourceFacts(
- url: string
-): Observable<SourceFacts> {
-
- /* Try to match GitHub repository */
- let match = url.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i)
- if (match) {
- const [, user, repo] = match
- return fetchSourceFactsFromGitHub(user, repo)
- }
-
- /* Try to match GitLab repository */
- match = url.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i)
- if (match) {
- const [, base, slug] = match
- return fetchSourceFactsFromGitLab(base, slug)
- }
-
- /* Fallback */
- return EMPTY
-}
diff --git a/dev/src/templates/assets/javascripts/components/source/facts/github/index.ts b/dev/src/templates/assets/javascripts/components/source/facts/github/index.ts
deleted file mode 100644
index 12cc55e0..00000000
--- a/dev/src/templates/assets/javascripts/components/source/facts/github/index.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { Repo, User } from "github-types"
-import {
- EMPTY,
- Observable,
- catchError,
- defaultIfEmpty,
- map,
- zip
-} from "rxjs"
-
-import { requestJSON } from "~/browser"
-
-import { SourceFacts } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * GitHub release (partial)
- */
-interface Release {
- tag_name: string /* Tag name */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Fetch GitHub repository facts
- *
- * @param user - GitHub user or organization
- * @param repo - GitHub repository
- *
- * @returns Repository facts observable
- */
-export function fetchSourceFactsFromGitHub(
- user: string, repo?: string
-): Observable<SourceFacts> {
- if (typeof repo !== "undefined") {
- const url = `https://api.github.com/repos/${user}/${repo}`
- return zip(
-
- /* Fetch version */
- requestJSON<Release>(`${url}/releases/latest`)
- .pipe(
- catchError(() => EMPTY), // @todo refactor instant loading
- map(release => ({
- version: release.tag_name
- })),
- defaultIfEmpty({})
- ),
-
- /* Fetch stars and forks */
- requestJSON<Repo>(url)
- .pipe(
- catchError(() => EMPTY), // @todo refactor instant loading
- map(info => ({
- stars: info.stargazers_count,
- forks: info.forks_count
- })),
- defaultIfEmpty({})
- )
- )
- .pipe(
- map(([release, info]) => ({ ...release, ...info }))
- )
-
- /* User or organization */
- } else {
- const url = `https://api.github.com/users/${user}`
- return requestJSON<User>(url)
- .pipe(
- map(info => ({
- repositories: info.public_repos
- })),
- defaultIfEmpty({})
- )
- }
-}
diff --git a/dev/src/templates/assets/javascripts/components/source/facts/gitlab/index.ts b/dev/src/templates/assets/javascripts/components/source/facts/gitlab/index.ts
deleted file mode 100644
index d85d4afd..00000000
--- a/dev/src/templates/assets/javascripts/components/source/facts/gitlab/index.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { ProjectSchema } from "gitlab"
-import {
- EMPTY,
- Observable,
- catchError,
- defaultIfEmpty,
- map
-} from "rxjs"
-
-import { requestJSON } from "~/browser"
-
-import { SourceFacts } from "../_"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Fetch GitLab repository facts
- *
- * @param base - GitLab base
- * @param project - GitLab project
- *
- * @returns Repository facts observable
- */
-export function fetchSourceFactsFromGitLab(
- base: string, project: string
-): Observable<SourceFacts> {
- const url = `https://${base}/api/v4/projects/${encodeURIComponent(project)}`
- return requestJSON<ProjectSchema>(url)
- .pipe(
- catchError(() => EMPTY), // @todo refactor instant loading
- map(({ star_count, forks_count }) => ({
- stars: star_count,
- forks: forks_count
- })),
- defaultIfEmpty({})
- )
-}
diff --git a/dev/src/templates/assets/javascripts/components/source/facts/index.ts b/dev/src/templates/assets/javascripts/components/source/facts/index.ts
deleted file mode 100644
index f9bda64d..00000000
--- a/dev/src/templates/assets/javascripts/components/source/facts/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./github"
-export * from "./gitlab"
diff --git a/dev/src/templates/assets/javascripts/components/source/index.ts b/dev/src/templates/assets/javascripts/components/source/index.ts
deleted file mode 100644
index 7fac4813..00000000
--- a/dev/src/templates/assets/javascripts/components/source/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./facts"
diff --git a/dev/src/templates/assets/javascripts/components/tabs/index.ts b/dev/src/templates/assets/javascripts/components/tabs/index.ts
deleted file mode 100644
index 1e69df28..00000000
--- a/dev/src/templates/assets/javascripts/components/tabs/index.ts
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- defer,
- distinctUntilKeyChanged,
- finalize,
- map,
- of,
- switchMap,
- tap
-} from "rxjs"
-
-import { feature } from "~/_"
-import {
- Viewport,
- watchElementSize,
- watchViewportAt
-} from "~/browser"
-
-import { Component } from "../_"
-import { Header } from "../header"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Navigation tabs
- */
-export interface Tabs {
- hidden: boolean /* Navigation tabs are hidden */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch navigation tabs
- *
- * @param el - Navigation tabs element
- * @param options - Options
- *
- * @returns Navigation tabs observable
- */
-export function watchTabs(
- el: HTMLElement, { viewport$, header$ }: WatchOptions
-): Observable<Tabs> {
- return watchElementSize(document.body)
- .pipe(
- switchMap(() => watchViewportAt(el, { header$, viewport$ })),
- map(({ offset: { y } }) => {
- return {
- hidden: y >= 10
- }
- }),
- distinctUntilKeyChanged("hidden")
- )
-}
-
-/**
- * Mount navigation tabs
- *
- * This function hides the navigation tabs when scrolling past the threshold
- * and makes them reappear in a nice CSS animation when scrolling back up.
- *
- * @param el - Navigation tabs element
- * @param options - Options
- *
- * @returns Navigation tabs component observable
- */
-export function mountTabs(
- el: HTMLElement, options: MountOptions
-): Observable<Component<Tabs>> {
- return defer(() => {
- const push$ = new Subject<Tabs>()
- push$.subscribe({
-
- /* Handle emission */
- next({ hidden }) {
- el.hidden = hidden
- },
-
- /* Handle complete */
- complete() {
- el.hidden = false
- }
- })
-
- /* Create and return component */
- return (
- feature("navigation.tabs.sticky")
- ? of({ hidden: false })
- : watchTabs(el, options)
- )
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/toc/index.ts b/dev/src/templates/assets/javascripts/components/toc/index.ts
deleted file mode 100644
index 04b8d85f..00000000
--- a/dev/src/templates/assets/javascripts/components/toc/index.ts
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- asyncScheduler,
- bufferCount,
- combineLatestWith,
- debounceTime,
- defer,
- distinctUntilChanged,
- distinctUntilKeyChanged,
- endWith,
- filter,
- finalize,
- ignoreElements,
- map,
- merge,
- observeOn,
- of,
- repeat,
- scan,
- share,
- skip,
- startWith,
- switchMap,
- takeUntil,
- tap,
- withLatestFrom
-} from "rxjs"
-
-import { feature } from "~/_"
-import {
- Viewport,
- getElement,
- getElementContainer,
- getElementSize,
- getElements,
- getLocation,
- getOptionalElement,
- watchElementSize
-} from "~/browser"
-
-import {
- Component,
- getComponentElement
-} from "../_"
-import { Header } from "../header"
-import { Main } from "../main"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Table of contents
- */
-export interface TableOfContents {
- prev: HTMLAnchorElement[][] /* Anchors (previous) */
- next: HTMLAnchorElement[][] /* Anchors (next) */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
- main$: Observable<Main> /* Main area observable */
- target$: Observable<HTMLElement> /* Location target observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch table of contents
- *
- * This is effectively a scroll spy implementation which will account for the
- * fixed header and automatically re-calculate anchor offsets when the viewport
- * is resized. The returned observable will only emit if the table of contents
- * needs to be repainted.
- *
- * This implementation tracks an anchor element's entire path starting from its
- * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the
- * Material theme currently doesn't make use of this information, it enables
- * the styling of the entire hierarchy through customization.
- *
- * Note that the current anchor is the last item of the `prev` anchor list.
- *
- * @param el - Table of contents element
- * @param options - Options
- *
- * @returns Table of contents observable
- */
-export function watchTableOfContents(
- el: HTMLElement, { viewport$, header$ }: WatchOptions
-): Observable<TableOfContents> {
- const table = new Map<HTMLAnchorElement, HTMLElement>()
-
- /* Compute anchor-to-target mapping */
- const anchors = getElements<HTMLAnchorElement>("[href^=\\#]", el)
- for (const anchor of anchors) {
- const id = decodeURIComponent(anchor.hash.substring(1))
- const target = getOptionalElement(`[id="${id}"]`)
- if (typeof target !== "undefined")
- table.set(anchor, target)
- }
-
- /* Compute necessary adjustment for header */
- const adjust$ = header$
- .pipe(
- distinctUntilKeyChanged("height"),
- map(({ height }) => {
- const main = getComponentElement("main")
- const grid = getElement(":scope > :first-child", main)
- return height + 0.8 * (
- grid.offsetTop -
- main.offsetTop
- )
- }),
- share()
- )
-
- /* Compute partition of previous and next anchors */
- const partition$ = watchElementSize(document.body)
- .pipe(
- distinctUntilKeyChanged("height"),
-
- /* Build index to map anchor paths to vertical offsets */
- switchMap(body => defer(() => {
- let path: HTMLAnchorElement[] = []
- return of([...table].reduce((index, [anchor, target]) => {
- while (path.length) {
- const last = table.get(path[path.length - 1])!
- if (last.tagName >= target.tagName) {
- path.pop()
- } else {
- break
- }
- }
-
- /* If the current anchor is hidden, continue with its parent */
- let offset = target.offsetTop
- while (!offset && target.parentElement) {
- target = target.parentElement
- offset = target.offsetTop
- }
-
- /* Fix anchor offsets in tables - see https://bit.ly/3CUFOcn */
- let parent = target.offsetParent as HTMLElement
- for (; parent; parent = parent.offsetParent as HTMLElement)
- offset += parent.offsetTop
-
- /* Map reversed anchor path to vertical offset */
- return index.set(
- [...path = [...path, anchor]].reverse(),
- offset
- )
- }, new Map<HTMLAnchorElement[], number>()))
- })
- .pipe(
-
- /* Sort index by vertical offset (see https://bit.ly/30z6QSO) */
- map(index => new Map([...index].sort(([, a], [, b]) => a - b))),
- combineLatestWith(adjust$),
-
- /* Re-compute partition when viewport offset changes */
- switchMap(([index, adjust]) => viewport$
- .pipe(
- scan(([prev, next], { offset: { y }, size }) => {
- const last = y + size.height >= Math.floor(body.height)
-
- /* Look forward */
- while (next.length) {
- const [, offset] = next[0]
- if (offset - adjust < y || last) {
- prev = [...prev, next.shift()!]
- } else {
- break
- }
- }
-
- /* Look backward */
- while (prev.length) {
- const [, offset] = prev[prev.length - 1]
- if (offset - adjust >= y && !last) {
- next = [prev.pop()!, ...next]
- } else {
- break
- }
- }
-
- /* Return partition */
- return [prev, next]
- }, [[], [...index]]),
- distinctUntilChanged((a, b) => (
- a[0] === b[0] &&
- a[1] === b[1]
- ))
- )
- )
- )
- )
- )
-
- /* Compute and return anchor list migrations */
- return partition$
- .pipe(
- map(([prev, next]) => ({
- prev: prev.map(([path]) => path),
- next: next.map(([path]) => path)
- })),
-
- /* Extract anchor list migrations */
- startWith({ prev: [], next: [] }),
- bufferCount(2, 1),
- map(([a, b]) => {
-
- /* Moving down */
- if (a.prev.length < b.prev.length) {
- return {
- prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),
- next: []
- }
-
- /* Moving up */
- } else {
- return {
- prev: b.prev.slice(-1),
- next: b.next.slice(0, b.next.length - a.next.length)
- }
- }
- })
- )
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Mount table of contents
- *
- * @param el - Table of contents element
- * @param options - Options
- *
- * @returns Table of contents component observable
- */
-export function mountTableOfContents(
- el: HTMLElement, { viewport$, header$, main$, target$ }: MountOptions
-): Observable<Component<TableOfContents>> {
- return defer(() => {
- const push$ = new Subject<TableOfContents>()
- const done$ = push$.pipe(ignoreElements(), endWith(true))
- push$.subscribe(({ prev, next }) => {
-
- /* Look forward */
- for (const [anchor] of next) {
- anchor.classList.remove("md-nav__link--passed")
- anchor.classList.remove("md-nav__link--active")
- }
-
- /* Look backward */
- for (const [index, [anchor]] of prev.entries()) {
- anchor.classList.add("md-nav__link--passed")
- anchor.classList.toggle(
- "md-nav__link--active",
- index === prev.length - 1
- )
- }
- })
-
- /* Set up following, if enabled */
- if (feature("toc.follow")) {
-
- /* Toggle smooth scrolling only for anchor clicks */
- const smooth$ = merge(
- viewport$.pipe(debounceTime(1), map(() => undefined)),
- viewport$.pipe(debounceTime(250), map(() => "smooth" as const))
- )
-
- /* Bring active anchor into view */ // @todo: refactor
- push$
- .pipe(
- filter(({ prev }) => prev.length > 0),
- combineLatestWith(main$.pipe(observeOn(asyncScheduler))),
- withLatestFrom(smooth$)
- )
- .subscribe(([[{ prev }], behavior]) => {
- const [anchor] = prev[prev.length - 1]
- if (anchor.offsetHeight) {
-
- /* Retrieve overflowing container and scroll */
- const container = getElementContainer(anchor)
- if (typeof container !== "undefined") {
- const offset = anchor.offsetTop - container.offsetTop
- const { height } = getElementSize(container)
- container.scrollTo({
- top: offset - height / 2,
- behavior
- })
- }
- }
- })
- }
-
- /* Set up anchor tracking, if enabled */
- if (feature("navigation.tracking"))
- viewport$
- .pipe(
- takeUntil(done$),
- distinctUntilKeyChanged("offset"),
- debounceTime(250),
- skip(1),
- takeUntil(target$.pipe(skip(1))),
- repeat({ delay: 250 }),
- withLatestFrom(push$)
- )
- .subscribe(([, { prev }]) => {
- const url = getLocation()
-
- /* Set hash fragment to active anchor */
- const anchor = prev[prev.length - 1]
- if (anchor && anchor.length) {
- const [active] = anchor
- const { hash } = new URL(active.href)
- if (url.hash !== hash) {
- url.hash = hash
- history.replaceState({}, "", `${url}`)
- }
-
- /* Reset anchor when at the top */
- } else {
- url.hash = ""
- history.replaceState({}, "", `${url}`)
- }
- })
-
- /* Create and return component */
- return watchTableOfContents(el, { viewport$, header$ })
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
- })
-}
diff --git a/dev/src/templates/assets/javascripts/components/top/index.ts b/dev/src/templates/assets/javascripts/components/top/index.ts
deleted file mode 100644
index 82e88b61..00000000
--- a/dev/src/templates/assets/javascripts/components/top/index.ts
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- Subject,
- bufferCount,
- combineLatest,
- distinctUntilChanged,
- distinctUntilKeyChanged,
- endWith,
- finalize,
- fromEvent,
- ignoreElements,
- map,
- repeat,
- skip,
- takeUntil,
- tap
-} from "rxjs"
-
-import { Viewport } from "~/browser"
-
-import { Component } from "../_"
-import { Header } from "../header"
-import { Main } from "../main"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Back-to-top button
- */
-export interface BackToTop {
- hidden: boolean /* Back-to-top button is hidden */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch options
- */
-interface WatchOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- main$: Observable<Main> /* Main area observable */
- target$: Observable<HTMLElement> /* Location target observable */
-}
-
-/**
- * Mount options
- */
-interface MountOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- header$: Observable<Header> /* Header observable */
- main$: Observable<Main> /* Main area observable */
- target$: Observable<HTMLElement> /* Location target observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Watch back-to-top
- *
- * @param _el - Back-to-top element
- * @param options - Options
- *
- * @returns Back-to-top observable
- */
-export function watchBackToTop(
- _el: HTMLElement, { viewport$, main$, target$ }: WatchOptions
-): Observable<BackToTop> {
-
- /* Compute direction */
- const direction$ = viewport$
- .pipe(
- map(({ offset: { y } }) => y),
- bufferCount(2, 1),
- map(([a, b]) => a > b && b > 0),
- distinctUntilChanged()
- )
-
- /* Compute whether main area is active */
- const active$ = main$
- .pipe(
- map(({ active }) => active)
- )
-
- /* Compute threshold for hiding */
- return combineLatest([active$, direction$])
- .pipe(
- map(([active, direction]) => !(active && direction)),
- distinctUntilChanged(),
- takeUntil(target$.pipe(skip(1))),
- endWith(true),
- repeat({ delay: 250 }),
- map(hidden => ({ hidden }))
- )
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Mount back-to-top
- *
- * @param el - Back-to-top element
- * @param options - Options
- *
- * @returns Back-to-top component observable
- */
-export function mountBackToTop(
- el: HTMLElement, { viewport$, header$, main$, target$ }: MountOptions
-): Observable<Component<BackToTop>> {
- const push$ = new Subject<BackToTop>()
- const done$ = push$.pipe(ignoreElements(), endWith(true))
- push$.subscribe({
-
- /* Handle emission */
- next({ hidden }) {
- el.hidden = hidden
- if (hidden) {
- el.setAttribute("tabindex", "-1")
- el.blur()
- } else {
- el.removeAttribute("tabindex")
- }
- },
-
- /* Handle complete */
- complete() {
- el.style.top = ""
- el.hidden = true
- el.removeAttribute("tabindex")
- }
- })
-
- /* Watch header height */
- header$
- .pipe(
- takeUntil(done$),
- distinctUntilKeyChanged("height")
- )
- .subscribe(({ height }) => {
- el.style.top = `${height + 16}px`
- })
-
- /* Go back to top */
- fromEvent(el, "click")
- .subscribe(ev => {
- ev.preventDefault()
- window.scrollTo({ top: 0 })
- })
-
- /* Create and return component */
- return watchBackToTop(el, { viewport$, main$, target$ })
- .pipe(
- tap(state => push$.next(state)),
- finalize(() => push$.complete()),
- map(state => ({ ref: el, ...state }))
- )
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/clipboard/index.ts b/dev/src/templates/assets/javascripts/integrations/clipboard/index.ts
deleted file mode 100644
index cf46f601..00000000
--- a/dev/src/templates/assets/javascripts/integrations/clipboard/index.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import ClipboardJS from "clipboard"
-import {
- Observable,
- Subject,
- map,
- tap
-} from "rxjs"
-
-import { translation } from "~/_"
-import { getElement } from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Setup options
- */
-interface SetupOptions {
- alert$: Subject<string> /* Alert subject */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Extract text to copy
- *
- * @param el - HTML element
- *
- * @returns Extracted text
- */
-function extract(el: HTMLElement): string {
- el.setAttribute("data-md-copying", "")
- const copy = el.closest("[data-copy]")
- const text = copy
- ? copy.getAttribute("data-copy")!
- : el.innerText
- el.removeAttribute("data-md-copying")
- return text
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Set up Clipboard.js integration
- *
- * @param options - Options
- */
-export function setupClipboardJS(
- { alert$ }: SetupOptions
-): void {
- if (ClipboardJS.isSupported()) {
- new Observable<ClipboardJS.Event>(subscriber => {
- new ClipboardJS("[data-clipboard-target], [data-clipboard-text]", {
- text: el => (
- el.getAttribute("data-clipboard-text")! ||
- extract(getElement(
- el.getAttribute("data-clipboard-target")!
- ))
- )
- })
- .on("success", ev => subscriber.next(ev))
- })
- .pipe(
- tap(ev => {
- const trigger = ev.trigger as HTMLElement
- trigger.focus()
- }),
- map(() => translation("clipboard.copied"))
- )
- .subscribe(alert$)
- }
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/index.ts b/dev/src/templates/assets/javascripts/integrations/index.ts
deleted file mode 100644
index 5d91a9d5..00000000
--- a/dev/src/templates/assets/javascripts/integrations/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./clipboard"
-export * from "./instant"
-export * from "./search"
-export * from "./sitemap"
-export * from "./version"
diff --git a/dev/src/templates/assets/javascripts/integrations/instant/index.ts b/dev/src/templates/assets/javascripts/integrations/instant/index.ts
deleted file mode 100644
index d321b751..00000000
--- a/dev/src/templates/assets/javascripts/integrations/instant/index.ts
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Observable,
- Subject,
- bufferCount,
- catchError,
- concat,
- debounceTime,
- distinctUntilKeyChanged,
- endWith,
- filter,
- fromEvent,
- ignoreElements,
- map,
- of,
- sample,
- share,
- skip,
- startWith,
- switchMap,
- take,
- withLatestFrom
-} from "rxjs"
-
-import { configuration, feature } from "~/_"
-import {
- Viewport,
- getElement,
- getElements,
- getLocation,
- getOptionalElement,
- request,
- setLocation,
- setLocationHash
-} from "~/browser"
-import { getComponentElement } from "~/components"
-
-import { fetchSitemap } from "../sitemap"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Setup options
- */
-interface SetupOptions {
- location$: Subject<URL> // Location subject
- viewport$: Observable<Viewport> // Viewport observable
- progress$: Subject<number> // Progress suject
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Create a map of head elements for lookup and replacement
- *
- * @param head - Document head
- *
- * @returns Element map
- */
-function lookup(head: HTMLHeadElement): Map<string, HTMLElement> {
-
- // @todo When resolving URLs, we must make sure to use the correct base for
- // resolution. The next time we refactor instant loading, we should use the
- // location subject as a source, which is also used for anchor links tracking,
- // but for now we just rely on canonical.
- const canonical = getElement<HTMLLinkElement>("[rel=canonical]", head)
- canonical.href = canonical.href.replace("//localhost:", "//127.0.0.1")
-
- // Create tag map and index elements in head
- const tags = new Map<string, HTMLElement>()
- for (const el of getElements(":scope > *", head)) {
- let html = el.outerHTML
-
- // If the current element is a style sheet or script, we must resolve the
- // URL relative to the current location and make it absolute, so it's easy
- // to deduplicate it later on by comparing the outer HTML of tags. We must
- // keep identical style sheets and scripts without replacing them.
- for (const key of ["href", "src"]) {
- const value = el.getAttribute(key)!
- if (value === null)
- continue
-
- // Resolve URL relative to current location
- const url = new URL(value, canonical.href)
- const ref = el.cloneNode() as HTMLElement
-
- // Set resolved URL and retrieve HTML for deduplication
- ref.setAttribute(key, `${url}`)
- html = ref.outerHTML
- break
- }
-
- // Index element in tag map
- tags.set(html, el)
- }
-
- // Return tag map
- return tags
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Set up instant navigation
- *
- * This is a heavily orchestrated operation - see inline comments to learn how
- * this works with Material for MkDocs, and how you can hook into it.
- *
- * @param options - Options
- *
- * @returns Document observable
- */
-export function setupInstantNavigation(
- { location$, viewport$, progress$ }: SetupOptions
-): Observable<Document> {
- const config = configuration()
- if (location.protocol === "file:")
- return EMPTY
-
- // Load sitemap immediately, so we have it available when the user initiates
- // the first instant navigation request, and canonicalize URLs to the current
- // base URL. The base URL will remain stable in between loads, as it's only
- // read at the first initialization of the application.
- const sitemap$ = fetchSitemap()
- .pipe(
- map(paths => paths.map(path => `${new URL(path, config.base)}`))
- )
-
- // Intercept inter-site navigation - to keep the number of event listeners
- // low we use the fact that uncaptured events bubble up to the body. This also
- // has the nice property that we don't need to detach and then again attach
- // event listeners when instant navigation occurs.
- const instant$ = fromEvent<MouseEvent>(document.body, "click")
- .pipe(
- withLatestFrom(sitemap$),
- switchMap(([ev, sitemap]) => {
- if (!(ev.target instanceof Element))
- return EMPTY
-
- // Skip, as target is not within a link - clicks on non-link elements
- // are also captured, which we need to exclude from processing
- const el = ev.target.closest("a")
- if (el === null)
- return EMPTY
-
- // Skip, as link opens in new window - we now know we have captured a
- // click on a link, but the link either has a `target` property defined,
- // or the user pressed the `meta` or `ctrl` key to open it in a new
- // window. Thus, we need to filter those events, too.
- if (el.target || ev.metaKey || ev.ctrlKey)
- return EMPTY
-
- // Next, we must check if the URL is relevant for us, i.e., if it's an
- // internal link to a page that is managed by MkDocs. Only then we can
- // be sure that the structure of the page to be loaded adheres to the
- // current document structure and can subsequently be injected into it
- // without doing a full reload. For this reason, we must canonicalize
- // the URL by removing all search parameters and hash fragments.
- const url = new URL(el.href)
- url.search = url.hash = ""
-
- // Skip, if URL is not included in the sitemap - this could be the case
- // when linking between versions or languages, or to another page that
- // the author included as part of the build, but that is not managed by
- // MkDocs. In that case we must not continue with instant navigation.
- if (!sitemap.includes(`${url}`))
- return EMPTY
-
- // We now know that we have a link to an internal page, so we prevent
- // the browser from navigation and emit the URL for instant navigation.
- // Note that this also includes anchor links, which means we need to
- // implement anchor positioning ourselves. The reason for this is that
- // if we wouldn't manage anchor links as well, scroll restoration will
- // not work correctly (e.g. following an anchor link and scrolling).
- ev.preventDefault()
- return of(new URL(el.href))
- }),
- share()
- )
-
- // Before fetching for the first time, resolve the absolute favicon position,
- // as the browser will try to fetch the icon immediately
- instant$.pipe(take(1))
- .subscribe(() => {
- const favicon = getOptionalElement<HTMLLinkElement>("link[rel=icon]")
- if (typeof favicon !== "undefined")
- favicon.href = favicon.href
- })
-
- // Enable scroll restoration before window unloads - this is essential to
- // ensure that full reloads (F5) restore the viewport offset correctly. If
- // only popstate events wouldn't reset the scroll position prior to their
- // emission, we could just reset this in popstate. Meh.
- fromEvent(window, "beforeunload")
- .subscribe(() => {
- history.scrollRestoration = "auto"
- })
-
- // When an instant navigation event occurs, disable scroll restoration, since
- // we must normalize and synchronize the behavior across all browsers. For
- // instance, when the user clicks the back or forward button, the browser
- // would immediately jump to the position of the previous document.
- instant$.pipe(withLatestFrom(viewport$))
- .subscribe(([url, { offset }]) => {
- history.scrollRestoration = "manual"
-
- // While it would be better UX to defer the history state change until the
- // document was fully fetched and parsed, we must schedule it here, since
- // popstate events are emitted when history state changes happen. Moreover
- // we need to back up the current viewport offset, so we can restore it
- // when popstate events occur, e.g., when the browser's back and forward
- // buttons are used for navigation.
- history.replaceState(offset, "")
- history.pushState(null, "", url)
- })
-
- // Emit URL that should be fetched via instant navigation on location subject,
- // which was passed into this function. Instant navigation can be intercepted
- // by other parts of the application, which can synchronously back up or
- // restore state before instant navigation happens.
- instant$.subscribe(location$)
-
- // Fetch document - when fetching, we could use `responseType: document`, but
- // since all MkDocs links are relative, we need to make sure that the current
- // location matches the document we just loaded. Otherwise any relative links
- // in the document might use the old location. If the request fails for some
- // reason, we fall back to regular navigation and set the location explicitly,
- // which will force-load the page. Furthermore, we must pre-warm the buffer
- // for the duplicate check, or the first click on an anchor link will also
- // trigger an instant navigation event, which doesn't make sense.
- const response$ = location$
- .pipe(
- startWith(getLocation()),
- distinctUntilKeyChanged("pathname"),
- skip(1),
- switchMap(url => request(url, { progress$ })
- .pipe(
- catchError(() => {
- setLocation(url, true)
- return EMPTY
- })
- )
- )
- )
-
- // Initialize the DOM parser, parse the returned HTML, and replace selected
- // components before handing control down to the application
- const dom = new DOMParser()
- const document$ = response$
- .pipe(
- switchMap(res => res.text()),
- switchMap(res => {
- const next = dom.parseFromString(res, "text/html")
- for (const selector of [
- "[data-md-component=announce]",
- "[data-md-component=container]",
- "[data-md-component=header-topic]",
- "[data-md-component=outdated]",
- "[data-md-component=logo]",
- "[data-md-component=skip]",
- ...feature("navigation.tabs.sticky")
- ? ["[data-md-component=tabs]"]
- : []
- ]) {
- const source = getOptionalElement(selector)
- const target = getOptionalElement(selector, next)
- if (
- typeof source !== "undefined" &&
- typeof target !== "undefined"
- ) {
- source.replaceWith(target)
- }
- }
-
- // Update meta tags
- const source = lookup(document.head)
- const target = lookup(next.head)
- for (const [html, el] of target) {
-
- // Hack: skip stylesheets and scripts until we manage to replace them
- // entirely in order to omit flashes of white content @todo refactor
- if (
- el.getAttribute("rel") === "stylesheet" ||
- el.hasAttribute("src")
- )
- continue
-
- if (source.has(html)) {
- source.delete(html)
- } else {
- document.head.appendChild(el)
- }
- }
-
- // Remove meta tags that are not present in the new document
- for (const el of source.values())
-
- // Hack: skip stylesheets and scripts until we manage to replace them
- // entirely in order to omit flashes of white content @todo refactor
- if (
- el.getAttribute("rel") === "stylesheet" ||
- el.hasAttribute("src")
- )
- continue
- else
- el.remove()
-
- // After components and meta tags were replaced, re-evaluate scripts
- // that were provided by the author as part of Markdown files
- const container = getComponentElement("container")
- return concat(getElements("script", container))
- .pipe(
- switchMap(el => {
- const script = next.createElement("script")
- if (el.src) {
- for (const name of el.getAttributeNames())
- script.setAttribute(name, el.getAttribute(name)!)
- el.replaceWith(script)
-
- // Complete when script is loaded
- return new Observable(observer => {
- script.onload = () => observer.complete()
- })
-
- // Complete immediately
- } else {
- script.textContent = el.textContent
- el.replaceWith(script)
- return EMPTY
- }
- }),
- ignoreElements(),
- endWith(next)
- )
- }),
- share()
- )
-
- // Intercept popstate events, e.g. when using the browser's back and forward
- // buttons, and emit new location for fetching and parsing
- const popstate$ = fromEvent<PopStateEvent>(window, "popstate")
- popstate$.pipe(map(getLocation))
- .subscribe(location$)
-
- // Intercept clicks on anchor links, and scroll document into position - as
- // we disabled scroll restoration, we need to do this manually here
- location$
- .pipe(
- startWith(getLocation()),
- bufferCount(2, 1),
- filter(([prev, next]) => (
- prev.pathname === next.pathname &&
- prev.hash !== next.hash
- )),
- map(([, next]) => next)
- )
- .subscribe(url => {
- if (history.state !== null || !url.hash) {
- window.scrollTo(0, history.state?.y ?? 0)
- } else {
- history.scrollRestoration = "auto"
- setLocationHash(url.hash)
- history.scrollRestoration = "manual"
- }
- })
-
- // Intercept clicks on the same anchor link - we must use a distinct pipeline
- // for this, or we'd end up in a loop, setting the hash again and again
- location$
- .pipe(
- sample(instant$),
- startWith(getLocation()),
- bufferCount(2, 1),
- filter(([prev, next]) => (
- prev.pathname === next.pathname &&
- prev.hash === next.hash
- )),
- map(([, next]) => next)
- )
- .subscribe(url => {
- history.scrollRestoration = "auto"
- setLocationHash(url.hash)
- history.scrollRestoration = "manual"
-
- // Hack: we need to make sure that we don't end up with multiple history
- // entries for the same anchor link, so we just remove the last entry
- history.back()
- })
-
- // After parsing the document, check if the current history entry has a state.
- // This may happen when users press the back or forward button to visit a page
- // that was already seen. If there's no state, it means a new page was visited
- // and we should scroll to the top, unless an anchor is given.
- document$.pipe(withLatestFrom(location$))
- .subscribe(([, url]) => {
- if (history.state !== null || !url.hash) {
- window.scrollTo(0, history.state?.y ?? 0)
- } else {
- setLocationHash(url.hash)
- }
- })
-
- // If the current history is not empty, register an event listener updating
- // the current history state whenever the scroll position changes. This must
- // be debounced and cannot be done in popstate, as popstate has already
- // removed the entry from the history.
- viewport$
- .pipe(
- distinctUntilKeyChanged("offset"),
- debounceTime(100)
- )
- .subscribe(({ offset }) => {
- history.replaceState(offset, "")
- })
-
- // Return document
- return document$
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/_/index.ts b/dev/src/templates/assets/javascripts/integrations/search/_/index.ts
deleted file mode 100644
index 0e217fa4..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/_/index.ts
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- SearchDocument,
- SearchIndex,
- SearchOptions,
- setupSearchDocumentMap
-} from "../config"
-import {
- Position,
- PositionTable,
- highlight,
- highlightAll,
- tokenize
-} from "../internal"
-import {
- SearchQueryTerms,
- getSearchQueryTerms,
- parseSearchQuery,
- segment,
- transformSearchQuery
-} from "../query"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search item
- */
-export interface SearchItem
- extends SearchDocument
-{
- score: number /* Score (relevance) */
- terms: SearchQueryTerms /* Search query terms */
-}
-
-/**
- * Search result
- */
-export interface SearchResult {
- items: SearchItem[][] /* Search items */
- suggest?: string[] /* Search suggestions */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Create field extractor factory
- *
- * @param table - Position table map
- *
- * @returns Extractor factory
- */
-function extractor(table: Map<string, PositionTable>) {
- return (name: keyof SearchDocument) => {
- return (doc: SearchDocument) => {
- if (typeof doc[name] === "undefined")
- return undefined
-
- /* Compute identifier and initialize table */
- const id = [doc.location, name].join(":")
- table.set(id, lunr.tokenizer.table = [])
-
- /* Return field value */
- return doc[name]
- }
- }
-}
-
-/**
- * Compute the difference of two lists of strings
- *
- * @param a - 1st list of strings
- * @param b - 2nd list of strings
- *
- * @returns Difference
- */
-function difference(a: string[], b: string[]): string[] {
- const [x, y] = [new Set(a), new Set(b)]
- return [
- ...new Set([...x].filter(value => !y.has(value)))
- ]
-}
-
-/* ----------------------------------------------------------------------------
- * Class
- * ------------------------------------------------------------------------- */
-
-/**
- * Search index
- */
-export class Search {
-
- /**
- * Search document map
- */
- protected map: Map<string, SearchDocument>
-
- /**
- * Search options
- */
- protected options: SearchOptions
-
- /**
- * The underlying Lunr.js search index
- */
- protected index: lunr.Index
-
- /**
- * Internal position table map
- */
- protected table: Map<string, PositionTable>
-
- /**
- * Create the search integration
- *
- * @param data - Search index
- */
- public constructor({ config, docs, options }: SearchIndex) {
- const field = extractor(this.table = new Map())
-
- /* Set up document map and options */
- this.map = setupSearchDocumentMap(docs)
- this.options = options
-
- /* Set up document index */
- this.index = lunr(function () {
- this.metadataWhitelist = ["position"]
- this.b(0)
-
- /* Set up (multi-)language support */
- if (config.lang.length === 1 && config.lang[0] !== "en") {
- // @ts-expect-error - namespace indexing not supported
- this.use(lunr[config.lang[0]])
- } else if (config.lang.length > 1) {
- this.use(lunr.multiLanguage(...config.lang))
- }
-
- /* Set up custom tokenizer (must be after language setup) */
- this.tokenizer = tokenize as typeof lunr.tokenizer
- lunr.tokenizer.separator = new RegExp(config.separator)
-
- /* Set up custom segmenter, if loaded */
- lunr.segmenter = "TinySegmenter" in lunr
- ? new lunr.TinySegmenter()
- : undefined
-
- /* Compute functions to be removed from the pipeline */
- const fns = difference([
- "trimmer", "stopWordFilter", "stemmer"
- ], config.pipeline)
-
- /* Remove functions from the pipeline for registered languages */
- for (const lang of config.lang.map(language => (
- // @ts-expect-error - namespace indexing not supported
- language === "en" ? lunr : lunr[language]
- )))
- for (const fn of fns) {
- this.pipeline.remove(lang[fn])
- this.searchPipeline.remove(lang[fn])
- }
-
- /* Set up index reference */
- this.ref("location")
-
- /* Set up index fields */
- this.field("title", { boost: 1e3, extractor: field("title") })
- this.field("text", { boost: 1e0, extractor: field("text") })
- this.field("tags", { boost: 1e6, extractor: field("tags") })
-
- /* Add documents to index */
- for (const doc of docs)
- this.add(doc, { boost: doc.boost })
- })
- }
-
- /**
- * Search for matching documents
- *
- * @param query - Search query
- *
- * @returns Search result
- */
- public search(query: string): SearchResult {
-
- // Experimental Chinese segmentation
- query = query.replace(/\p{sc=Han}+/gu, value => {
- return [...segment(value, this.index.invertedIndex)]
- .join("* ")
- })
-
- // @todo: move segmenter (above) into transformSearchQuery
- query = transformSearchQuery(query)
- if (!query)
- return { items: [] }
-
- /* Parse query to extract clauses for analysis */
- const clauses = parseSearchQuery(query)
- .filter(clause => (
- clause.presence !== lunr.Query.presence.PROHIBITED
- ))
-
- /* Perform search and post-process results */
- const groups = this.index.search(query)
-
- /* Apply post-query boosts based on title and search query terms */
- .reduce<SearchItem[]>((item, { ref, score, matchData }) => {
- let doc = this.map.get(ref)
- if (typeof doc !== "undefined") {
-
- /* Shallow copy document */
- doc = { ...doc }
- if (doc.tags)
- doc.tags = [...doc.tags]
-
- /* Compute and analyze search query terms */
- const terms = getSearchQueryTerms(
- clauses,
- Object.keys(matchData.metadata)
- )
-
- /* Highlight matches in fields */
- for (const field of this.index.fields) {
- if (typeof doc[field] === "undefined")
- continue
-
- /* Collect positions from matches */
- const positions: Position[] = []
- for (const match of Object.values(matchData.metadata))
- if (typeof match[field] !== "undefined")
- positions.push(...match[field].position)
-
- /* Skip highlighting, if no positions were collected */
- if (!positions.length)
- continue
-
- /* Load table and determine highlighting method */
- const table = this.table.get([doc.location, field].join(":"))!
- const fn = Array.isArray(doc[field])
- ? highlightAll
- : highlight
-
- // @ts-expect-error - stop moaning, TypeScript!
- doc[field] = fn(doc[field], table, positions, field !== "text")
- }
-
- /* Highlight title and text and apply post-query boosts */
- const boost = +!doc.parent +
- Object.values(terms)
- .filter(t => t).length /
- Object.keys(terms).length
-
- /* Append item */
- item.push({
- ...doc,
- score: score * (1 + boost ** 2),
- terms
- })
- }
- return item
- }, [])
-
- /* Sort search results again after applying boosts */
- .sort((a, b) => b.score - a.score)
-
- /* Group search results by article */
- .reduce((items, result) => {
- const doc = this.map.get(result.location)
- if (typeof doc !== "undefined") {
- const ref = doc.parent
- ? doc.parent.location
- : doc.location
- items.set(ref, [...items.get(ref) || [], result])
- }
- return items
- }, new Map<string, SearchItem[]>())
-
- /* Ensure that every item set has an article */
- for (const [ref, items] of groups)
- if (!items.find(item => item.location === ref)) {
- const doc = this.map.get(ref)!
- items.push({ ...doc, score: 0, terms: {} })
- }
-
- /* Generate search suggestions, if desired */
- let suggest: string[] | undefined
- if (this.options.suggest) {
- const titles = this.index.query(builder => {
- for (const clause of clauses)
- builder.term(clause.term, {
- fields: ["title"],
- presence: lunr.Query.presence.REQUIRED,
- wildcard: lunr.Query.wildcard.TRAILING
- })
- })
-
- /* Retrieve suggestions for best match */
- suggest = titles.length
- ? Object.keys(titles[0].matchData.metadata)
- : []
- }
-
- /* Return search result */
- return {
- items: [...groups.values()],
- ...typeof suggest !== "undefined" && { suggest }
- }
- }
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/config/index.ts b/dev/src/templates/assets/javascripts/integrations/search/config/index.ts
deleted file mode 100644
index 3d88d1c6..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/config/index.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search configuration
- */
-export interface SearchConfig {
- lang: string[] /* Search languages */
- separator: string /* Search separator */
- pipeline: SearchPipelineFn[] /* Search pipeline */
-}
-
-/**
- * Search document
- */
-export interface SearchDocument {
- location: string /* Document location */
- title: string /* Document title */
- text: string /* Document text */
- tags?: string[] /* Document tags */
- boost?: number /* Document boost */
- parent?: SearchDocument /* Document parent */
-}
-
-/**
- * Search options
- */
-export interface SearchOptions {
- suggest: boolean /* Search suggestions */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Search index
- */
-export interface SearchIndex {
- config: SearchConfig /* Search configuration */
- docs: SearchDocument[] /* Search documents */
- options: SearchOptions /* Search options */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search pipeline function
- */
-type SearchPipelineFn =
- | "trimmer" /* Trimmer */
- | "stopWordFilter" /* Stop word filter */
- | "stemmer" /* Stemmer */
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Create a search document map
- *
- * This function creates a mapping of URLs (including anchors) to the actual
- * articles and sections. It relies on the invariant that the search index is
- * ordered with the main article appearing before all sections with anchors.
- * If this is not the case, the logic music be changed.
- *
- * @param docs - Search documents
- *
- * @returns Search document map
- */
-export function setupSearchDocumentMap(
- docs: SearchDocument[]
-): Map<string, SearchDocument> {
- const map = new Map<string, SearchDocument>()
- for (const doc of docs) {
- const [path] = doc.location.split("#")
-
- /* Add document article */
- const article = map.get(path)
- if (typeof article === "undefined") {
- map.set(path, doc)
-
- /* Add document section */
- } else {
- map.set(doc.location, doc)
- doc.parent = article
- }
- }
-
- /* Return search document map */
- return map
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/highlighter/index.ts b/dev/src/templates/assets/javascripts/integrations/search/highlighter/index.ts
deleted file mode 100644
index 0fcbb19e..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/highlighter/index.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import escapeHTML from "escape-html"
-
-import { SearchConfig } from "../config"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search highlight function
- *
- * @param value - Value
- *
- * @returns Highlighted value
- */
-export type SearchHighlightFn = (value: string) => string
-
-/**
- * Search highlight factory function
- *
- * @param query - Query value
- *
- * @returns Search highlight function
- */
-export type SearchHighlightFactoryFn = (query: string) => SearchHighlightFn
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Create a search highlighter
- *
- * @param config - Search configuration
- *
- * @returns Search highlight factory function
- */
-export function setupSearchHighlighter(
- config: SearchConfig
-): SearchHighlightFactoryFn {
- // Hack: temporarily remove pure lookaheads and lookbehinds
- const regex = config.separator.split("|").map(term => {
- const temp = term.replace(/(\(\?[!=<][^)]+\))/g, "")
- return temp.length === 0 ? "�" : term
- })
- .join("|")
-
- const separator = new RegExp(regex, "img")
- const highlight = (_: unknown, data: string, term: string) => {
- return `${data}<mark data-md-highlight>${term}</mark>`
- }
-
- /* Return factory function */
- return (query: string) => {
- query = query
- .replace(/[\s*+\-:~^]+/g, " ")
- .trim()
-
- /* Create search term match expression */
- const match = new RegExp(`(^|${config.separator}|)(${
- query
- .replace(/[|\\{}()[\]^$+*?.-]/g, "\\$&")
- .replace(separator, "|")
- })`, "img")
-
- /* Highlight string value */
- return value => escapeHTML(value)
- .replace(match, highlight)
- .replace(/<\/mark>(\s+)<mark[^>]*>/img, "$1")
- }
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/index.ts b/dev/src/templates/assets/javascripts/integrations/search/index.ts
deleted file mode 100644
index 94c010bb..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./config"
-export * from "./highlighter"
-export * from "./query"
-export * from "./worker"
diff --git a/dev/src/templates/assets/javascripts/integrations/search/internal/_/index.ts b/dev/src/templates/assets/javascripts/integrations/search/internal/_/index.ts
deleted file mode 100644
index ae8f6104..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/internal/_/index.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Visitor function
- *
- * @param start - Start offset
- * @param end - End offset
- */
-type VisitorFn = (
- start: number, end: number
-) => void
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Split a string using the given separator
- *
- * @param input - Input value
- * @param separator - Separator
- * @param fn - Visitor function
- */
-export function split(
- input: string, separator: RegExp, fn: VisitorFn
-): void {
- separator = new RegExp(separator, "g")
-
- /* Split string using separator */
- let match: RegExpExecArray | null
- let index = 0
- do {
- match = separator.exec(input)
-
- /* Emit non-empty range */
- const until = match?.index ?? input.length
- if (index < until)
- fn(index, until)
-
- /* Update last index */
- if (match) {
- const [term] = match
- index = match.index + term.length
-
- /* Support zero-length lookaheads */
- if (term.length === 0)
- separator.lastIndex = match.index + 1
- }
- } while (match)
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/internal/extract/index.ts b/dev/src/templates/assets/javascripts/integrations/search/internal/extract/index.ts
deleted file mode 100644
index 2a98b9e1..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/internal/extract/index.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Extraction type
- *
- * This type defines the possible values that are encoded into the first two
- * bits of a section that is part of the blocks of a tokenization table. There
- * are three types of interest: HTML opening and closing tags, as well as the
- * actual text content we need to extract for indexing.
- */
-export const enum Extract {
- TAG_OPEN = 0, /* HTML opening tag */
- TEXT = 1, /* Text content */
- TAG_CLOSE = 2 /* HTML closing tag */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Visitor function
- *
- * @param block - Block index
- * @param type - Extraction type
- * @param start - Start offset
- * @param end - End offset
- */
-type VisitorFn = (
- block: number, type: Extract, start: number, end: number
-) => void
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Split a string into markup and text sections
- *
- * This function scans a string and divides it up into sections of markup and
- * text. For each section, it invokes the given visitor function with the block
- * index, extraction type, as well as start and end offsets. Using a visitor
- * function (= streaming data) is ideal for minimizing pressure on the GC.
- *
- * @param input - Input value
- * @param fn - Visitor function
- */
-export function extract(
- input: string, fn: VisitorFn
-): void {
-
- let block = 0 /* Current block */
- let start = 0 /* Current start offset */
- let end = 0 /* Current end offset */
-
- /* Split string into sections */
- for (let stack = 0; end < input.length; end++) {
-
- /* Opening tag after non-empty section */
- if (input.charAt(end) === "<" && end > start) {
- fn(block, Extract.TEXT, start, start = end)
-
- /* Closing tag */
- } else if (input.charAt(end) === ">") {
- if (input.charAt(start + 1) === "/") {
- if (--stack === 0)
- fn(block++, Extract.TAG_CLOSE, start, end + 1)
-
- /* Tag is not self-closing */
- } else if (input.charAt(end - 1) !== "/") {
- if (stack++ === 0)
- fn(block, Extract.TAG_OPEN, start, end + 1)
- }
-
- /* New section */
- start = end + 1
- }
- }
-
- /* Add trailing section */
- if (end > start)
- fn(block, Extract.TEXT, start, end)
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/internal/highlight/index.ts b/dev/src/templates/assets/javascripts/integrations/search/internal/highlight/index.ts
deleted file mode 100644
index 7cc3bf1a..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/internal/highlight/index.ts
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Position table
- */
-export type PositionTable = number[][]
-
-/**
- * Position
- */
-export type Position = number
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Highlight all occurrences in a string
- *
- * This function receives a field's value (e.g. like `title` or `text`), it's
- * position table that was generated during indexing, and the positions found
- * when executing the query. It then highlights all occurrences, and returns
- * their concatenation. In case of multiple blocks, two are returned.
- *
- * @param input - Input value
- * @param table - Table for indexing
- * @param positions - Occurrences
- * @param full - Full results
- *
- * @returns Highlighted string value
- */
-export function highlight(
- input: string, table: PositionTable, positions: Position[], full = false
-): string {
- return highlightAll([input], table, positions, full).pop()!
-}
-
-/**
- * Highlight all occurrences in a set of strings
- *
- * @param inputs - Input values
- * @param table - Table for indexing
- * @param positions - Occurrences
- * @param full - Full results
- *
- * @returns Highlighted string values
- */
-export function highlightAll(
- inputs: string[], table: PositionTable, positions: Position[], full = false
-): string[] {
-
- /* Map blocks to input values */
- const mapping = [0]
- for (let t = 1; t < table.length; t++) {
- const prev = table[t - 1]
- const next = table[t]
-
- /* Check if table points to new block */
- const p = prev[prev.length - 1] >>> 2 & 0x3FF
- const q = next[0] >>> 12
-
- /* Add block to mapping */
- mapping.push(+(p > q) + mapping[mapping.length - 1])
- }
-
- /* Highlight strings one after another */
- return inputs.map((input, i) => {
- let cursor = 0
-
- /* Map occurrences to blocks */
- const blocks = new Map<number, number[]>()
- for (const p of positions.sort((a, b) => a - b)) {
- const index = p & 0xFFFFF
- const block = p >>> 20
- if (mapping[block] !== i)
- continue
-
- /* Ensure presence of block group */
- let group = blocks.get(block)
- if (typeof group === "undefined")
- blocks.set(block, group = [])
-
- /* Add index to group */
- group.push(index)
- }
-
- /* Just return string, if no occurrences */
- if (blocks.size === 0)
- return input
-
- /* Compute slices */
- const slices: string[] = []
- for (const [block, indexes] of blocks) {
- const t = table[block]
-
- /* Extract positions and length */
- const start = t[0] >>> 12
- const end = t[t.length - 1] >>> 12
- const length = t[t.length - 1] >>> 2 & 0x3FF
-
- /* Add prefix, if full results are desired */
- if (full && start > cursor)
- slices.push(input.slice(cursor, start))
-
- /* Extract and highlight slice */
- let slice = input.slice(start, end + length)
- for (const j of indexes.sort((a, b) => b - a)) {
-
- /* Retrieve offset and length of match */
- const p = (t[j] >>> 12) - start
- const q = (t[j] >>> 2 & 0x3FF) + p
-
- /* Wrap occurrence */
- slice = [
- slice.slice(0, p),
- "<mark>",
- slice.slice(p, q),
- "</mark>",
- slice.slice(q)
- ].join("")
- }
-
- /* Update cursor */
- cursor = end + length
-
- /* Append slice and abort if we have two */
- if (slices.push(slice) === 2)
- break
- }
-
- /* Add suffix, if full results are desired */
- if (full && cursor < input.length)
- slices.push(input.slice(cursor))
-
- /* Return highlighted slices */
- return slices.join("")
- })
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/internal/index.ts b/dev/src/templates/assets/javascripts/integrations/search/internal/index.ts
deleted file mode 100644
index c752329e..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/internal/index.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./extract"
-export * from "./highlight"
-export * from "./tokenize"
diff --git a/dev/src/templates/assets/javascripts/integrations/search/internal/tokenize/index.ts b/dev/src/templates/assets/javascripts/integrations/search/internal/tokenize/index.ts
deleted file mode 100644
index f5089bc9..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/internal/tokenize/index.ts
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { split } from "../_"
-import {
- Extract,
- extract
-} from "../extract"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Split a string or set of strings into tokens
- *
- * This tokenizer supersedes the default tokenizer that is provided by Lunr.js,
- * as it is aware of HTML tags and allows for multi-character splitting.
- *
- * It takes the given inputs, splits each of them into markup and text sections,
- * tokenizes and segments (if necessary) each of them, and then indexes them in
- * a table by using a compact bit representation. Bitwise techniques are used
- * to write and read from the table during indexing and querying.
- *
- * @see https://bit.ly/3W3Xw4J - Search: better, faster, smaller
- *
- * @param input - Input value(s)
- *
- * @returns Tokens
- */
-export function tokenize(
- input?: string | string[]
-): lunr.Token[] {
- const tokens: lunr.Token[] = []
- if (typeof input === "undefined")
- return tokens
-
- /* Tokenize strings one after another */
- const inputs = Array.isArray(input) ? input : [input]
- for (let i = 0; i < inputs.length; i++) {
- const table = lunr.tokenizer.table
- const total = table.length
-
- /* Split string into sections and tokenize content blocks */
- extract(inputs[i], (block, type, start, end) => {
- table[block += total] ||= []
- switch (type) {
-
- /* Handle markup */
- case Extract.TAG_OPEN:
- case Extract.TAG_CLOSE:
- table[block].push(
- start << 12 |
- end - start << 2 |
- type
- )
- break
-
- /* Handle text content */
- case Extract.TEXT:
- const section = inputs[i].slice(start, end)
- split(section, lunr.tokenizer.separator, (index, until) => {
-
- /**
- * Apply segmenter after tokenization. Note that the segmenter will
- * also split words at word boundaries, which is not what we want,
- * so we need to check if we can somehow mitigate this behavior.
- */
- if (typeof lunr.segmenter !== "undefined") {
- const subsection = section.slice(index, until)
- if (/^[MHIK]$/.test(lunr.segmenter.ctype_(subsection))) {
- const segments = lunr.segmenter.segment(subsection)
- for (let s = 0, l = 0; s < segments.length; s++) {
-
- /* Add block to section */
- table[block] ||= []
- table[block].push(
- start + index + l << 12 |
- segments[s].length << 2 |
- type
- )
-
- /* Add token with position */
- tokens.push(new lunr.Token(
- segments[s].toLowerCase(), {
- position: block << 20 | table[block].length - 1
- }
- ))
-
- /* Keep track of length */
- l += segments[s].length
- }
- return
- }
- }
-
- /* Add block to section */
- table[block].push(
- start + index << 12 |
- until - index << 2 |
- type
- )
-
- /* Add token with position */
- tokens.push(new lunr.Token(
- section.slice(index, until).toLowerCase(), {
- position: block << 20 | table[block].length - 1
- }
- ))
- })
- }
- })
- }
-
- /* Return tokens */
- return tokens
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/query/_/index.ts b/dev/src/templates/assets/javascripts/integrations/search/query/_/index.ts
deleted file mode 100644
index 14482e43..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/query/_/index.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { split } from "../../internal"
-import { transform } from "../transform"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search query clause
- */
-export interface SearchQueryClause {
- presence: lunr.Query.presence /* Clause presence */
- term: string /* Clause term */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Search query terms
- */
-export type SearchQueryTerms = Record<string, boolean>
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Transform search query
- *
- * This function lexes the given search query and applies the transformation
- * function to each term, preserving markup like `+` and `-` modifiers.
- *
- * @param query - Search query
- *
- * @returns Search query
- */
-export function transformSearchQuery(
- query: string
-): string {
-
- /* Split query terms with tokenizer */
- return transform(query, part => {
- const terms: string[] = []
-
- /* Initialize lexer and analyze part */
- const lexer = new lunr.QueryLexer(part)
- lexer.run()
-
- /* Extract and tokenize term from lexeme */
- for (const { type, str: term, start, end } of lexer.lexemes)
- switch (type) {
-
- /* Hack: remove colon - see https://bit.ly/3wD3T3I */
- case "FIELD":
- if (!["title", "text", "tags"].includes(term))
- part = [
- part.slice(0, end),
- " ",
- part.slice(end + 1)
- ].join("")
- break
-
- /* Tokenize term */
- case "TERM":
- split(term, lunr.tokenizer.separator, (...range) => {
- terms.push([
- part.slice(0, start),
- term.slice(...range),
- part.slice(end)
- ].join(""))
- })
- }
-
- /* Return terms */
- return terms
- })
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Parse a search query for analysis
- *
- * Lunr.js itself has a bug where it doesn't detect or remove wildcards for
- * query clauses, so we must do this here.
- *
- * @see https://bit.ly/3DpTGtz - GitHub issue
- *
- * @param value - Query value
- *
- * @returns Search query clauses
- */
-export function parseSearchQuery(
- value: string
-): SearchQueryClause[] {
- const query = new lunr.Query(["title", "text", "tags"])
- const parser = new lunr.QueryParser(value, query)
-
- /* Parse Search query */
- parser.parse()
- for (const clause of query.clauses) {
- clause.usePipeline = true
-
- /* Handle leading wildcard */
- if (clause.term.startsWith("*")) {
- clause.wildcard = lunr.Query.wildcard.LEADING
- clause.term = clause.term.slice(1)
- }
-
- /* Handle trailing wildcard */
- if (clause.term.endsWith("*")) {
- clause.wildcard = lunr.Query.wildcard.TRAILING
- clause.term = clause.term.slice(0, -1)
- }
- }
-
- /* Return query clauses */
- return query.clauses
-}
-
-/**
- * Analyze the search query clauses in regard to the search terms found
- *
- * @param query - Search query clauses
- * @param terms - Search terms
- *
- * @returns Search query terms
- */
-export function getSearchQueryTerms(
- query: SearchQueryClause[], terms: string[]
-): SearchQueryTerms {
- const clauses = new Set<SearchQueryClause>(query)
-
- /* Match query clauses against terms */
- const result: SearchQueryTerms = {}
- for (let t = 0; t < terms.length; t++)
- for (const clause of clauses)
- if (terms[t].startsWith(clause.term)) {
- result[clause.term] = true
- clauses.delete(clause)
- }
-
- /* Annotate unmatched non-stopword query clauses */
- for (const clause of clauses)
- if (lunr.stopWordFilter?.(clause.term))
- result[clause.term] = false
-
- /* Return query terms */
- return result
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/query/index.ts b/dev/src/templates/assets/javascripts/integrations/search/query/index.ts
deleted file mode 100644
index 763e2fd4..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/query/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./segment"
-export * from "./transform"
diff --git a/dev/src/templates/assets/javascripts/integrations/search/query/segment/index.ts b/dev/src/templates/assets/javascripts/integrations/search/query/segment/index.ts
deleted file mode 100644
index b96796f4..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/query/segment/index.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Segment a search query using the inverted index
- *
- * This function implements a clever approach to text segmentation for Asian
- * languages, as it used the information already available in the search index.
- * The idea is to greedily segment the search query based on the tokens that are
- * already part of the index, as described in the linked issue.
- *
- * @see https://bit.ly/3lwjrk7 - GitHub issue
- *
- * @param query - Query value
- * @param index - Inverted index
- *
- * @returns Segmented query value
- */
-export function segment(
- query: string, index: object
-): Iterable<string> {
- const segments = new Set<string>()
-
- /* Segment search query */
- const wordcuts = new Uint16Array(query.length)
- for (let i = 0; i < query.length; i++)
- for (let j = i + 1; j < query.length; j++) {
- const value = query.slice(i, j)
- if (value in index)
- wordcuts[i] = j - i
- }
-
- /* Compute longest matches with minimum overlap */
- const stack = [0]
- for (let s = stack.length; s > 0;) {
- const p = stack[--s]
- for (let q = 1; q < wordcuts[p]; q++)
- if (wordcuts[p + q] > wordcuts[p] - q) {
- segments.add(query.slice(p, p + q))
- stack[s++] = p + q
- }
-
- /* Continue at end of query string */
- const q = p + wordcuts[p]
- if (wordcuts[q] && q < query.length - 1)
- stack[s++] = q
-
- /* Add current segment */
- segments.add(query.slice(p, q))
- }
-
- // @todo fix this case in the code block above, this is a hotfix
- if (segments.has(""))
- return new Set([query])
-
- /* Return segmented query value */
- return segments
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/query/transform/index.ts b/dev/src/templates/assets/javascripts/integrations/search/query/transform/index.ts
deleted file mode 100644
index 41497786..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/query/transform/index.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Visitor function
- *
- * @param value - String value
- *
- * @returns String term(s)
- */
-type VisitorFn = (
- value: string
-) => string | string[]
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Default transformation function
- *
- * 1. Trim excess whitespace from left and right.
- *
- * 2. Search for parts in quotation marks and prepend a `+` modifier to denote
- * that the resulting document must contain all parts, converting the query
- * to an `AND` query (as opposed to the default `OR` behavior). While users
- * may expect parts enclosed in quotation marks to map to span queries, i.e.
- * for which order is important, Lunr.js doesn't support them, so the best
- * we can do is to convert the parts to an `AND` query.
- *
- * 3. Replace control characters which are not located at the beginning of the
- * query or preceded by white space, or are not followed by a non-whitespace
- * character or are at the end of the query string. Furthermore, filter
- * unmatched quotation marks.
- *
- * 4. Split the query string at whitespace, then pass each part to the visitor
- * function for tokenization, and append a wildcard to every resulting term
- * that is not explicitly marked with a `+`, `-`, `~` or `^` modifier, since
- * it ensures consistent and stable ranking when multiple terms are entered.
- * Also, if a fuzzy or boost modifier are given, but no numeric value has
- * been entered, default to 1 to not induce a query error.
- *
- * @param query - Query value
- * @param fn - Visitor function
- *
- * @returns Transformed query value
- */
-export function transform(
- query: string, fn: VisitorFn = term => term
-): string {
- return query
-
- /* => 1 */
- .trim()
-
- /* => 2 */
- .split(/"([^"]+)"/g)
- .map((parts, index) => index & 1
- ? parts.replace(/^\b|^(?![^\x00-\x7F]|$)|\s+/g, " +")
- : parts
- )
- .join("")
-
- /* => 3 */
- .replace(/"|(?:^|\s+)[*+\-:^~]+(?=\s+|$)/g, "")
-
- /* => 4 */
- .split(/\s+/g)
- .reduce((prev, term) => {
- const next = fn(term)
- return [...prev, ...Array.isArray(next) ? next : [next]]
- }, [] as string[])
- .map(term => /([~^]$)/.test(term) ? `${term}1` : term)
- .map(term => /(^[+-]|[~^]\d+$)/.test(term) ? term : `${term}*`)
- .join(" ")
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/worker/_/index.ts b/dev/src/templates/assets/javascripts/integrations/search/worker/_/index.ts
deleted file mode 100644
index 26713573..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/worker/_/index.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- ObservableInput,
- Subject,
- first,
- merge,
- of,
- switchMap
-} from "rxjs"
-
-import { feature } from "~/_"
-import { watchToggle, watchWorker } from "~/browser"
-
-import { SearchIndex } from "../../config"
-import {
- SearchMessage,
- SearchMessageType
-} from "../message"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Set up search worker
- *
- * This function creates and initializes a web worker that is used for search,
- * so that the user interface doesn't freeze. In general, the application does
- * not care how search is implemented, as long as the web worker conforms to
- * the format expected by the application as defined in `SearchMessage`. This
- * allows the author to implement custom search functionality, by providing a
- * custom web worker via configuration.
- *
- * Material for MkDocs' built-in search implementation makes use of Lunr.js, an
- * efficient and fast implementation for client-side search. Leveraging a tiny
- * iframe-based web worker shim, search is even supported for the `file://`
- * protocol, enabling search for local non-hosted builds.
- *
- * If the protocol is `file://`, search initialization is deferred to mitigate
- * freezing, as it's now synchronous by design - see https://bit.ly/3C521EO
- *
- * @see https://bit.ly/3igvtQv - How to implement custom search
- *
- * @param url - Worker URL
- * @param index$ - Search index observable input
- *
- * @returns Search worker
- */
-export function setupSearchWorker(
- url: string, index$: ObservableInput<SearchIndex>
-): Subject<SearchMessage> {
- const worker$ = watchWorker<SearchMessage>(url)
- merge(
- of(location.protocol !== "file:"),
- watchToggle("search")
- )
- .pipe(
- first(active => active),
- switchMap(() => index$)
- )
- .subscribe(({ config, docs }) => worker$.next({
- type: SearchMessageType.SETUP,
- data: {
- config,
- docs,
- options: {
- suggest: feature("search.suggest")
- }
- }
- }))
-
- /* Return search worker */
- return worker$
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/search/worker/index.ts b/dev/src/templates/assets/javascripts/integrations/search/worker/index.ts
deleted file mode 100644
index 7120ad6e..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/worker/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./_"
-export * from "./message"
diff --git a/dev/src/templates/assets/javascripts/integrations/search/worker/main/index.ts b/dev/src/templates/assets/javascripts/integrations/search/worker/main/index.ts
deleted file mode 100644
index 2df38080..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/worker/main/index.ts
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import lunr from "lunr"
-
-import { getElement } from "~/browser/element/_"
-import "~/polyfills"
-
-import { Search } from "../../_"
-import { SearchConfig } from "../../config"
-import {
- SearchMessage,
- SearchMessageType
-} from "../message"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Add support for `iframe-worker` shim
- *
- * While `importScripts` is synchronous when executed inside of a web worker,
- * it's not possible to provide a synchronous shim implementation. The cool
- * thing is that awaiting a non-Promise will convert it into a Promise, so
- * extending the type definition to return a `Promise` shouldn't break anything.
- *
- * @see https://bit.ly/2PjDnXi - GitHub comment
- *
- * @param urls - Scripts to load
- *
- * @returns Promise resolving with no result
- */
-declare global {
- function importScripts(...urls: string[]): Promise<void> | void
-}
-
-/* ----------------------------------------------------------------------------
- * Data
- * ------------------------------------------------------------------------- */
-
-/**
- * Search index
- */
-let index: Search
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Fetch (= import) multi-language support through `lunr-languages`
- *
- * This function automatically imports the stemmers necessary to process the
- * languages which are defined as part of the search configuration.
- *
- * If the worker runs inside of an `iframe` (when using `iframe-worker` as
- * a shim), the base URL for the stemmers to be loaded must be determined by
- * searching for the first `script` element with a `src` attribute, which will
- * contain the contents of this script.
- *
- * @param config - Search configuration
- *
- * @returns Promise resolving with no result
- */
-async function setupSearchLanguages(
- config: SearchConfig
-): Promise<void> {
- let base = "../lunr"
-
- /* Detect `iframe-worker` and fix base URL */
- if (typeof parent !== "undefined" && "IFrameWorker" in parent) {
- const worker = getElement<HTMLScriptElement>("script[src]")!
- const [path] = worker.src.split("/worker")
-
- /* Prefix base with path */
- base = base.replace("..", path)
- }
-
- /* Add scripts for languages */
- const scripts = []
- for (const lang of config.lang) {
- switch (lang) {
-
- /* Add segmenter for Japanese */
- case "ja":
- scripts.push(`${base}/tinyseg.js`)
- break
-
- /* Add segmenter for Hindi and Thai */
- case "hi":
- case "th":
- scripts.push(`${base}/wordcut.js`)
- break
- }
-
- /* Add language support */
- if (lang !== "en")
- scripts.push(`${base}/min/lunr.${lang}.min.js`)
- }
-
- /* Add multi-language support */
- if (config.lang.length > 1)
- scripts.push(`${base}/min/lunr.multi.min.js`)
-
- /* Load scripts synchronously */
- if (scripts.length)
- await importScripts(
- `${base}/min/lunr.stemmer.support.min.js`,
- ...scripts
- )
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Message handler
- *
- * @param message - Source message
- *
- * @returns Target message
- */
-export async function handler(
- message: SearchMessage
-): Promise<SearchMessage> {
- switch (message.type) {
-
- /* Search setup message */
- case SearchMessageType.SETUP:
- await setupSearchLanguages(message.data.config)
- index = new Search(message.data)
- return {
- type: SearchMessageType.READY
- }
-
- /* Search query message */
- case SearchMessageType.QUERY:
- const query = message.data
- try {
- return {
- type: SearchMessageType.RESULT,
- data: index.search(query)
- }
-
- /* Return empty result in case of error */
- } catch (err) {
- console.warn(`Invalid query: ${query} – see https://bit.ly/2s3ChXG`)
- console.warn(err)
- return {
- type: SearchMessageType.RESULT,
- data: { items: [] }
- }
- }
-
- /* All other messages */
- default:
- throw new TypeError("Invalid message type")
- }
-}
-
-/* ----------------------------------------------------------------------------
- * Worker
- * ------------------------------------------------------------------------- */
-
-/* Expose Lunr.js in global scope, or stemmers won't work */
-self.lunr = lunr
-
-/* Handle messages */
-addEventListener("message", async ev => {
- postMessage(await handler(ev.data))
-})
diff --git a/dev/src/templates/assets/javascripts/integrations/search/worker/message/index.ts b/dev/src/templates/assets/javascripts/integrations/search/worker/message/index.ts
deleted file mode 100644
index 54d5001e..00000000
--- a/dev/src/templates/assets/javascripts/integrations/search/worker/message/index.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { SearchResult } from "../../_"
-import { SearchIndex } from "../../config"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Search message type
- */
-export const enum SearchMessageType {
- SETUP, /* Search index setup */
- READY, /* Search index ready */
- QUERY, /* Search query */
- RESULT /* Search results */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Message containing the data necessary to setup the search index
- */
-export interface SearchSetupMessage {
- type: SearchMessageType.SETUP /* Message type */
- data: SearchIndex /* Message data */
-}
-
-/**
- * Message indicating the search index is ready
- */
-export interface SearchReadyMessage {
- type: SearchMessageType.READY /* Message type */
-}
-
-/**
- * Message containing a search query
- */
-export interface SearchQueryMessage {
- type: SearchMessageType.QUERY /* Message type */
- data: string /* Message data */
-}
-
-/**
- * Message containing results for a search query
- */
-export interface SearchResultMessage {
- type: SearchMessageType.RESULT /* Message type */
- data: SearchResult /* Message data */
-}
-
-/* ------------------------------------------------------------------------- */
-
-/**
- * Message exchanged with the search worker
- */
-export type SearchMessage =
- | SearchSetupMessage
- | SearchReadyMessage
- | SearchQueryMessage
- | SearchResultMessage
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Type guard for search ready messages
- *
- * @param message - Search worker message
- *
- * @returns Test result
- */
-export function isSearchReadyMessage(
- message: SearchMessage
-): message is SearchReadyMessage {
- return message.type === SearchMessageType.READY
-}
-
-/**
- * Type guard for search result messages
- *
- * @param message - Search worker message
- *
- * @returns Test result
- */
-export function isSearchResultMessage(
- message: SearchMessage
-): message is SearchResultMessage {
- return message.type === SearchMessageType.RESULT
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/sitemap/index.ts b/dev/src/templates/assets/javascripts/integrations/sitemap/index.ts
deleted file mode 100644
index 08695bad..00000000
--- a/dev/src/templates/assets/javascripts/integrations/sitemap/index.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Observable,
- catchError,
- defaultIfEmpty,
- map,
- of,
- tap
-} from "rxjs"
-
-import { configuration } from "~/_"
-import { getElements, requestXML } from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Sitemap, i.e. a list of URLs
- */
-export type Sitemap = string[]
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Preprocess a list of URLs
- *
- * This function replaces the `site_url` in the sitemap with the actual base
- * URL, to allow instant navigation to work in occasions like Netlify previews.
- *
- * @param urls - URLs
- *
- * @returns URL path parts
- */
-function preprocess(urls: Sitemap): Sitemap {
- if (urls.length < 2)
- return [""]
-
- /* Take the first two URLs and remove everything after the last slash */
- const [root, next] = [...urls]
- .sort((a, b) => a.length - b.length)
- .map(url => url.replace(/[^/]+$/, ""))
-
- /* Compute common prefix */
- let index = 0
- if (root === next)
- index = root.length
- else
- while (root.charCodeAt(index) === next.charCodeAt(index))
- index++
-
- /* Remove common prefix and return in original order */
- return urls.map(url => url.replace(root.slice(0, index), ""))
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Fetch the sitemap for the given base URL
- *
- * @param base - Base URL
- *
- * @returns Sitemap observable
- */
-export function fetchSitemap(base?: URL): Observable<Sitemap> {
- const cached = __md_get<Sitemap>("__sitemap", sessionStorage, base)
- if (cached) {
- return of(cached)
- } else {
- const config = configuration()
- return requestXML(new URL("sitemap.xml", base || config.base))
- .pipe(
- map(sitemap => preprocess(getElements("loc", sitemap)
- .map(node => node.textContent!)
- )),
- catchError(() => EMPTY), // @todo refactor instant loading
- defaultIfEmpty([]),
- tap(sitemap => __md_set("__sitemap", sitemap, sessionStorage, base))
- )
- }
-}
diff --git a/dev/src/templates/assets/javascripts/integrations/version/index.ts b/dev/src/templates/assets/javascripts/integrations/version/index.ts
deleted file mode 100644
index 38d78f17..00000000
--- a/dev/src/templates/assets/javascripts/integrations/version/index.ts
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- EMPTY,
- Subject,
- catchError,
- combineLatest,
- filter,
- fromEvent,
- map,
- of,
- switchMap,
- withLatestFrom
-} from "rxjs"
-
-import { configuration } from "~/_"
-import {
- getElement,
- getLocation,
- requestJSON,
- setLocation
-} from "~/browser"
-import { getComponentElements } from "~/components"
-import {
- Version,
- renderVersionSelector
-} from "~/templates"
-
-import { fetchSitemap } from "../sitemap"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Setup options
- */
-interface SetupOptions {
- document$: Subject<Document> /* Document subject */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Set up version selector
- *
- * @param options - Options
- */
-export function setupVersionSelector(
- { document$ }: SetupOptions
-): void {
- const config = configuration()
- const versions$ = requestJSON<Version[]>(
- new URL("../versions.json", config.base)
- )
- .pipe(
- catchError(() => EMPTY) // @todo refactor instant loading
- )
-
- /* Determine current version */
- const current$ = versions$
- .pipe(
- map(versions => {
- const [, current] = config.base.match(/([^/]+)\/?$/)!
- return versions.find(({ version, aliases }) => (
- version === current || aliases.includes(current)
- )) || versions[0]
- })
- )
-
- /* Intercept inter-version navigation */
- versions$
- .pipe(
- map(versions => new Map(versions.map(version => [
- `${new URL(`../${version.version}/`, config.base)}`,
- version
- ]))),
- switchMap(urls => fromEvent<MouseEvent>(document.body, "click")
- .pipe(
- filter(ev => !ev.metaKey && !ev.ctrlKey),
- withLatestFrom(current$),
- switchMap(([ev, current]) => {
- if (ev.target instanceof Element) {
- const el = ev.target.closest("a")
- if (el && !el.target && urls.has(el.href)) {
- const url = el.href
- // This is a temporary hack to detect if a version inside the
- // version selector or on another part of the site was clicked.
- // If we're inside the version selector, we definitely want to
- // find the same page, as we might have different deployments
- // due to aliases. However, if we're outside the version
- // selector, we must abort here, because we might otherwise
- // interfere with instant navigation. We need to refactor this
- // at some point together with instant navigation.
- //
- // See https://github.com/squidfunk/mkdocs-material/issues/4012
- if (!ev.target.closest(".md-version")) {
- const version = urls.get(url)!
- if (version === current)
- return EMPTY
- }
- ev.preventDefault()
- return of(url)
- }
- }
- return EMPTY
- }),
- switchMap(url => {
- const { version } = urls.get(url)!
- return fetchSitemap(new URL(url))
- .pipe(
- map(sitemap => {
- const location = getLocation()
- const path = location.href.replace(config.base, "")
- return sitemap.includes(path.split("#")[0])
- ? new URL(`../${version}/${path}`, config.base)
- : new URL(url)
- })
- )
- })
- )
- )
- )
- .subscribe(url => setLocation(url, true))
-
- /* Render version selector and warning */
- combineLatest([versions$, current$])
- .subscribe(([versions, current]) => {
- const topic = getElement(".md-header__topic")
- topic.appendChild(renderVersionSelector(versions, current))
- })
-
- /* Integrate outdated version banner with instant navigation */
- document$.pipe(switchMap(() => current$))
- .subscribe(current => {
-
- /* Check if version state was already determined */
- let outdated = __md_get("__outdated", sessionStorage)
- if (outdated === null) {
- outdated = true
-
- /* Obtain and normalize default versions */
- let ignored = config.version?.default || "latest"
- if (!Array.isArray(ignored))
- ignored = [ignored]
-
- /* Check if version is considered a default */
- main: for (const ignore of ignored)
- for (const alias of current.aliases)
- if (new RegExp(ignore, "i").test(alias)) {
- outdated = false
- break main
- }
-
- /* Persist version state in session storage */
- __md_set("__outdated", outdated, sessionStorage)
- }
-
- /* Unhide outdated version banner */
- if (outdated)
- for (const warning of getComponentElements("outdated"))
- warning.hidden = false
- })
-}
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ar.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.ar.min.js
index 9b06c26c..9b06c26c 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ar.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.ar.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.da.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.da.min.js
index b9d85098..b9d85098 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.da.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.da.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.de.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.de.min.js
index f3b5c108..f3b5c108 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.de.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.de.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.du.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.du.min.js
index 49a0f3f0..49a0f3f0 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.du.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.du.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.es.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.es.min.js
index 2989d342..2989d342 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.es.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.es.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.fi.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.fi.min.js
index 29f5dfce..29f5dfce 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.fi.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.fi.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.fr.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.fr.min.js
index 68cd0094..68cd0094 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.fr.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.fr.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.he.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.he.min.js
index b863d3ea..b863d3ea 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.he.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.he.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.hi.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.hi.min.js
index 7dbc4140..7dbc4140 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.hi.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.hi.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.hu.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.hu.min.js
index ed9d909f..ed9d909f 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.hu.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.hu.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.hy.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.hy.min.js
index b37f7929..b37f7929 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.hy.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.hy.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.it.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.it.min.js
index 344b6a3c..344b6a3c 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.it.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.it.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ja.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.ja.min.js
index 5f254ebe..5f254ebe 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ja.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.ja.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.jp.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.jp.min.js
index c055ebaf..c055ebaf 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.jp.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.jp.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.kn.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.kn.min.js
index 1cef9bef..1cef9bef 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.kn.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.kn.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ko.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.ko.min.js
index eaf9dabf..eaf9dabf 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ko.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.ko.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.multi.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.multi.min.js
index 7debad09..7debad09 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.multi.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.multi.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.nl.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.nl.min.js
index c4a25359..c4a25359 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.nl.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.nl.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.no.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.no.min.js
index 92bc7e4e..92bc7e4e 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.no.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.no.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.pt.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.pt.min.js
index 6c16996d..6c16996d 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.pt.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.pt.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ro.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.ro.min.js
index 72771401..72771401 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ro.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.ro.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ru.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.ru.min.js
index 186cc485..186cc485 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ru.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.ru.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.sa.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.sa.min.js
index 50ee5642..50ee5642 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.sa.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.sa.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.stemmer.support.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.stemmer.support.min.js
index abd4475b..abd4475b 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.stemmer.support.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.stemmer.support.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.sv.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.sv.min.js
index 3e5eb640..3e5eb640 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.sv.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.sv.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ta.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.ta.min.js
index a644bed2..a644bed2 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.ta.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.ta.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.te.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.te.min.js
index 9fa7a93b..9fa7a93b 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.te.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.te.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.th.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.th.min.js
index dee3aac6..dee3aac6 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.th.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.th.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.tr.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.tr.min.js
index 563f6ec1..563f6ec1 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.tr.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.tr.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.vi.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.vi.min.js
index 22aed28c..22aed28c 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.vi.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.vi.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.zh.min.js b/dev/src/templates/assets/javascripts/lunr/min/lunr.zh.min.js
index fda66e9c..fda66e9c 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/min/lunr.zh.min.js
+++ b/dev/src/templates/assets/javascripts/lunr/min/lunr.zh.min.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/tinyseg.js b/dev/src/templates/assets/javascripts/lunr/tinyseg.js
index 167fa6dd..167fa6dd 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/tinyseg.js
+++ b/dev/src/templates/assets/javascripts/lunr/tinyseg.js
diff --git a/dev/src/material/templates/assets/javascripts/lunr/wordcut.js b/dev/src/templates/assets/javascripts/lunr/wordcut.js
index 0d898c9e..0d898c9e 100644
--- a/dev/src/material/templates/assets/javascripts/lunr/wordcut.js
+++ b/dev/src/templates/assets/javascripts/lunr/wordcut.js
diff --git a/dev/src/templates/assets/javascripts/patches/indeterminate/index.ts b/dev/src/templates/assets/javascripts/patches/indeterminate/index.ts
deleted file mode 100644
index 9b7b0d5a..00000000
--- a/dev/src/templates/assets/javascripts/patches/indeterminate/index.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- fromEvent,
- map,
- mergeMap,
- switchMap,
- takeWhile,
- tap,
- withLatestFrom
-} from "rxjs"
-
-import { getElements } from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Patch options
- */
-interface PatchOptions {
- document$: Observable<Document> /* Document observable */
- tablet$: Observable<boolean> /* Media tablet observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Patch indeterminate checkboxes
- *
- * This function replaces the indeterminate "pseudo state" with the actual
- * indeterminate state, which is used to keep navigation always expanded.
- *
- * @param options - Options
- */
-export function patchIndeterminate(
- { document$, tablet$ }: PatchOptions
-): void {
- document$
- .pipe(
- switchMap(() => getElements<HTMLInputElement>(
- ".md-toggle--indeterminate"
- )),
- tap(el => {
- el.indeterminate = true
- el.checked = false
- }),
- mergeMap(el => fromEvent(el, "change")
- .pipe(
- takeWhile(() => el.classList.contains("md-toggle--indeterminate")),
- map(() => el)
- )
- ),
- withLatestFrom(tablet$)
- )
- .subscribe(([el, tablet]) => {
- el.classList.remove("md-toggle--indeterminate")
- if (tablet)
- el.checked = false
- })
-}
diff --git a/dev/src/templates/assets/javascripts/patches/index.ts b/dev/src/templates/assets/javascripts/patches/index.ts
deleted file mode 100644
index b6e65fc0..00000000
--- a/dev/src/templates/assets/javascripts/patches/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./indeterminate"
-export * from "./scrollfix"
-export * from "./scrolllock"
diff --git a/dev/src/templates/assets/javascripts/patches/scrollfix/index.ts b/dev/src/templates/assets/javascripts/patches/scrollfix/index.ts
deleted file mode 100644
index 607c46a0..00000000
--- a/dev/src/templates/assets/javascripts/patches/scrollfix/index.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- filter,
- fromEvent,
- map,
- mergeMap,
- switchMap,
- tap
-} from "rxjs"
-
-import { getElements } from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Patch options
- */
-interface PatchOptions {
- document$: Observable<Document> /* Document observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Check whether the given device is an Apple device
- *
- * @returns Test result
- */
-function isAppleDevice(): boolean {
- return /(iPad|iPhone|iPod)/.test(navigator.userAgent)
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Patch all elements with `data-md-scrollfix` attributes
- *
- * This is a year-old patch which ensures that overflow scrolling works at the
- * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon
- * the start of a touch event.
- *
- * @see https://bit.ly/2SCtAOO - Original source
- *
- * @param options - Options
- */
-export function patchScrollfix(
- { document$ }: PatchOptions
-): void {
- document$
- .pipe(
- switchMap(() => getElements("[data-md-scrollfix]")),
- tap(el => el.removeAttribute("data-md-scrollfix")),
- filter(isAppleDevice),
- mergeMap(el => fromEvent(el, "touchstart")
- .pipe(
- map(() => el)
- )
- )
- )
- .subscribe(el => {
- const top = el.scrollTop
-
- /* We're at the top of the container */
- if (top === 0) {
- el.scrollTop = 1
-
- /* We're at the bottom of the container */
- } else if (top + el.offsetHeight === el.scrollHeight) {
- el.scrollTop = top - 1
- }
- })
-}
diff --git a/dev/src/templates/assets/javascripts/patches/scrolllock/index.ts b/dev/src/templates/assets/javascripts/patches/scrolllock/index.ts
deleted file mode 100644
index 4ec3e103..00000000
--- a/dev/src/templates/assets/javascripts/patches/scrolllock/index.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import {
- Observable,
- combineLatest,
- delay,
- map,
- of,
- switchMap,
- withLatestFrom
-} from "rxjs"
-
-import {
- Viewport,
- watchToggle
-} from "~/browser"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Patch options
- */
-interface PatchOptions {
- viewport$: Observable<Viewport> /* Viewport observable */
- tablet$: Observable<boolean> /* Media tablet observable */
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Patch the document body to lock when search is open
- *
- * For mobile and tablet viewports, the search is rendered full screen, which
- * leads to scroll leaking when at the top or bottom of the search result. This
- * function locks the body when the search is in full screen mode, and restores
- * the scroll position when leaving.
- *
- * @param options - Options
- */
-export function patchScrolllock(
- { viewport$, tablet$ }: PatchOptions
-): void {
- combineLatest([watchToggle("search"), tablet$])
- .pipe(
- map(([active, tablet]) => active && !tablet),
- switchMap(active => of(active)
- .pipe(
- delay(active ? 400 : 100)
- )
- ),
- withLatestFrom(viewport$)
- )
- .subscribe(([active, { offset: { y }}]) => {
- if (active) {
- document.body.setAttribute("data-md-scrolllock", "")
- document.body.style.top = `-${y}px`
- } else {
- const value = -1 * parseInt(document.body.style.top, 10)
- document.body.removeAttribute("data-md-scrolllock")
- document.body.style.top = ""
- if (value)
- window.scrollTo(0, value)
- }
- })
-}
diff --git a/dev/src/templates/assets/javascripts/polyfills/index.ts b/dev/src/templates/assets/javascripts/polyfills/index.ts
deleted file mode 100644
index 2aec8290..00000000
--- a/dev/src/templates/assets/javascripts/polyfills/index.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Polyfills
- * ------------------------------------------------------------------------- */
-
-/* Polyfill `Object.entries` */
-if (!Object.entries)
- Object.entries = function (obj: object) {
- const data: [string, string][] = []
- for (const key of Object.keys(obj))
- // @ts-expect-error - ignore property access warning
- data.push([key, obj[key]])
-
- /* Return entries */
- return data
- }
-
-/* Polyfill `Object.values` */
-if (!Object.values)
- Object.values = function (obj: object) {
- const data: string[] = []
- for (const key of Object.keys(obj))
- // @ts-expect-error - ignore property access warning
- data.push(obj[key])
-
- /* Return values */
- return data
- }
-
-/* ------------------------------------------------------------------------- */
-
-/* Polyfills for `Element` */
-if (typeof Element !== "undefined") {
-
- /* Polyfill `Element.scrollTo` */
- if (!Element.prototype.scrollTo)
- Element.prototype.scrollTo = function (
- x?: ScrollToOptions | number, y?: number
- ): void {
- if (typeof x === "object") {
- this.scrollLeft = x.left!
- this.scrollTop = x.top!
- } else {
- this.scrollLeft = x!
- this.scrollTop = y!
- }
- }
-
- /* Polyfill `Element.replaceWith` */
- if (!Element.prototype.replaceWith)
- Element.prototype.replaceWith = function (
- ...nodes: Array<string | Node>
- ): void {
- const parent = this.parentNode
- if (parent) {
- if (nodes.length === 0)
- parent.removeChild(this)
-
- /* Replace children and create text nodes */
- for (let i = nodes.length - 1; i >= 0; i--) {
- let node = nodes[i]
- if (typeof node === "string")
- node = document.createTextNode(node)
- else if (node.parentNode)
- node.parentNode.removeChild(node)
-
- /* Replace child or insert before previous sibling */
- if (!i)
- parent.replaceChild(node, this)
- else
- parent.insertBefore(this.previousSibling!, node)
- }
- }
- }
-}
diff --git a/dev/src/templates/assets/javascripts/templates/annotation/index.tsx b/dev/src/templates/assets/javascripts/templates/annotation/index.tsx
deleted file mode 100644
index 9b8f85f5..00000000
--- a/dev/src/templates/assets/javascripts/templates/annotation/index.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { h } from "~/utilities"
-
-import { renderTooltip } from "../tooltip"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render an annotation
- *
- * @param id - Annotation identifier
- * @param prefix - Tooltip identifier prefix
- *
- * @returns Element
- */
-export function renderAnnotation(
- id: string | number, prefix?: string
-): HTMLElement {
- prefix = prefix ? `${prefix}_annotation_${id}` : undefined
-
- /* Render tooltip with anchor, if given */
- if (prefix) {
- const anchor = prefix ? `#${prefix}` : undefined
- return (
- <aside class="md-annotation" tabIndex={0}>
- {renderTooltip(prefix)}
- <a href={anchor} class="md-annotation__index" tabIndex={-1}>
- <span data-md-annotation-id={id}></span>
- </a>
- </aside>
- )
- } else {
- return (
- <aside class="md-annotation" tabIndex={0}>
- {renderTooltip(prefix)}
- <span class="md-annotation__index" tabIndex={-1}>
- <span data-md-annotation-id={id}></span>
- </span>
- </aside>
- )
- }
-}
diff --git a/dev/src/templates/assets/javascripts/templates/clipboard/index.tsx b/dev/src/templates/assets/javascripts/templates/clipboard/index.tsx
deleted file mode 100644
index 95dbf12a..00000000
--- a/dev/src/templates/assets/javascripts/templates/clipboard/index.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { translation } from "~/_"
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render a 'copy-to-clipboard' button
- *
- * @param id - Unique identifier
- *
- * @returns Element
- */
-export function renderClipboardButton(id: string): HTMLElement {
- return (
- <button
- class="md-clipboard md-icon"
- title={translation("clipboard.copy")}
- data-clipboard-target={`#${id} > code`}
- ></button>
- )
-}
diff --git a/dev/src/templates/assets/javascripts/templates/index.ts b/dev/src/templates/assets/javascripts/templates/index.ts
deleted file mode 100644
index b50b93b8..00000000
--- a/dev/src/templates/assets/javascripts/templates/index.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./annotation"
-export * from "./clipboard"
-export * from "./search"
-export * from "./source"
-export * from "./tabbed"
-export * from "./table"
-export * from "./version"
diff --git a/dev/src/templates/assets/javascripts/templates/search/index.tsx b/dev/src/templates/assets/javascripts/templates/search/index.tsx
deleted file mode 100644
index 350c0505..00000000
--- a/dev/src/templates/assets/javascripts/templates/search/index.tsx
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { ComponentChild } from "preact"
-
-import { configuration, feature, translation } from "~/_"
-import { SearchItem } from "~/integrations/search"
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Render flag
- */
-const enum Flag {
- TEASER = 1, /* Render teaser */
- PARENT = 2 /* Render as parent */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper function
- * ------------------------------------------------------------------------- */
-
-/**
- * Render a search document
- *
- * @param document - Search document
- * @param flag - Render flags
- *
- * @returns Element
- */
-function renderSearchDocument(
- document: SearchItem, flag: Flag
-): HTMLElement {
- const parent = flag & Flag.PARENT
- const teaser = flag & Flag.TEASER
-
- /* Render missing query terms */
- const missing = Object.keys(document.terms)
- .filter(key => !document.terms[key])
- .reduce<ComponentChild[]>((list, key) => [
- ...list, <del>{key}</del>, " "
- ], [])
- .slice(0, -1)
-
- /* Assemble query string for highlighting */
- const config = configuration()
- const url = new URL(document.location, config.base)
- if (feature("search.highlight"))
- url.searchParams.set("h", Object.entries(document.terms)
- .filter(([, match]) => match)
- .reduce((highlight, [value]) => `${highlight} ${value}`.trim(), "")
- )
-
- /* Render article or section, depending on flags */
- const { tags } = configuration()
- return (
- <a href={`${url}`} class="md-search-result__link" tabIndex={-1}>
- <article
- class="md-search-result__article md-typeset"
- data-md-score={document.score.toFixed(2)}
- >
- {parent > 0 && <div class="md-search-result__icon md-icon"></div>}
- {parent > 0 && <h1>{document.title}</h1>}
- {parent <= 0 && <h2>{document.title}</h2>}
- {teaser > 0 && document.text.length > 0 &&
- document.text
- }
- {document.tags && document.tags.map(tag => {
- const type = tags
- ? tag in tags
- ? `md-tag-icon md-tag--${tags[tag]}`
- : "md-tag-icon"
- : ""
- return (
- <span class={`md-tag ${type}`}>{tag}</span>
- )
- })}
- {teaser > 0 && missing.length > 0 &&
- <p class="md-search-result__terms">
- {translation("search.result.term.missing")}: {...missing}
- </p>
- }
- </article>
- </a>
- )
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render a search result
- *
- * @param result - Search result
- *
- * @returns Element
- */
-export function renderSearchResultItem(
- result: SearchItem[]
-): HTMLElement {
- const threshold = result[0].score
- const docs = [...result]
-
- const config = configuration()
-
- /* Find and extract parent article */
- const parent = docs.findIndex(doc => {
- const l = `${new URL(doc.location, config.base)}` // @todo hacky
- return !l.includes("#")
- })
- const [article] = docs.splice(parent, 1)
-
- /* Determine last index above threshold */
- let index = docs.findIndex(doc => doc.score < threshold)
- if (index === -1)
- index = docs.length
-
- /* Partition sections */
- const best = docs.slice(0, index)
- const more = docs.slice(index)
-
- /* Render children */
- const children = [
- renderSearchDocument(article, Flag.PARENT | +(!parent && index === 0)),
- ...best.map(section => renderSearchDocument(section, Flag.TEASER)),
- ...more.length ? [
- <details class="md-search-result__more">
- <summary tabIndex={-1}>
- <div>
- {more.length > 0 && more.length === 1
- ? translation("search.result.more.one")
- : translation("search.result.more.other", more.length)
- }
- </div>
- </summary>
- {...more.map(section => renderSearchDocument(section, Flag.TEASER))}
- </details>
- ] : []
- ]
-
- /* Render search result */
- return (
- <li class="md-search-result__item">
- {children}
- </li>
- )
-}
diff --git a/dev/src/templates/assets/javascripts/templates/source/index.tsx b/dev/src/templates/assets/javascripts/templates/source/index.tsx
deleted file mode 100644
index b59a8f67..00000000
--- a/dev/src/templates/assets/javascripts/templates/source/index.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { SourceFacts } from "~/components"
-import { h, round } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render repository facts
- *
- * @param facts - Repository facts
- *
- * @returns Element
- */
-export function renderSourceFacts(facts: SourceFacts): HTMLElement {
- return (
- <ul class="md-source__facts">
- {Object.entries(facts).map(([key, value]) => (
- <li class={`md-source__fact md-source__fact--${key}`}>
- {typeof value === "number" ? round(value) : value}
- </li>
- ))}
- </ul>
- )
-}
diff --git a/dev/src/templates/assets/javascripts/templates/tabbed/index.tsx b/dev/src/templates/assets/javascripts/templates/tabbed/index.tsx
deleted file mode 100644
index b283ac66..00000000
--- a/dev/src/templates/assets/javascripts/templates/tabbed/index.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * Tabbed control type
- */
-type TabbedControlType =
- | "prev"
- | "next"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render control for content tabs
- *
- * @param type - Control type
- *
- * @returns Element
- */
-export function renderTabbedControl(
- type: TabbedControlType
-): HTMLElement {
- const classes = `tabbed-control tabbed-control--${type}`
- return (
- <div class={classes} hidden>
- <button class="tabbed-button" tabIndex={-1} aria-hidden="true"></button>
- </div>
- )
-}
diff --git a/dev/src/templates/assets/javascripts/templates/table/index.tsx b/dev/src/templates/assets/javascripts/templates/table/index.tsx
deleted file mode 100644
index 1fcba152..00000000
--- a/dev/src/templates/assets/javascripts/templates/table/index.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render a table inside a wrapper to improve scrolling on mobile
- *
- * @param table - Table element
- *
- * @returns Element
- */
-export function renderTable(table: HTMLElement): HTMLElement {
- return (
- <div class="md-typeset__scrollwrap">
- <div class="md-typeset__table">
- {table}
- </div>
- </div>
- )
-}
diff --git a/dev/src/templates/assets/javascripts/templates/tooltip/index.tsx b/dev/src/templates/assets/javascripts/templates/tooltip/index.tsx
deleted file mode 100644
index ec583490..00000000
--- a/dev/src/templates/assets/javascripts/templates/tooltip/index.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render a tooltip
- *
- * @param id - Tooltip identifier
- *
- * @returns Element
- */
-export function renderTooltip(id?: string): HTMLElement {
- return (
- <div class="md-tooltip" id={id}>
- <div class="md-tooltip__inner md-typeset"></div>
- </div>
- )
-}
diff --git a/dev/src/templates/assets/javascripts/templates/version/index.tsx b/dev/src/templates/assets/javascripts/templates/version/index.tsx
deleted file mode 100644
index 4aff7aa7..00000000
--- a/dev/src/templates/assets/javascripts/templates/version/index.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { configuration, translation } from "~/_"
-import { h } from "~/utilities"
-
-/* ----------------------------------------------------------------------------
- * Types
- * ------------------------------------------------------------------------- */
-
-/**
- * Version
- */
-export interface Version {
- version: string /* Version identifier */
- title: string /* Version title */
- aliases: string[] /* Version aliases */
-}
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render a version
- *
- * @param version - Version
- *
- * @returns Element
- */
-function renderVersion(version: Version): HTMLElement {
- const config = configuration()
-
- /* Ensure trailing slash - see https://bit.ly/3rL5u3f */
- const url = new URL(`../${version.version}/`, config.base)
- return (
- <li class="md-version__item">
- <a href={`${url}`} class="md-version__link">
- {version.title}
- </a>
- </li>
- )
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Render a version selector
- *
- * @param versions - Versions
- * @param active - Active version
- *
- * @returns Element
- */
-export function renderVersionSelector(
- versions: Version[], active: Version
-): HTMLElement {
- return (
- <div class="md-version">
- <button
- class="md-version__current"
- aria-label={translation("select.version")}
- >
- {active.title}
- </button>
- <ul class="md-version__list">
- {versions.map(renderVersion)}
- </ul>
- </div>
- )
-}
diff --git a/dev/src/templates/assets/javascripts/utilities/h/index.ts b/dev/src/templates/assets/javascripts/utilities/h/index.ts
deleted file mode 100644
index 08d809f1..00000000
--- a/dev/src/templates/assets/javascripts/utilities/h/index.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import { JSX as JSXInternal } from "preact"
-
-/* ----------------------------------------------------------------------------
- * Helper types
- * ------------------------------------------------------------------------- */
-
-/**
- * HTML attributes
- */
-type Attributes =
- & JSXInternal.HTMLAttributes
- & JSXInternal.SVGAttributes
- & Record<string, any>
-
-/**
- * Child element
- */
-type Child =
- | ChildNode
- | HTMLElement
- | Text
- | string
- | number
-
-/* ----------------------------------------------------------------------------
- * Helper functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Append a child node to an element
- *
- * @param el - Element
- * @param child - Child node(s)
- */
-function appendChild(el: HTMLElement, child: Child | Child[]): void {
-
- /* Handle primitive types (including raw HTML) */
- if (typeof child === "string" || typeof child === "number") {
- el.innerHTML += child.toString()
-
- /* Handle nodes */
- } else if (child instanceof Node) {
- el.appendChild(child)
-
- /* Handle nested children */
- } else if (Array.isArray(child)) {
- for (const node of child)
- appendChild(el, node)
- }
-}
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * JSX factory
- *
- * @template T - Element type
- *
- * @param tag - HTML tag
- * @param attributes - HTML attributes
- * @param children - Child elements
- *
- * @returns Element
- */
-export function h<T extends keyof HTMLElementTagNameMap>(
- tag: T, attributes?: Attributes | null, ...children: Child[]
-): HTMLElementTagNameMap[T]
-
-export function h<T extends h.JSX.Element>(
- tag: string, attributes?: Attributes | null, ...children: Child[]
-): T
-
-export function h<T extends h.JSX.Element>(
- tag: string, attributes?: Attributes | null, ...children: Child[]
-): T {
- const el = document.createElement(tag)
-
- /* Set attributes, if any */
- if (attributes)
- for (const attr of Object.keys(attributes)) {
- if (typeof attributes[attr] === "undefined")
- continue
-
- /* Set default attribute or boolean */
- if (typeof attributes[attr] !== "boolean")
- el.setAttribute(attr, attributes[attr])
- else
- el.setAttribute(attr, "")
- }
-
- /* Append child nodes */
- for (const child of children)
- appendChild(el, child)
-
- /* Return element */
- return el as T
-}
-
-/* ----------------------------------------------------------------------------
- * Namespace
- * ------------------------------------------------------------------------- */
-
-export declare namespace h {
- namespace JSX {
- type Element = HTMLElement
- type IntrinsicElements = JSXInternal.IntrinsicElements
- }
-}
diff --git a/dev/src/templates/assets/javascripts/utilities/index.ts b/dev/src/templates/assets/javascripts/utilities/index.ts
deleted file mode 100644
index 42886e0b..00000000
--- a/dev/src/templates/assets/javascripts/utilities/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-export * from "./h"
-export * from "./round"
diff --git a/dev/src/templates/assets/javascripts/utilities/round/index.ts b/dev/src/templates/assets/javascripts/utilities/round/index.ts
deleted file mode 100644
index 3e6bf91a..00000000
--- a/dev/src/templates/assets/javascripts/utilities/round/index.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/* ----------------------------------------------------------------------------
- * Functions
- * ------------------------------------------------------------------------- */
-
-/**
- * Round a number for display with repository facts
- *
- * This is a reverse-engineered version of GitHub's weird rounding algorithm
- * for stars, forks and all other numbers. While all numbers below `1,000` are
- * returned as-is, bigger numbers are converted to fixed numbers:
- *
- * - `1,049` => `1k`
- * - `1,050` => `1.1k`
- * - `1,949` => `1.9k`
- * - `1,950` => `2k`
- *
- * @param value - Original value
- *
- * @returns Rounded value
- */
-export function round(value: number): string {
- if (value > 999) {
- const digits = +((value - 950) % 1000 > 99)
- return `${((value + 0.000001) / 1000).toFixed(digits)}k`
- } else {
- return value.toString()
- }
-}
diff --git a/dev/src/material/templates/assets/javascripts/workers/search.f886a092.min.js b/dev/src/templates/assets/javascripts/workers/search.f886a092.min.js
index 283b855c..283b855c 100644
--- a/dev/src/material/templates/assets/javascripts/workers/search.f886a092.min.js
+++ b/dev/src/templates/assets/javascripts/workers/search.f886a092.min.js
diff --git a/dev/src/material/templates/assets/javascripts/workers/search.f886a092.min.js.map b/dev/src/templates/assets/javascripts/workers/search.f886a092.min.js.map
index 9115984a..9115984a 100644
--- a/dev/src/material/templates/assets/javascripts/workers/search.f886a092.min.js.map
+++ b/dev/src/templates/assets/javascripts/workers/search.f886a092.min.js.map
diff --git a/dev/src/templates/assets/javascripts/workers/search.ts b/dev/src/templates/assets/javascripts/workers/search.ts
deleted file mode 100644
index e995b1ff..00000000
--- a/dev/src/templates/assets/javascripts/workers/search.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-import "~/integrations/search/worker/main"
diff --git a/dev/src/templates/assets/stylesheets/_config.scss b/dev/src/templates/assets/stylesheets/_config.scss
deleted file mode 100644
index e64b8e29..00000000
--- a/dev/src/templates/assets/stylesheets/_config.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Variables: breakpoints
-// ----------------------------------------------------------------------------
-
-// Device-specific breakpoints
-$break-devices: (
- mobile: (
- portrait: px2em(220px) px2em(479.75px),
- landscape: px2em(480px) px2em(719.75px)
- ),
- tablet: (
- portrait: px2em(720px) px2em(959.75px),
- landscape: px2em(960px) px2em(1219.75px)
- ),
- screen: (
- small: px2em(1220px) px2em(1599.75px),
- medium: px2em(1600px) px2em(1999.75px),
- large: px2em(2000px)
- )
-);
diff --git a/dev/src/material/templates/assets/stylesheets/main.bd3936ea.min.css b/dev/src/templates/assets/stylesheets/main.bd3936ea.min.css
index d533893c..d533893c 100644
--- a/dev/src/material/templates/assets/stylesheets/main.bd3936ea.min.css
+++ b/dev/src/templates/assets/stylesheets/main.bd3936ea.min.css
diff --git a/dev/src/material/templates/assets/stylesheets/main.bd3936ea.min.css.map b/dev/src/templates/assets/stylesheets/main.bd3936ea.min.css.map
index 990beedf..990beedf 100644
--- a/dev/src/material/templates/assets/stylesheets/main.bd3936ea.min.css.map
+++ b/dev/src/templates/assets/stylesheets/main.bd3936ea.min.css.map
diff --git a/dev/src/templates/assets/stylesheets/main.scss b/dev/src/templates/assets/stylesheets/main.scss
deleted file mode 100644
index 2b203d3d..00000000
--- a/dev/src/templates/assets/stylesheets/main.scss
+++ /dev/null
@@ -1,86 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Dependencies
-// ----------------------------------------------------------------------------
-
-@import "material-color";
-@import "material-shadows";
-
-// ----------------------------------------------------------------------------
-// Local imports
-// ----------------------------------------------------------------------------
-
-@import "utilities/break";
-@import "utilities/convert";
-
-@import "config";
-
-@import "main/resets";
-@import "main/colors";
-@import "main/icons";
-@import "main/typeset";
-
-@import "main/components/author";
-@import "main/components/banner";
-@import "main/components/base";
-@import "main/components/clipboard";
-@import "main/components/consent";
-@import "main/components/content";
-@import "main/components/dialog";
-@import "main/components/feedback";
-@import "main/components/footer";
-@import "main/components/form";
-@import "main/components/header";
-@import "main/components/meta";
-@import "main/components/nav";
-@import "main/components/pagination";
-@import "main/components/post";
-@import "main/components/progress";
-@import "main/components/search";
-@import "main/components/select";
-@import "main/components/sidebar";
-@import "main/components/source";
-@import "main/components/status";
-@import "main/components/tabs";
-@import "main/components/tag";
-@import "main/components/tooltip";
-@import "main/components/top";
-@import "main/components/version";
-
-@import "main/extensions/markdown/admonition";
-@import "main/extensions/markdown/footnotes";
-@import "main/extensions/markdown/toc";
-
-@import "main/extensions/pymdownx/arithmatex";
-@import "main/extensions/pymdownx/critic";
-@import "main/extensions/pymdownx/details";
-@import "main/extensions/pymdownx/emoji";
-@import "main/extensions/pymdownx/highlight";
-@import "main/extensions/pymdownx/keys";
-@import "main/extensions/pymdownx/tabbed";
-@import "main/extensions/pymdownx/tasklist";
-
-@import "main/integrations/mermaid";
-
-@import "main/modifiers";
diff --git a/dev/src/templates/assets/stylesheets/main/_colors.scss b/dev/src/templates/assets/stylesheets/main/_colors.scss
deleted file mode 100644
index 68969fe9..00000000
--- a/dev/src/templates/assets/stylesheets/main/_colors.scss
+++ /dev/null
@@ -1,153 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Color variables
-:root {
- @extend %root;
-
- // Primary color shades
- --md-primary-fg-color: hsla(#{hex2hsl($clr-indigo-500)}, 1);
- --md-primary-fg-color--light: hsla(#{hex2hsl($clr-indigo-400)}, 1);
- --md-primary-fg-color--dark: hsla(#{hex2hsl($clr-indigo-700)}, 1);
- --md-primary-bg-color: hsla(0, 0%, 100%, 1);
- --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);
-
- // Accent color shades
- --md-accent-fg-color: hsla(#{hex2hsl($clr-indigo-a200)}, 1);
- --md-accent-fg-color--transparent: hsla(#{hex2hsl($clr-indigo-a200)}, 0.1);
- --md-accent-bg-color: hsla(0, 0%, 100%, 1);
- --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);
-}
-
-// ----------------------------------------------------------------------------
-
-// Allow to explicitly use color schemes in nested content
-[data-md-color-scheme="default"] {
- @extend %root;
-
- // Indicate that the site is rendered with a light color scheme
- color-scheme: light;
-
- // Hide images for dark mode
- img[src$="#only-dark"],
- img[src$="#gh-dark-mode-only"] {
- display: none;
- }
-}
-
-// ----------------------------------------------------------------------------
-// Placeholders
-// ----------------------------------------------------------------------------
-
-// Default theme, i.e. light mode
-%root {
-
- // Color hue in the range [0,360] - change this variable to alter the tone
- // of the theme, e.g. to make it more redish or greenish
- --md-hue: 225deg;
-
- // Default color shades
- --md-default-fg-color: hsla(0, 0%, 0%, 0.87);
- --md-default-fg-color--light: hsla(0, 0%, 0%, 0.54);
- --md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.32);
- --md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07);
- --md-default-bg-color: hsla(0, 0%, 100%, 1);
- --md-default-bg-color--light: hsla(0, 0%, 100%, 0.7);
- --md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3);
- --md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12);
-
- // Code color shades
- --md-code-fg-color: hsla(200, 18%, 26%, 1);
- --md-code-bg-color: hsla(200, 0%, 96%, 1);
-
- // Code highlighting color shades
- --md-code-hl-color: hsla(#{hex2hsl($clr-blue-a200)}, 1);
- --md-code-hl-color--light: hsla(#{hex2hsl($clr-blue-a200)}, 0.1);
- --md-code-hl-number-color: hsla(0, 67%, 50%, 1);
- --md-code-hl-special-color: hsla(340, 83%, 47%, 1);
- --md-code-hl-function-color: hsla(291, 45%, 50%, 1);
- --md-code-hl-constant-color: hsla(250, 63%, 60%, 1);
- --md-code-hl-keyword-color: hsla(219, 54%, 51%, 1);
- --md-code-hl-string-color: hsla(150, 63%, 30%, 1);
- --md-code-hl-name-color: var(--md-code-fg-color);
- --md-code-hl-operator-color: var(--md-default-fg-color--light);
- --md-code-hl-punctuation-color: var(--md-default-fg-color--light);
- --md-code-hl-comment-color: var(--md-default-fg-color--light);
- --md-code-hl-generic-color: var(--md-default-fg-color--light);
- --md-code-hl-variable-color: var(--md-default-fg-color--light);
-
- // Typeset color shades
- --md-typeset-color: var(--md-default-fg-color);
-
- // Typeset `a` color shades
- --md-typeset-a-color: var(--md-primary-fg-color);
-
- // Typeset `del` and `ins` color shades
- --md-typeset-del-color: hsla(6, 90%, 60%, 0.15);
- --md-typeset-ins-color: hsla(150, 90%, 44%, 0.15);
-
- // Typeset `kbd` color shades
- --md-typeset-kbd-color: hsla(0, 0%, 98%, 1);
- --md-typeset-kbd-accent-color: hsla(0, 100%, 100%, 1);
- --md-typeset-kbd-border-color: hsla(0, 0%, 72%, 1);
-
- // Typeset `mark` color shades
- --md-typeset-mark-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5);
-
- // Typeset `table` color shades
- --md-typeset-table-color: hsla(0, 0%, 0%, 0.12);
- --md-typeset-table-color--light: hsla(0, 0%, 0%, 0.035);
-
- // Admonition color shades
- --md-admonition-fg-color: var(--md-default-fg-color);
- --md-admonition-bg-color: var(--md-default-bg-color);
-
- // Warning color shades
- --md-warning-fg-color: hsla(0, 0%, 0%, 0.87);
- --md-warning-bg-color: hsla(60, 100%, 80%, 1);
-
- // Footer color shades
- --md-footer-fg-color: hsla(0, 0%, 100%, 1);
- --md-footer-fg-color--light: hsla(0, 0%, 100%, 0.7);
- --md-footer-fg-color--lighter: hsla(0, 0%, 100%, 0.45);
- --md-footer-bg-color: hsla(0, 0%, 0%, 0.87);
- --md-footer-bg-color--dark: hsla(0, 0%, 0%, 0.32);
-
- // Shadow depth 1
- --md-shadow-z1:
- 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.05),
- 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.1);
-
- // Shadow depth 2
- --md-shadow-z2:
- 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.1),
- 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.25);
-
- // Shadow depth 3
- --md-shadow-z3:
- 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2),
- 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.35);
-}
diff --git a/dev/src/templates/assets/stylesheets/main/_icons.scss b/dev/src/templates/assets/stylesheets/main/_icons.scss
deleted file mode 100644
index 9853e93d..00000000
--- a/dev/src/templates/assets/stylesheets/main/_icons.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Icon
-.md-icon {
-
- // SVG defaults
- svg {
- display: block;
- width: px2rem(24px);
- height: px2rem(24px);
- fill: currentcolor;
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/_modifiers.scss b/dev/src/templates/assets/stylesheets/main/_modifiers.scss
deleted file mode 100644
index 4b2b046a..00000000
--- a/dev/src/templates/assets/stylesheets/main/_modifiers.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // [tablet +]: Allow for rendering content as sidebars
- @include break-from-device(tablet) {
-
- // Modifier to float block elements
- .inline {
- float: inline-start;
- width: px2rem(234px);
- margin-inline-end: px2rem(16px);
- margin-top: 0;
- margin-bottom: px2rem(16px);
-
- // Modifier to move to end (ltr: right, rtl: left)
- &.end {
- float: inline-end;
- margin-inline: px2rem(16px) 0;
- }
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/_resets.scss b/dev/src/templates/assets/stylesheets/main/_resets.scss
deleted file mode 100644
index c6fc4b28..00000000
--- a/dev/src/templates/assets/stylesheets/main/_resets.scss
+++ /dev/null
@@ -1,118 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Enforce correct box model and prevent adjustments of font size after
-// orientation changes in IE and iOS
-html {
- box-sizing: border-box;
- text-size-adjust: none;
-}
-
-// All elements shall inherit the document default
-*,
-*::before,
-*::after {
- box-sizing: inherit;
-
- // [reduced motion]: Disable all transitions
- @media (prefers-reduced-motion) {
- transition: none !important; // stylelint-disable-line
- }
-}
-
-// Remove margin in all browsers
-body {
- margin: 0;
-}
-
-// Reset tap outlines on iOS and Android
-a,
-button,
-label,
-input {
- -webkit-tap-highlight-color: transparent;
-}
-
-// Reset link styles
-a {
- color: inherit;
- text-decoration: none;
-}
-
-// Normalize horizontal separator styles
-hr {
- box-sizing: content-box;
- display: block;
- height: px2rem(1px);
- padding: 0;
- overflow: visible;
- border: 0;
-}
-
-// Normalize font-size in all browsers
-small {
- font-size: 80%;
-}
-
-// Prevent subscript and superscript from affecting line-height
-sub,
-sup {
- line-height: 1em;
-}
-
-// Remove border on image
-img {
- border-style: none;
-}
-
-// Reset table styles
-table {
- border-spacing: 0;
- border-collapse: separate;
-}
-
-// Reset table cell styles
-td,
-th {
- font-weight: 400;
- vertical-align: top;
-}
-
-// Reset button styles
-button {
- padding: 0;
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- background: transparent;
- border: 0;
-}
-
-// Reset input styles
-input {
- border: 0;
- outline: none;
-}
diff --git a/dev/src/templates/assets/stylesheets/main/_typeset.scss b/dev/src/templates/assets/stylesheets/main/_typeset.scss
deleted file mode 100644
index 1c322859..00000000
--- a/dev/src/templates/assets/stylesheets/main/_typeset.scss
+++ /dev/null
@@ -1,603 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules: font definitions
-// ----------------------------------------------------------------------------
-
-// Enable font-smoothing in Webkit and FF
-body {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-
- // Font with fallback for body copy
- --md-text-font-family:
- var(--md-text-font, _),
- -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif;
-
- // Font with fallback for code
- --md-code-font-family:
- var(--md-code-font, _),
- SFMono-Regular, Consolas, Menlo, monospace;
-}
-
-// Define default fonts
-body,
-input,
-aside {
- font-family: var(--md-text-font-family);
- font-feature-settings: "kern", "liga";
- color: var(--md-typeset-color);
-}
-
-// Define monospaced fonts
-code,
-pre,
-kbd {
- font-family: var(--md-code-font-family);
- font-feature-settings: "kern";
-}
-
-// ----------------------------------------------------------------------------
-// Rules: typesetted content
-// ----------------------------------------------------------------------------
-
-// General variables
-:root {
- --md-typeset-table-sort-icon: svg-load("material/sort.svg");
- --md-typeset-table-sort-icon--asc: svg-load("material/sort-ascending.svg");
- --md-typeset-table-sort-icon--desc: svg-load("material/sort-descending.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Content that is typeset - if possible, all margins, paddings and font sizes
-// should be set in ems, so nested blocks (e.g. admonitions) render correctly.
-.md-typeset {
- font-size: px2rem(16px);
- line-height: 1.6;
- color-adjust: exact;
-
- // [print]: We'll use a smaller `font-size` for printing, so code examples
- // don't break too early, and `16px` looks too big anyway.
- @media print {
- font-size: px2rem(13.6px);
- }
-
- // Default spacing
- ul,
- ol,
- dl,
- figure,
- blockquote,
- pre {
- margin-block: 1em;
- }
-
- // Headline on level 1
- h1 {
- margin: 0 0 px2em(40px, 32px);
- font-size: px2em(32px);
- font-weight: 300;
- line-height: 1.3;
- color: var(--md-default-fg-color--light);
- letter-spacing: -0.01em;
- }
-
- // Headline on level 2
- h2 {
- margin: px2em(40px, 25px) 0 px2em(16px, 25px);
- font-size: px2em(25px);
- font-weight: 300;
- line-height: 1.4;
- letter-spacing: -0.01em;
- }
-
- // Headline on level 3
- h3 {
- margin: px2em(32px, 20px) 0 px2em(16px, 20px);
- font-size: px2em(20px);
- font-weight: 400;
- line-height: 1.5;
- letter-spacing: -0.01em;
- }
-
- // Headline on level 3 following level 2
- h2 + h3 {
- margin-top: px2em(16px, 20px);
- }
-
- // Headline on level 4
- h4 {
- margin: px2em(16px) 0;
- font-weight: 700;
- letter-spacing: -0.01em;
- }
-
- // Headline on level 5-6
- h5,
- h6 {
- margin: px2em(16px, 12.8px) 0;
- font-size: px2em(12.8px);
- font-weight: 700;
- color: var(--md-default-fg-color--light);
- letter-spacing: -0.01em;
- }
-
- // Headline on level 5
- h5 {
- text-transform: uppercase;
- }
-
- // Horizontal separator
- hr {
- display: flow-root;
- margin: 1.5em 0;
- border-bottom: px2rem(1px) solid var(--md-default-fg-color--lightest);
- }
-
- // Text link
- a {
- color: var(--md-typeset-a-color);
- word-break: break-word;
-
- // Also enable color transition on pseudo elements
- &,
- &::before {
- transition: color 125ms;
- }
-
- // Text link on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-fg-color);
-
- // Inline code block
- code {
- background-color: var(--md-accent-fg-color--transparent);
- }
- }
-
- // Inline code block
- code {
- color: currentcolor;
- transition: background-color 125ms;
- }
-
- // Show outline for keyboard devices
- &.focus-visible {
- outline-color: var(--md-accent-fg-color);
- outline-offset: px2rem(4px);
- }
- }
-
- // Code block
- code,
- pre,
- kbd {
- font-variant-ligatures: none;
- color: var(--md-code-fg-color);
- direction: ltr;
-
- // [print]: Wrap text and hide scollbars
- @media print {
- white-space: pre-wrap;
- }
- }
-
- // Inline code block
- code {
- padding: 0 px2em(4px, 13.6px);
- font-size: px2em(13.6px);
- word-break: break-word;
- background-color: var(--md-code-bg-color);
- border-radius: px2rem(2px);
- box-decoration-break: clone;
-
- // Hide outline for pointer devices
- &:not(.focus-visible) {
- outline: none;
- -webkit-tap-highlight-color: transparent;
- }
- }
-
- // Unformatted content
- pre {
- position: relative;
- display: flow-root;
- line-height: 1.4;
-
- // Code block
- > code {
- display: block;
- padding: px2em(10.5px, 13.6px) px2em(16px, 13.6px);
- margin: 0;
- overflow: auto;
- word-break: normal;
- touch-action: auto;
- outline-color: var(--md-accent-fg-color);
- box-shadow: none;
- box-decoration-break: slice;
- scrollbar-width: thin;
- scrollbar-color: var(--md-default-fg-color--lighter) transparent;
-
- // Code block on hover
- &:hover {
- scrollbar-color: var(--md-accent-fg-color) transparent;
- }
-
- // Webkit scrollbar
- &::-webkit-scrollbar {
- width: px2rem(4px);
- height: px2rem(4px);
- }
-
- // Webkit scrollbar thumb
- &::-webkit-scrollbar-thumb {
- background-color: var(--md-default-fg-color--lighter);
-
- // Webkit scrollbar thumb on hover
- &:hover {
- background-color: var(--md-accent-fg-color);
- }
- }
- }
- }
-
- // Keyboard key
- kbd {
- display: inline-block;
- padding: 0 px2em(8px, 12px);
- font-size: px2em(12px);
- color: var(--md-default-fg-color);
- word-break: break-word;
- vertical-align: text-top;
- background-color: var(--md-typeset-kbd-color);
- border-radius: px2rem(2px);
- box-shadow:
- 0 px2rem(2px) 0 px2rem(1px) var(--md-typeset-kbd-border-color),
- 0 px2rem(2px) 0 var(--md-typeset-kbd-border-color),
- 0 px2rem(-2px) px2rem(4px) var(--md-typeset-kbd-accent-color) inset;
- }
-
- // Text highlighting marker
- mark {
- color: inherit;
- word-break: break-word;
- background-color: var(--md-typeset-mark-color);
- box-decoration-break: clone;
- }
-
- // Abbreviation
- abbr {
- text-decoration: none;
- cursor: help;
- border-bottom: px2rem(1px) dotted var(--md-default-fg-color--light);
-
- // Show tooltip for touch devices
- @media (hover: none) {
-
- // Tooltip
- &[title]:is(:focus, :hover)::after {
- position: absolute;
- inset-inline: px2rem(16px);
- padding: px2rem(4px) px2rem(6px);
- margin-top: 2em;
- font-size: px2rem(14px);
- color: var(--md-default-bg-color);
- content: attr(title);
- background-color: var(--md-default-fg-color);
- border-radius: px2rem(2px);
- box-shadow: var(--md-shadow-z3);
- }
- }
- }
-
- // Small text
- small {
- opacity: 0.75;
- }
-
- // Superscript and subscript
- sup,
- sub {
- margin-inline-start: px2em(1px, 12.8px);
- }
-
- // Blockquotes, possibly nested
- blockquote {
- padding-inline-start: px2rem(12px);
- margin-inline: 0;
- color: var(--md-default-fg-color--light);
- border-inline-start: px2rem(4px) solid var(--md-default-fg-color--lighter);
- }
-
- // Unordered list
- ul {
- list-style-type: disc;
- }
-
- // Unordered and ordered list
- ul,
- ol {
- padding: 0;
- margin-inline-start: px2em(10px);
-
- // Adjust display mode if not hidden
- &:not([hidden]) {
- display: flow-root;
- }
-
- // Nested ordered list
- ol {
- list-style-type: lower-alpha;
-
- // Triply nested ordered list
- ol {
- list-style-type: lower-roman;
- }
- }
-
- // List element
- li {
- margin-inline-start: px2em(20px);
- margin-bottom: 0.5em;
-
- // Adjust spacing
- p,
- blockquote {
- margin: 0.5em 0;
- }
-
- // Adjust spacing on last child
- &:last-child {
- margin-bottom: 0;
- }
-
- // Nested list
- :is(ul, ol) {
- margin-block: 0.5em;
- margin-inline-start: px2em(10px);
- }
- }
- }
-
- // Definition list
- dd {
- margin-block: 1em 1.5em;
- margin-inline-start: px2em(30px);
- }
-
- // Image or video
- img,
- svg,
- video {
- max-width: 100%;
- height: auto;
- }
-
- // Image
- img {
-
- // Adjust spacing when left-aligned
- &[align="left"] {
- margin: 1em;
- margin-left: 0;
- }
-
- // Adjust spacing when right-aligned
- &[align="right"] {
- margin: 1em;
- margin-right: 0;
- }
-
- // Adjust spacing when sole children
- &[align]:only-child {
- margin-top: 0;
- }
- }
-
- // Figure
- figure {
- display: flow-root;
- width: fit-content;
- max-width: 100%;
- margin: 1em auto;
- text-align: center;
-
- // Figure images
- img {
- display: block;
- }
- }
-
- // Figure caption
- figcaption {
- max-width: px2rem(480px);
- margin: 1em auto;
- font-style: italic;
- }
-
- // Limit width to container
- iframe {
- max-width: 100%;
- }
-
- // Data table
- table:not([class]) {
- display: inline-block;
- max-width: 100%;
- overflow: auto;
- font-size: px2rem(12.8px);
- touch-action: auto;
- background-color: var(--md-default-bg-color);
- border: px2rem(1px) solid var(--md-typeset-table-color);
- border-radius: px2rem(2px);
-
- // [print]: Reset display mode so table header wraps when printing
- @media print {
- display: table;
- }
-
- // Due to margin collapse because of the necessary inline-block hack, we
- // cannot increase the bottom margin on the table, so we just increase the
- // top margin on the following element
- + * {
- margin-top: 1.5em;
- }
-
- // Elements in table heading and cell
- :is(th, td) > * {
-
- // Adjust spacing on first child
- &:first-child {
- margin-top: 0;
- }
-
- // Adjust spacing on last child
- &:last-child {
- margin-bottom: 0;
- }
- }
-
- // Table heading and cell
- :is(th, td):not([align]) {
- text-align: left;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- text-align: right;
- }
- }
-
- // Table heading
- th {
- min-width: px2rem(100px);
- padding: px2em(12px, 12.8px) px2em(16px, 12.8px);
- font-weight: 700;
- vertical-align: top;
- }
-
- // Table cell
- td {
- padding: px2em(12px, 12.8px) px2em(16px, 12.8px);
- vertical-align: top;
- border-top: px2rem(1px) solid var(--md-typeset-table-color);
- }
-
- // Table body row
- tbody tr {
- transition: background-color 125ms;
-
- // Table row on hover
- &:hover {
- background-color: var(--md-typeset-table-color--light);
- box-shadow: 0 px2rem(1px) 0 var(--md-default-bg-color) inset;
- }
- }
-
- // Text link in table
- a {
- word-break: normal;
- }
- }
-
- // Sortable table
- table th[role="columnheader"] {
- cursor: pointer;
-
- // Sort icon
- &::after {
- display: inline-block;
- width: 1.2em;
- height: 1.2em;
- margin-inline-start: 0.5em;
- vertical-align: text-bottom;
- content: "";
- transition: background-color 125ms;
- mask-image: var(--md-typeset-table-sort-icon);
- mask-repeat: no-repeat;
- mask-size: contain;
- }
-
- // Show sort icon on hover
- &:hover::after {
- background-color: var(--md-default-fg-color--lighter);
- }
-
- // Sort ascending icon
- &[aria-sort="ascending"]::after {
- background-color: var(--md-default-fg-color--light);
- mask-image: var(--md-typeset-table-sort-icon--asc);
- }
-
- // Sort descending icon
- &[aria-sort="descending"]::after {
- background-color: var(--md-default-fg-color--light);
- mask-image: var(--md-typeset-table-sort-icon--desc);
- }
- }
-
- // Data table scroll wrapper
- &__scrollwrap {
- margin: 1em px2rem(-16px);
- overflow-x: auto;
- touch-action: auto;
- }
-
- // Data table wrapper
- &__table {
- display: inline-block;
- padding: 0 px2rem(16px);
- margin-bottom: 0.5em;
-
- // [print]: Reset display mode so table header wraps when printing
- @media print {
- display: block;
- }
-
- // Data table
- html & table {
- display: table;
- width: 100%;
- margin: 0;
- overflow: hidden;
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules: top-level
-// ----------------------------------------------------------------------------
-
-// [mobile -]: Align with body copy
-@include break-to-device(mobile) {
-
- // Top-level unformatted content
- .md-content__inner > pre {
- margin: 1em px2rem(-16px);
-
- // Code block
- code {
- border-radius: 0;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_author.scss b/dev/src/templates/assets/stylesheets/main/components/_author.scss
deleted file mode 100644
index 111baf40..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_author.scss
+++ /dev/null
@@ -1,86 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Author, i.e., GitHub user
- .md-author {
- position: relative;
- display: block;
- flex-shrink: 0;
- width: px2rem(32px);
- height: px2rem(32px);
- overflow: hidden;
- transition:
- color 125ms,
- transform 125ms;
-
- // Author image
- img {
- display: block;
- border-radius: 100%;
- }
-
- // More authors
- &--more {
- font-size: px2rem(12px);
- font-weight: 700;
- line-height: px2rem(32px);
- color: var(--md-default-fg-color--lighter);
- text-align: center;
- background: var(--md-default-fg-color--lightest);
- }
-
- // Enlarge image
- &--long {
- width: px2rem(48px);
- height: px2rem(48px);
- }
- }
-
- // Author link
- a.md-author {
- transform: scale(1);
-
- // Author image
- img {
- filter: grayscale(100%) opacity(75%);
- transition: filter 125ms;
- }
-
- // Author on focus/hover
- &:is(:focus, :hover) {
- z-index: 1;
- transform: scale(1.1);
-
- // Author image
- img {
- filter: grayscale(0%);
- }
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_banner.scss b/dev/src/templates/assets/stylesheets/main/components/_banner.scss
deleted file mode 100644
index 8fe08c0f..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_banner.scss
+++ /dev/null
@@ -1,68 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Banner for announcements and warnings
-.md-banner {
- overflow: auto;
- color: var(--md-footer-fg-color);
- background-color: var(--md-footer-bg-color);
-
- // [print]: Hide banner
- @media print {
- display: none;
- }
-
- // Banner with warning
- &--warning {
- color: var(--md-warning-fg-color);
- background-color: var(--md-warning-bg-color);
- }
-
- // Banner wrapper
- &__inner {
- padding: 0 px2rem(16px);
- margin: px2rem(12px) auto;
- font-size: px2rem(14px);
- }
-
- // Banner button
- &__button {
- float: inline-end;
- color: inherit;
- cursor: pointer;
- transition: opacity 250ms;
-
- // [no-js]: Hide button
- .no-js & {
- display: none;
- }
-
- // Button on hover
- &:hover {
- opacity: 0.7;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_base.scss b/dev/src/templates/assets/stylesheets/main/components/_base.scss
deleted file mode 100644
index 33f834ed..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_base.scss
+++ /dev/null
@@ -1,182 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules: base grid and containers
-// ----------------------------------------------------------------------------
-
-// Stretch container to viewport and set base `font-size`
-html {
- height: 100%;
- overflow-x: hidden;
- // Hack: normally, we would set the base `font-size` to `62.5%`, so we can
- // base all calculations on `10px`, but Chromium and Chrome define a minimal
- // `font-size` of `12px` if the system language is set to Chinese. For this
- // reason we just double the `font-size` and set it to `20px`.
- //
- // See https://github.com/squidfunk/mkdocs-material/issues/911
- font-size: 125%;
-
- // [screen medium +]: Set base `font-size` to `11px`
- @include break-from-device(screen medium) {
- font-size: 137.5%;
- }
-
- // [screen large +]: Set base `font-size` to `12px`
- @include break-from-device(screen large) {
- font-size: 150%;
- }
-}
-
-// Stretch body to container - flexbox is used, so the footer will always be
-// aligned to the bottom of the viewport
-body {
- position: relative;
- display: flex;
- flex-direction: column;
- width: 100%;
- min-height: 100%;
- // Hack: reset `font-size` to `10px`, so the spacing for all inline elements
- // is correct again. Otherwise the spacing would be based on `20px`.
- font-size: px2rem(10px);
- background-color: var(--md-default-bg-color);
-
- // [print]: Omit flexbox layout due to a Firefox bug (https://mzl.la/39DgR3m)
- @media print {
- display: block;
- }
-
- // Body in locked state
- &[data-md-scrolllock] {
-
- // [tablet portrait -]: Omit scroll bubbling
- @include break-to-device(tablet portrait) {
- position: fixed;
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Grid container - this class is applied to wrapper elements within the
-// header, content area and footer, and makes sure that their width is limited
-// to `1220px`, and they are rendered centered if the screen is larger.
-.md-grid {
- max-width: px2rem(1220px);
- margin-inline: auto;
-}
-
-// Main container
-.md-container {
- display: flex;
- flex-direction: column;
- flex-grow: 1;
-
- // [print]: Omit flexbox layout due to a Firefox bug (https://mzl.la/39DgR3m)
- @media print {
- display: block;
- }
-}
-
-// Main area - stretch to remaining space of container
-.md-main {
- flex-grow: 1;
-
- // Main area wrapper
- &__inner {
- display: flex;
- height: 100%;
- margin-top: px2rem(24px + 6px);
- }
-}
-
-// Add ellipsis in case of overflowing text
-.md-ellipsis {
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-// ----------------------------------------------------------------------------
-// Rules: navigational elements
-// ----------------------------------------------------------------------------
-
-// Toggle - this class is applied to checkbox elements, which are used to
-// implement the CSS-only drawer and navigation, as well as the search
-.md-toggle {
- display: none;
-}
-
-// Option - this class is applied to radio elements, which are used to
-// implement the color palette toggle
-.md-option {
- position: absolute;
- width: 0;
- height: 0;
- opacity: 0;
-
- // Option label for checked radio button
- &:checked + label:not([hidden]) {
- display: block;
- }
-
- // Show outline for keyboard devices
- &.focus-visible + label {
- outline-style: auto;
- outline-color: var(--md-accent-fg-color);
- }
-}
-
-// Skip link
-.md-skip {
- position: fixed;
- // Hack: if we don't set the negative `z-index`, the skip link will force the
- // creation of new layers when code blocks are near the header on scrolling
- z-index: -1;
- padding: px2rem(6px) px2rem(10px);
- margin: px2rem(10px);
- font-size: px2rem(12.8px);
- color: var(--md-default-bg-color);
- background-color: var(--md-default-fg-color);
- border-radius: px2rem(2px);
- outline-color: var(--md-accent-fg-color);
- opacity: 0;
- transform: translateY(px2rem(8px));
-
- // Show skip link on focus
- &:focus {
- z-index: 10;
- opacity: 1;
- transition:
- transform 250ms cubic-bezier(0.4, 0, 0.2, 1),
- opacity 175ms 75ms;
- transform: translateY(0);
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules: print styles
-// ----------------------------------------------------------------------------
-
-// Add margins to page
-@page {
- margin: 25mm;
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_clipboard.scss b/dev/src/templates/assets/stylesheets/main/components/_clipboard.scss
deleted file mode 100644
index c07c9c67..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_clipboard.scss
+++ /dev/null
@@ -1,102 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Clipboard button variables
-:root {
- --md-clipboard-icon: svg-load("material/content-copy.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Clipboard button
-.md-clipboard {
- position: absolute;
- top: px2em(8px);
- right: px2em(8px);
- z-index: 1;
- width: px2em(24px);
- height: px2em(24px);
- color: var(--md-default-fg-color--lightest);
- cursor: pointer;
- border-radius: px2rem(2px);
- outline-color: var(--md-accent-fg-color);
- outline-offset: px2rem(2px);
- transition: color 250ms;
-
- // [print]: Hide button
- @media print {
- display: none;
- }
-
- // Hide outline for pointer devices
- &:not(.focus-visible) {
- outline: none;
- -webkit-tap-highlight-color: transparent;
- }
-
- // Darken color on code block hover
- :hover > & {
- color: var(--md-default-fg-color--light);
- }
-
- // Button on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-fg-color);
- }
-
- // Button icon - the width and height are defined in `em`, so the size is
- // automatically adjusted for nested code blocks (e.g. in admonitions)
- &::after {
- display: block;
- width: px2em(18px);
- height: px2em(18px);
- margin: 0 auto;
- content: "";
- background-color: currentcolor;
- mask-image: var(--md-clipboard-icon);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
-
- // Inline clipboard button
- &--inline {
- cursor: pointer;
-
- // Code block
- code {
- transition:
- color 250ms,
- background-color 250ms;
- }
-
- // Code block on focus/hover
- &:is(:focus, :hover) code {
- color: var(--md-accent-fg-color);
- background-color: var(--md-accent-fg-color--transparent);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_consent.scss b/dev/src/templates/assets/stylesheets/main/components/_consent.scss
deleted file mode 100644
index 5502460c..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_consent.scss
+++ /dev/null
@@ -1,127 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Keyframes
-// ----------------------------------------------------------------------------
-
-// Show consent
-@keyframes consent {
- 0% {
- opacity: 0;
- transform: translateY(100%);
- }
-
- 100% {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-// Show consent overlay
-@keyframes overlay {
- 0% {
- opacity: 0;
- }
-
- 100% {
- opacity: 1;
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Consent
-.md-consent {
-
- // Consent overlay
- &__overlay {
- position: fixed;
- top: 0;
- z-index: 5;
- width: 100%;
- height: 100%;
- background-color: hsla(0, 0%, 0%, 0.54);
- opacity: 1;
- backdrop-filter: blur(px2rem(2px));
- animation: overlay 250ms both;
- }
-
- // Consent wrapper
- &__inner {
- position: fixed;
- bottom: 0;
- z-index: 5;
- width: 100%;
- max-height: 100%;
- padding: 0;
- overflow: auto;
- background-color: var(--md-default-bg-color);
- border: 0;
- border-radius: px2rem(2px);
- box-shadow:
- 0 0 px2rem(4px) rgba(0, 0, 0, 0.1),
- 0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0.2);
- animation: consent 500ms cubic-bezier(0.1, 0.7, 0.1, 1) both;
- }
-
- // Consent form
- &__form {
- padding: px2rem(16px);
- }
-
- // Consent settings
- &__settings {
- display: none;
- margin: 1em 0;
-
- // Show settings
- input:checked + & {
- display: block;
- }
- }
-
- // Consent controls
- &__controls {
- margin-bottom: px2rem(16px);
-
- // Consent control button
- .md-typeset & .md-button {
- display: inline;
-
- // [tablet +]: Align buttons horizontally
- @include break-to-device(mobile) {
- display: block;
- width: 100%;
- margin-top: px2rem(8px);
- text-align: center;
- }
- }
- }
-
- // Ensure users realize that labels are clickaböe
- label {
- cursor: pointer;
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_content.scss b/dev/src/templates/assets/stylesheets/main/components/_content.scss
deleted file mode 100644
index 7c945749..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_content.scss
+++ /dev/null
@@ -1,97 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Content area
-.md-content {
- flex-grow: 1;
- // Hack: we must use `min-width: 0`, so the content area is capped by the
- // dimensions of its parent. Otherwise, long code blocks might lead to a
- // wider content area which will overflow. See https://bit.ly/3bP3f8k
- min-width: 0;
-
- // Content wrapper
- &__inner {
- padding-top: px2rem(12px);
- margin: 0 px2rem(16px) px2rem(24px);
-
- // [screen +]: Adjust spacing between content area and sidebars
- @include break-from-device(screen) {
-
- // Sidebar with navigation is visible
- .md-sidebar--primary:not([hidden]) ~ .md-content > & {
- margin-inline-start: px2rem(24px);
- }
-
- // Sidebar with table of contents is visible
- .md-sidebar--secondary:not([hidden]) ~ .md-content > & {
- margin-inline-end: px2rem(24px);
- }
- }
-
- // Hack: add pseudo element for spacing, as the overflow of the content
- // container may not be hidden due to an imminent offset error on targets
- &::before {
- display: block;
- height: px2rem(8px);
- content: "";
- }
-
- // Adjust spacing on last child
- > :last-child {
- margin-bottom: 0;
- }
- }
-
- // Button inside of the content area - these buttons are meant for actions on
- // a document-level, i.e. linking to related source code files, printing etc.
- &__button {
- float: inline-end;
- padding: 0;
- margin: px2rem(8px) 0;
- margin-inline-start: px2rem(8px);
-
- // [print]: Hide buttons
- @media print {
- display: none;
- }
-
- // Adjust default link color for icons
- .md-typeset & {
- color: var(--md-default-fg-color--lighter);
- }
-
- // Align with body copy located next to icon
- svg {
- display: inline;
- vertical-align: top;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: scaleX(-1);
- }
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_dialog.scss b/dev/src/templates/assets/stylesheets/main/components/_dialog.scss
deleted file mode 100644
index 16782ede..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_dialog.scss
+++ /dev/null
@@ -1,65 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Dialog
-.md-dialog {
- position: fixed;
- bottom: px2rem(16px);
- z-index: 4;
- min-width: px2rem(222px);
- padding: px2rem(8px) px2rem(12px);
- pointer-events: none;
- background-color: var(--md-default-fg-color);
- border-radius: px2rem(2px);
- box-shadow: var(--md-shadow-z3);
- opacity: 0;
- transition:
- transform 0ms 400ms,
- opacity 400ms;
- transform: translateY(100%);
- inset-inline-end: px2rem(16px);
-
- // [print]: Hide dialog
- @media print {
- display: none;
- }
-
- // Active dialog
- &--active {
- pointer-events: initial;
- opacity: 1;
- transition:
- transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1),
- opacity 400ms;
- transform: translateY(0);
- }
-
- // Dialog wrapper
- &__inner {
- font-size: px2rem(14px);
- color: var(--md-default-bg-color);
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_feedback.scss b/dev/src/templates/assets/stylesheets/main/components/_feedback.scss
deleted file mode 100644
index bbcd00e9..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_feedback.scss
+++ /dev/null
@@ -1,110 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Was this page helpful?
-.md-feedback {
- margin: 2em 0 1em;
- text-align: center;
-
- // Feedback fieldset
- fieldset {
- padding: 0;
- margin: 0;
- border: none;
- }
-
- // Feedback title
- &__title {
- margin: 1em auto;
- font-weight: 700;
- }
-
- // Feedback wrapper
- &__inner {
- position: relative;
- }
-
- // Feedback list
- &__list {
- position: relative;
- display: flex;
- flex-wrap: wrap;
- align-content: baseline;
- justify-content: center;
-
- // Feedback icon on hover
- &:hover .md-icon:not(:disabled) {
- color: var(--md-default-fg-color--lighter);
- }
-
- // Adjust height after submission
- :disabled & {
- min-height: px2rem(36px);
- }
- }
-
- // Feedback icon
- &__icon {
- flex-shrink: 0;
- margin: 0 px2rem(2px);
- color: var(--md-default-fg-color--light);
- cursor: pointer;
- transition: color 125ms;
-
- // Feedback icon on hover
- &:not(:disabled).md-icon:hover {
- color: var(--md-accent-fg-color);
- }
-
- // Feedback icon after submit
- &:disabled {
- color: var(--md-default-fg-color--lightest);
- pointer-events: none;
- }
- }
-
- // Feedback note
- &__note {
- position: relative;
- opacity: 0;
- transition:
- transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),
- opacity 150ms;
- transform: translateY(px2rem(8px));
-
- // Feedback note value
- > * {
- max-width: px2rem(320px);
- margin: 0 auto;
- }
-
- // Show after submission
- :disabled & {
- opacity: 1;
- transform: translateY(0);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_footer.scss b/dev/src/templates/assets/stylesheets/main/components/_footer.scss
deleted file mode 100644
index 9fabc05b..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_footer.scss
+++ /dev/null
@@ -1,201 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Footer
-.md-footer {
- color: var(--md-footer-fg-color);
- background-color: var(--md-footer-bg-color);
-
- // [print]: Hide footer
- @media print {
- display: none;
- }
-
- // Footer wrapper
- &__inner {
- justify-content: space-between;
- padding: px2rem(4px);
- overflow: auto;
-
- // Footer is visible
- &:not([hidden]) {
- display: flex;
- }
- }
-
- // Footer link to previous and next page
- &__link {
- display: flex;
- // Hack: some browsers induce ellipsis on flex children that are set to
- // `overflow: hidden` and `text-overflow: ellipsis`. Enforcing growth by
- // a tiny factor seems to get rid of the ellipsis and renders the text as
- // it should - see https://bit.ly/2ZUCXQ8
- flex-grow: 0.01;
- align-items: end;
- max-width: 100%;
- margin-block: px2rem(20px) px2rem(8px);
- overflow: hidden;
- outline-color: var(--md-accent-fg-color);
- transition: opacity 250ms;
-
- // Footer link on focus/hover
- &:is(:focus, :hover) {
- opacity: 0.7;
- }
-
- // Adjust for right-to-left languages
- [dir="rtl"] & svg {
- transform: scaleX(-1);
- }
-
- // [mobile -]: Adjust width to 25/75 and hide title
- @include break-to-device(mobile) {
-
- // Footer link to previous page
- &--prev {
- flex-shrink: 0;
-
- // Hide footer title
- .md-footer__title {
- display: none;
- }
- }
- }
-
- // Footer link to next page
- &--next {
- margin-inline-start: auto;
- text-align: right;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- text-align: left;
- }
- }
- }
-
- // Footer title
- &__title {
- flex-grow: 1;
- max-width: calc(100% - #{px2rem(48px)});
- padding: 0 px2rem(20px);
- margin-bottom: px2rem(14px);
- font-size: px2rem(18px);
- white-space: nowrap;
- }
-
- // Footer link button
- &__button {
- padding: px2rem(8px);
- margin: px2rem(4px);
- }
-
- // Footer link direction (i.e. prev and next)
- &__direction {
- font-size: px2rem(12.8px);
- opacity: 0.7;
- }
-}
-
-// Footer metadata
-.md-footer-meta {
- background-color: var(--md-footer-bg-color--dark);
-
- // Footer metadata wrapper
- &__inner {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- padding: px2rem(4px);
- }
-
- // Lighten color for non-hovered text links
- html &.md-typeset a {
- color: var(--md-footer-fg-color--light);
-
- // Text link on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-footer-fg-color);
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Copyright and theme information
-.md-copyright {
- width: 100%;
- padding: px2rem(8px) 0;
- margin: auto px2rem(12px);
- font-size: px2rem(12.8px);
- color: var(--md-footer-fg-color--lighter);
-
- // [tablet portrait +]: Show copyright and social links in one line
- @include break-from-device(tablet portrait) {
- width: auto;
- }
-
- // Footer copyright highlight - this is the upper part of the copyright and
- // theme information, which will include a darker color than the theme link
- &__highlight {
- color: var(--md-footer-fg-color--light);
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Social links
-.md-social {
- display: inline-flex;
- gap: px2rem(4px);
- padding: px2rem(4px) 0 px2rem(12px);
- margin: 0 px2rem(8px);
-
- // [tablet portrait +]: Show copyright and social links in one line
- @include break-from-device(tablet portrait) {
- padding: px2rem(12px) 0;
- }
-
- // Footer social link
- &__link {
- display: inline-block;
- width: px2rem(32px);
- height: px2rem(32px);
- text-align: center;
-
- // Adjust line-height to match height for correct alignment
- &::before {
- line-height: 1.9;
- }
-
- // Fill icon with current color
- svg {
- max-height: px2rem(16px);
- vertical-align: -25%;
- fill: currentcolor;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_form.scss b/dev/src/templates/assets/stylesheets/main/components/_form.scss
deleted file mode 100644
index 49b59e42..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_form.scss
+++ /dev/null
@@ -1,83 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Form button
- .md-button {
- display: inline-block;
- padding: px2em(10px) px2em(32px);
- font-weight: 700;
- color: var(--md-primary-fg-color);
- cursor: pointer;
- border: px2rem(2px) solid currentcolor;
- border-radius: px2rem(2px);
- transition:
- color 125ms,
- background-color 125ms,
- border-color 125ms;
-
- // Primary button
- &--primary {
- color: var(--md-primary-bg-color);
- background-color: var(--md-primary-fg-color);
- border-color: var(--md-primary-fg-color);
- }
-
- // Button on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-bg-color);
- background-color: var(--md-accent-fg-color);
- border-color: var(--md-accent-fg-color);
- }
- }
-
- // Form input
- .md-input {
- height: px2rem(36px);
- padding: 0 px2rem(12px);
- font-size: px2rem(16px);
- border-bottom: px2rem(2px) solid var(--md-default-fg-color--lighter);
- border-start-start-radius: px2rem(2px);
- border-start-end-radius: px2rem(2px);
- box-shadow: var(--md-shadow-z1);
- transition:
- border 250ms,
- box-shadow 250ms;
-
- // Input on focus/hover
- &:is(:focus, :hover) {
- border-bottom-color: var(--md-accent-fg-color);
- box-shadow: var(--md-shadow-z2);
- }
-
- // Stretch to full width
- &--stretch {
- width: 100%;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_header.scss b/dev/src/templates/assets/stylesheets/main/components/_header.scss
deleted file mode 100644
index e51f3f99..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_header.scss
+++ /dev/null
@@ -1,270 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Header - by default, the header will be sticky and stay always on top of the
-// viewport. If this behavior is not desired, just set `position: static`.
-.md-header {
- position: sticky;
- inset-inline: 0;
- top: 0;
- z-index: 4;
- display: block;
- color: var(--md-primary-bg-color);
- background-color: var(--md-primary-fg-color);
- // Hack: reduce jitter by adding a transparent box shadow of the same size
- // so the size of the layer doesn't change during animation
- box-shadow:
- 0 0 px2rem(4px) rgba(0, 0, 0, 0),
- 0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0);
-
- // [print]: Hide header
- @media print {
- display: none;
- }
-
- // Header is hidden
- &[hidden] {
- transition:
- transform 250ms cubic-bezier(0.8, 0, 0.6, 1),
- box-shadow 250ms;
- transform: translateY(-100%);
- }
-
- // Header in shadow state, i.e. shadow is visible
- &--shadow {
- box-shadow:
- 0 0 px2rem(4px) rgba(0, 0, 0, 0.1),
- 0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0.2);
- transition:
- transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1),
- box-shadow 250ms;
- }
-
- // Header wrapper
- &__inner {
- display: flex;
- align-items: center;
- padding: 0 px2rem(4px);
- }
-
- // Header button
- &__button {
- position: relative;
- z-index: 1;
- padding: px2rem(8px);
- margin: px2rem(4px);
- color: currentcolor;
- vertical-align: middle;
- cursor: pointer;
- outline-color: var(--md-accent-fg-color);
- transition: opacity 250ms;
-
- // Button on hover
- &:hover {
- opacity: 0.7;
- }
-
- // Header button is visible
- &:not([hidden]) {
- display: inline-block;
- }
-
- // Hide outline for pointer devices
- &:not(.focus-visible) {
- outline: none;
- -webkit-tap-highlight-color: transparent;
- }
-
- // Button with logo, pointing to `config.site_url`
- &.md-logo {
- padding: px2rem(8px);
- margin: px2rem(4px);
-
- // [tablet -]: Hide button
- @include break-to-device(tablet) {
- display: none;
- }
-
- // Image or icon
- :is(img, svg) {
- display: block;
- width: auto;
- height: px2rem(24px);
- fill: currentcolor;
- }
- }
-
- // Button for search
- &[for="__search"] {
-
- // [tablet landscape +]: Hide button
- @include break-from-device(tablet landscape) {
- display: none;
- }
-
- // [no-js]: Hide button
- .no-js & {
- display: none;
- }
-
- // Adjust for right-to-left languages
- [dir="rtl"] & svg {
- transform: scaleX(-1);
- }
- }
-
- // Button for drawer
- &[for="__drawer"] {
-
- // [screen +]: Hide button
- @include break-from-device(screen) {
- display: none;
- }
- }
- }
-
- // Header topic
- &__topic {
- position: absolute;
- display: flex;
- max-width: 100%;
- white-space: nowrap;
- transition:
- transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),
- opacity 150ms;
-
- // Second header topic - title of the current page
- & + & {
- z-index: -1;
- pointer-events: none;
- opacity: 0;
- transition:
- transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),
- opacity 150ms;
- transform: translateX(px2rem(25px));
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: translateX(px2rem(-25px));
- }
- }
-
- // Adjust font weight of site title
- &:first-child {
- font-weight: 700;
- }
- }
-
- // Header title
- &__title {
- flex-grow: 1;
- height: px2rem(48px);
- margin-inline-start: px2rem(20px);
- margin-inline-end: px2rem(8px);
- font-size: px2rem(18px);
- line-height: px2rem(48px);
-
- // Header title in active state, i.e. page title is visible
- &--active .md-header__topic {
- z-index: -1;
- pointer-events: none;
- opacity: 0;
- transition:
- transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),
- opacity 150ms;
- transform: translateX(px2rem(-25px));
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: translateX(px2rem(25px));
- }
-
- // Second header topic - title of the current page
- + .md-header__topic {
- z-index: 0;
- pointer-events: initial;
- opacity: 1;
- transition:
- transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),
- opacity 150ms;
- transform: translateX(0);
- }
- }
-
- // Add ellipsis in case of overflowing text
- > .md-header__ellipsis {
- position: relative;
- width: 100%;
- height: 100%;
- }
- }
-
- // Header option
- &__option {
- display: flex;
- flex-shrink: 0;
- max-width: 100%;
- white-space: nowrap;
- transition:
- max-width 0ms 250ms,
- opacity 250ms 250ms;
-
- // Hide toggle when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
- max-width: 0;
- opacity: 0;
- transition:
- max-width 0ms,
- opacity 0ms;
- }
-
- // Hack: Firefox 117 introduces a bug where the browser scrolls the page by
- // a small amount to the top every time the header button is focused. After
- // investigating, we're confident that it seems to be caused by the input
- // field being too close to the border - see https://t.ly/APO8l
- > input {
- bottom: 0;
- }
- }
-
- // Repository information container
- &__source {
- display: none;
-
- // [tablet landscape +]: Show repository information
- @include break-from-device(tablet landscape) {
- display: block;
- width: px2rem(234px);
- max-width: px2rem(234px);
- margin-inline-start: px2rem(20px);
- }
-
- // [screen +]: Adjust spacing of search bar
- @include break-from-device(screen) {
- margin-inline-start: px2rem(28px);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_meta.scss b/dev/src/templates/assets/stylesheets/main/components/_meta.scss
deleted file mode 100644
index aaeae8df..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_meta.scss
+++ /dev/null
@@ -1,67 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Metadata
-.md-meta {
- font-size: px2rem(14px);
- line-height: 1.3;
- color: var(--md-default-fg-color--light);
-
- // Metadata list
- &__list {
- display: inline-flex;
- flex-wrap: wrap;
- padding: 0;
- margin: 0;
- list-style: none;
- }
-
- // Metadata item separator
- &__item:not(:last-child)::after {
- margin-inline: px2rem(4px);
- content: "·";
- }
-
- // Metadata link
- &__link {
- color: var(--md-typeset-a-color);
-
- // Metadata link on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-fg-color);
- }
- }
-}
-
-// Draft
-.md-draft {
- display: inline-block;
- padding-inline: px2em(8px, 14px);
- font-weight: 700;
- color: hsla(255, 100%, 100%);
- background-color: $clr-red-a400;
- border-radius: px2em(2px);
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_nav.scss b/dev/src/templates/assets/stylesheets/main/components/_nav.scss
deleted file mode 100644
index 673918af..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_nav.scss
+++ /dev/null
@@ -1,761 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Navigation variables
-:root {
- --md-nav-icon--prev: svg-load("material/arrow-left.svg");
- --md-nav-icon--next: svg-load("material/chevron-right.svg");
- --md-toc-icon: svg-load("material/table-of-contents.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Navigation
-.md-nav {
- font-size: px2rem(14px);
- line-height: 1.3;
-
- // Navigation title
- &__title {
- display: block;
- padding: 0 px2rem(12px);
- overflow: hidden;
- font-weight: 700;
- color: var(--md-default-fg-color--light);
- text-overflow: ellipsis;
-
- // Navigaton button
- .md-nav__button {
- display: none;
-
- // Stretch images based on height, as it's the smaller dimension
- img {
- width: auto;
- height: 100%;
- }
-
- // Button with logo, pointing to `config.site_url`
- &.md-logo {
-
- // Image or icon
- :is(img, svg) {
- display: block;
- width: auto;
- max-width: 100%;
- height: px2rem(48px);
- object-fit: contain;
- fill: currentcolor;
- }
- }
- }
- }
-
- // Navigation list
- &__list {
- padding: 0;
- margin: 0;
- list-style: none;
- }
-
- // Navigation link
- &__link {
- display: flex;
- gap: px2rem(8px);
- align-items: flex-start;
- margin-top: 0.625em;
- transition: color 125ms;
- scroll-snap-align: start;
-
- // Navigation link that was passed
- &--passed {
- color: var(--md-default-fg-color--light);
- }
-
- // Active link
- .md-nav__item &--active {
-
- // Also enable color transitions on inline code blocks
- &,
- code {
- color: var(--md-typeset-a-color);
- }
- }
-
- // Navigation link title
- .md-ellipsis {
- // Hack: Safari exhibits a bug where the text will sometimes disappear
- // and the element will become unclickable. Setting `position: relative`
- // seems to fix the issue - see https://bit.ly/3HljM1T
- position: relative;
- }
-
- // Always align navigation icons to the end
- .md-icon:last-child {
- margin-inline-start: auto;
- }
-
- // Navigation link icon
- svg {
- flex-shrink: 0;
- height: 1.3em;
- fill: currentcolor;
- }
-
- // Navigation link on focus/hover
- &:is([href], [for]):is(:focus, :hover) {
- color: var(--md-accent-fg-color);
- cursor: pointer;
- }
-
- // Show outline for keyboard devices
- &.focus-visible {
- outline-color: var(--md-accent-fg-color);
- outline-offset: px2rem(4px);
- }
-
- // Navigation link for table of contents
- .md-nav--primary &[for="__toc"] {
- display: none;
-
- // Table of contents icon
- .md-icon::after {
- display: block;
- width: 100%;
- height: 100%;
- mask-image: var(--md-toc-icon);
- background-color: currentcolor;
- }
-
- // Hide table of contents
- ~ .md-nav {
- display: none;
- }
- }
- }
-
- // Navigation container (for section index pages)
- &__container > .md-nav__link {
- margin-top: 0;
-
- // Stretch first child
- &:first-child {
- flex-grow: 1;
- // Hack: if a very long word is used, it can push the arrow out of sight.
- // Setting this property contains the text - see https://t.ly/E02vp
- min-width: 0;
- }
- }
-
- // Navigation icon
- &__icon {
- flex-shrink: 0;
- }
-
- // Repository information container
- &__source {
- display: none;
- }
-
- // [tablet -]: Layered navigation
- @include break-to-device(tablet) {
-
- // Primary and nested navigation
- &--primary,
- &--primary & {
- position: absolute;
- inset-inline: 0;
- top: 0;
- z-index: 1;
- display: flex;
- flex-direction: column;
- height: 100%;
- background-color: var(--md-default-bg-color);
- }
-
- // Primary navigation
- &--primary {
-
- // Navigation title and item
- :is(.md-nav__title, .md-nav__item) {
- font-size: px2rem(16px);
- line-height: 1.5;
- }
-
- // Navigation title
- .md-nav__title {
- position: relative;
- height: px2rem(112px);
- padding: px2rem(60px) px2rem(16px) px2rem(4px);
- line-height: px2rem(48px);
- color: var(--md-default-fg-color--light);
- white-space: nowrap;
- cursor: pointer;
- background-color: var(--md-default-fg-color--lightest);
-
- // Navigation icon
- .md-nav__icon {
- position: absolute;
- top: px2rem(8px);
- inset-inline-start: px2rem(8px);
- display: block;
- width: px2rem(24px);
- height: px2rem(24px);
- margin: px2rem(4px);
-
- // Navigation icon in link to previous level
- &::after {
- display: block;
- width: 100%;
- height: 100%;
- content: "";
- background-color: currentcolor;
- mask-image: var(--md-nav-icon--prev);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
- }
-
- // Navigation list
- ~ .md-nav__list {
- overflow-y: auto;
- touch-action: pan-y;
- background-color: var(--md-default-bg-color);
- box-shadow:
- 0 px2rem(1px) 0 var(--md-default-fg-color--lightest) inset;
- scroll-snap-type: y mandatory;
-
- // Omit border on first child
- > :first-child {
- border-top: 0;
- }
- }
-
- // Top-level navigation title
- &[for="__drawer"] {
- font-weight: 700;
- color: var(--md-primary-bg-color);
- background-color: var(--md-primary-fg-color);
- }
-
- // Button with logo, pointing to `config.site_url`
- .md-logo {
- position: absolute;
- inset-inline: px2rem(4px);
- top: px2rem(4px);
- display: block;
- padding: px2rem(8px);
- margin: px2rem(4px);
- }
- }
-
- // Navigation list
- .md-nav__list {
- flex: 1;
- }
-
- // Navigation item
- .md-nav__item {
- border-top: px2rem(1px) solid var(--md-default-fg-color--lightest);
-
- // Navigation link in active navigation
- &--active > .md-nav__link {
- color: var(--md-typeset-a-color);
-
- // Navigation link on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-fg-color);
- }
- }
- }
-
- // Navigation link
- .md-nav__link {
- padding: px2rem(12px) px2rem(16px);
- margin-top: 0;
-
- // Navigation link icon
- svg {
- margin-top: 0.1em;
- }
-
- // Adjust spacing on nested link
- > .md-nav__link {
- padding: 0;
- }
-
- // Navigation icon
- .md-nav__icon {
- width: px2rem(24px);
- height: px2rem(24px);
- margin-inline-end: px2rem(-4px);
- font-size: px2rem(24px);
-
- // Navigation icon in link to next level
- &::after {
- display: block;
- width: 100%;
- height: 100%;
- content: "";
- background-color: currentcolor;
- mask-image: var(--md-nav-icon--next);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
- }
- }
-
- // Flip icon vertically
- .md-nav__icon {
-
- // Adjust for right-to-left languages
- [dir="rtl"] &::after {
- transform: scale(-1);
- }
- }
-
- // Table of contents contained in primary navigation
- .md-nav--secondary {
-
- // Navigation on level 2-6
- .md-nav {
- position: static;
- background-color: transparent;
-
- // Navigation link on level 3
- .md-nav__link {
- padding-inline-start: px2rem(28px);
- }
-
- // Navigation link on level 4
- .md-nav .md-nav__link {
- padding-inline-start: px2rem(40px);
- }
-
- // Navigation link on level 5
- .md-nav .md-nav .md-nav__link {
- padding-inline-start: px2rem(52px);
- }
-
- // Navigation link on level 6
- .md-nav .md-nav .md-nav .md-nav__link {
- padding-inline-start: px2rem(64px);
- }
- }
- }
- }
-
- // Table of contents
- &--secondary {
- background-color: transparent;
- }
-
- // Hide nested navigation
- &__toggle ~ & {
- display: flex;
- opacity: 0;
- transition:
- transform 250ms cubic-bezier(0.8, 0, 0.6, 1),
- opacity 125ms 50ms;
- transform: translateX(100%);
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: translateX(-100%);
- }
- }
-
- // Show nested navigation when toggle is active
- &__toggle:checked ~ & {
- opacity: 1;
- transition:
- transform 250ms cubic-bezier(0.4, 0, 0.2, 1),
- opacity 125ms 125ms;
- transform: translateX(0);
-
- // Navigation list
- > .md-nav__list {
- // Hack: promote to own layer to reduce jitter
- backface-visibility: hidden;
- }
- }
- }
-
- // [tablet portrait -]: Layered navigation with table of contents
- @include break-to-device(tablet portrait) {
-
- // Show link to table of contents
- &--primary &__link[for="__toc"] {
- display: flex;
-
- // Show table of contents icon
- .md-icon::after {
- content: "";
- }
-
- // Hide navigation link to current page
- + .md-nav__link {
- display: none;
- }
-
- // Show table of contents
- ~ .md-nav {
- display: flex;
- }
- }
-
- // Repository information container
- &__source {
- display: block;
- padding: 0 px2rem(4px);
- color: var(--md-primary-bg-color);
- background-color: var(--md-primary-fg-color--dark);
- }
- }
-
- // [tablet landscape]: Layered navigation with table of contents
- @include break-at-device(tablet landscape) {
-
- // Show link to integrated table of contents
- &--integrated &__link[for="__toc"] {
- display: flex;
-
- // Show table of contents icon
- .md-icon::after {
- content: "";
- }
-
- // Hide navigation link to current page
- + .md-nav__link {
- display: none;
- }
-
- // Show table of contents
- ~ .md-nav {
- display: flex;
- }
- }
- }
-
- // [tablet landscape +]: Tree-like table of contents
- @include break-from-device(tablet landscape) {
- margin-bottom: px2rem(-8px);
-
- // Table of contents
- &--secondary {
-
- // Navigation title
- .md-nav__title {
- position: sticky;
- top: 0;
- // Hack: because of the hack that we need to make .md-ellipsis work in
- // Safari, we need to set `z-index` here as - see https://bit.ly/3s5M2jm
- z-index: 1;
- background: var(--md-default-bg-color);
- box-shadow: 0 0 px2rem(8px) px2rem(8px) var(--md-default-bg-color);
-
- // Adjust snapping behavior
- &[for="__toc"] {
- scroll-snap-align: start;
- }
-
- // Hide navigation icon
- .md-nav__icon {
- display: none;
- }
- }
-
- // Adjust spacing for navigation list - same reason as below
- .md-nav__list {
- padding-inline-start: px2rem(12px);
- padding-bottom: px2rem(8px);
- }
-
- // Adjust spacing for navigation link - before this change, we set spacing
- // on the left and right of a navigation item, but this led to the problem
- // of cropped focus outlines, because we must set `overflow: hidden` on
- // the navigation list for smooth expand and collapse transitions.
- .md-nav__item > .md-nav__link {
- margin-inline-end: px2rem(8px);
- }
- }
- }
-
- // [screen +]: Tree-like navigation
- @include break-from-device(screen) {
- margin-bottom: px2rem(-8px);
- transition: max-height 250ms cubic-bezier(0.86, 0, 0.07, 1);
-
- // Primary navigation
- &--primary {
-
- // Navigation title
- .md-nav__title {
- position: sticky;
- top: 0;
- // Hack: because of the hack that we need to make .md-ellipsis work in
- // Safari, we need to set `z-index` here as - see https://bit.ly/3s5M2jm
- z-index: 1;
- background: var(--md-default-bg-color);
- box-shadow: 0 0 px2rem(8px) px2rem(8px) var(--md-default-bg-color);
-
- // Adjust snapping behavior
- &[for="__drawer"] {
- scroll-snap-align: start;
- }
-
- // Hide navigation icon
- .md-nav__icon {
- display: none;
- }
- }
-
- // Adjust spacing for navigation list - same reason as below
- .md-nav__list {
- padding-inline-start: px2rem(12px);
- padding-bottom: px2rem(8px);
- }
-
- // Adjust spacing for navigation link - before this change, we set spacing
- // on the left and right of a navigation item, but this led to the problem
- // of cropped focus outlines, because we must set `overflow: hidden` on
- // the navigation list for smooth expand and collapse transitions.
- .md-nav__item > .md-nav__link {
- margin-inline-end: px2rem(8px);
- }
- }
-
- // Hide nested navigation
- &__toggle ~ & {
- display: grid;
- grid-template-rows: 0fr;
- visibility: collapse;
- opacity: 0;
- transition:
- grid-template-rows 250ms cubic-bezier(0.86, 0, 0.07, 1),
- opacity 250ms,
- visibility 0ms 250ms;
-
- // Navigation list
- > .md-nav__list {
- overflow: hidden;
- }
- }
-
- // Show nested navigation when toggle is active or indeterminate
- &__toggle:is(:checked, :indeterminate) ~ & {
- grid-template-rows: 1fr;
- visibility: visible;
- opacity: 1;
- transition:
- grid-template-rows 250ms cubic-bezier(0.86, 0, 0.07, 1),
- opacity 150ms 100ms,
- visibility 0ms;
- }
-
- // Hide navigation title in nested navigation
- &__item--nested > & > &__title {
- display: none;
- }
-
- // Navigation section
- &__item--section {
- display: block;
- margin: 1.25em 0;
-
- // Adjust spacing on last child
- &:last-child {
- margin-bottom: 0;
- }
-
- // Show navigation link as title
- > .md-nav__link {
- font-weight: 700;
-
- // Make labels discernable from links
- &[for] {
- color: var(--md-default-fg-color--light);
- }
-
- // Omit clicks if not a section index page
- &:not(.md-nav__container) {
- pointer-events: none;
- }
-
- // Hide navigation icon
- > [for],
- .md-icon {
- display: none;
- }
- }
-
- // Navigation
- > .md-nav {
- display: block;
- margin-inline-start: px2rem(-12px);
- visibility: visible;
- opacity: 1;
-
- // Adjust spacing on next level item
- > .md-nav__list > .md-nav__item {
- padding: 0;
- }
- }
- }
-
- // Navigation icon
- &__icon {
- width: px2rem(18px);
- height: px2rem(18px);
- border-radius: 100%;
- transition: background-color 250ms;
-
- // Navigation icon on hover
- &:hover {
- background-color: var(--md-accent-fg-color--transparent);
- }
-
- // Navigation icon content
- &::after {
- display: inline-block;
- width: 100%;
- height: 100%;
- vertical-align: px2rem(-2px);
- content: "";
- background-color: currentcolor;
- border-radius: 100%;
- transition: transform 250ms;
- mask-image: var(--md-nav-icon--next);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: rotate(180deg);
- }
-
- // Navigation icon - rotate icon when toggle is active or indeterminate
- .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link &,
- .md-nav__item--nested .md-nav__toggle:indeterminate ~ .md-nav__link & {
- transform: rotate(90deg);
- }
- }
- }
-
- // Modifier for when navigation tabs are rendered
- &--lifted {
-
- // Hide site title
- > .md-nav__title {
- display: none;
- }
-
- // Hide level 0 navigation items
- > .md-nav__list > .md-nav__item {
- display: none;
-
- // Active parent navigation item
- &--active {
- display: block;
-
- // Show navigation link as title
- > .md-nav__link {
- position: sticky;
- top: 0;
- z-index: 1;
- margin-top: 0;
- background: var(--md-default-bg-color);
- box-shadow: 0 0 px2rem(8px) px2rem(8px) var(--md-default-bg-color);
-
- // Omit clicks if not a section index page
- &:not(.md-nav__container) {
- pointer-events: none;
- }
- }
-
- // Adjust spacing for navigation section
- &.md-nav__item--section {
- margin: 0;
- }
- }
-
- // Adjust spacing for nested navigation
- > .md-nav {
- margin-inline-start: px2rem(-12px);
- }
-
- // Make labels discernable from links
- > [for] {
- color: var(--md-default-fg-color--light);
- }
- }
-
- // Hack: Always show active navigation tab on breakpoint screen, despite
- // of checkbox being checked or not - see https://t.ly/Qc311
- .md-nav[data-md-level="1"] {
- grid-template-rows: 1fr;
- visibility: visible;
- opacity: 1;
- }
- }
-
- // Modifier for when table of contents is rendered in primary navigation
- &--integrated > .md-nav__list > .md-nav__item--active {
-
- // Add spacing to container for non-nested navigation items
- &:not(.md-nav__item--nested) {
- padding: 0 px2rem(12px);
-
- // Remove padding as it's given by container
- > .md-nav__link {
- padding: 0;
- }
- }
-
- // Show integrated table of contents
- .md-nav--secondary {
- display: block;
- margin-bottom: 1.25em;
- visibility: visible;
- border-inline-start: px2rem(1px) solid var(--md-primary-fg-color);
- opacity: 1;
-
- // Navigation list
- > .md-nav__list {
- padding-bottom: 0;
- overflow: visible;
- }
-
- // Hide table of contents title
- > .md-nav__title {
- display: none;
- }
- }
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_pagination.scss b/dev/src/templates/assets/stylesheets/main/components/_pagination.scss
deleted file mode 100644
index a010bf43..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_pagination.scss
+++ /dev/null
@@ -1,85 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Pagination
-.md-pagination {
- display: flex;
- gap: px2rem(8px);
- align-items: center;
- justify-content: center;
- font-size: px2rem(16px);
- font-weight: 700;
-
- // Pagination item
- > * {
- display: flex;
- align-items: center;
- justify-content: center;
- min-width: px2rem(36px);
- height: px2rem(36px);
- text-align: center;
- border-radius: px2rem(4px);
- }
-
- // Active pagination item
- &__current {
- color: var(--md-default-fg-color--light);
- background-color: var(--md-default-fg-color--lightest);
- }
-
- // Pagination link
- &__link {
- transition:
- color 125ms,
- background-color 125ms;
-
- // Pagination link on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-fg-color);
- background-color: var(--md-accent-fg-color--transparent);
-
- // Pagination icon
- svg {
- color: var(--md-accent-fg-color);
- }
- }
-
- // Show outline for keyboard devices
- &.focus-visible {
- outline-color: var(--md-accent-fg-color);
- outline-offset: px2rem(4px);
- }
-
- // Pagination icon
- svg {
- display: block;
- width: px2rem(24px);
- max-height: 100%;
- color: var(--md-default-fg-color--lighter);
- fill: currentcolor;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_post.scss b/dev/src/templates/assets/stylesheets/main/components/_post.scss
deleted file mode 100644
index cf6ce019..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_post.scss
+++ /dev/null
@@ -1,196 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Post
-.md-post {
-
- // Post backlink
- &__back {
- padding-bottom: px2rem(24px);
- margin-bottom: px2rem(24px);
- border-bottom: px2rem(1px) solid var(--md-default-fg-color--lightest);
-
- // [tablet -]: Hide post backlink
- @include break-to-device(tablet) {
- display: none;
- }
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
-
- // Flip icon vertically
- svg {
- transform: scaleX(-1);
- }
- }
- }
-
- // Post authors
- &__authors {
- display: flex;
- flex-direction: column;
- gap: px2rem(12px);
- margin: 0 px2rem(12px) px2rem(24px);
- }
-
- // Post metadata
- .md-post__meta {
-
- // Navigation link
- a {
- transition: color 125ms;
-
- // Navigation link on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-fg-color);
- }
- }
- }
-
- // Post navigation title @todo - generalize
- &__title {
- font-weight: 700;
- color: var(--md-default-fg-color--light);
- }
-
- // Post excerpt
- &--excerpt {
- margin-bottom: px2rem(64px);
-
- // Post excerpt header
- .md-post__header {
- display: flex;
- gap: px2rem(12px);
- align-items: center;
- min-height: px2rem(32px);
- }
-
- // Post excerpt authors
- .md-post__authors {
- display: inline-flex;
- flex-direction: row;
- gap: px2rem(4px);
- align-items: center;
- min-height: px2rem(48px);
- margin: 0;
- }
-
- // Post excerpt metadata
- .md-post__meta .md-meta__list {
- margin-inline-end: px2rem(8px);
- }
-
- // Post excerpt content
- .md-post__content > :first-child {
- --md-scroll-margin: #{px2rem(120px)};
-
- margin-top: 0;
- }
- }
-
- // Add margin to table of contents
- > .md-nav--secondary {
- margin: 1em 0;
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Post author profile
-.md-profile {
- display: flex;
- gap: px2rem(12px);
- align-items: center;
- width: 100%;
- font-size: px2rem(14px);
- line-height: 1.4;
-
- // Post author description
- &__description {
- flex-grow: 1;
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Content area for post
-.md-content--post {
- display: flex;
-
- // [tablet -]: Switch to inverted column layout
- @include break-to-device(tablet) {
- flex-flow: column-reverse;
- }
-
- // Content wrapper
- > .md-content__inner {
- min-width: 0;
-
- // [screen +]: Adjust spacing between content area and sidebars
- @include break-from-device(screen) {
- margin-inline-start: px2rem(24px);
- }
- }
-}
-
-// Sidebar for post
-.md-sidebar.md-sidebar--post {
-
- // [tablet -]: Adjust spacing
- @include break-to-device(tablet) {
- position: initial;
- width: 100%;
- padding: 0;
-
- .md-sidebar__inner {
- padding: 0;
- }
-
- .md-post__meta {
- margin-inline: px2rem(12px);
- }
-
- .md-nav__item {
- display: inline;
- border: none;
- }
-
- .md-nav__list {
- display: inline-flex;
- flex-wrap: wrap;
- gap: px2rem(12px);
- padding-block: px2rem(12px);
- }
-
- .md-nav__link {
- padding: 0;
- }
-
- .md-nav {
- position: initial;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_progress.scss b/dev/src/templates/assets/stylesheets/main/components/_progress.scss
deleted file mode 100644
index 7386ae33..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_progress.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Progress variables
-:root {
- --md-progress-value: 0;
- --md-progress-delay: 400ms;
-}
-
-// ----------------------------------------------------------------------------
-
-// Progress indicator
-.md-progress {
- position: fixed;
- top: 0;
- z-index: 4;
- width: 100%;
- height: px2rem(1.5px);
- background: var(--md-primary-bg-color);
- opacity:
- min(
- clamp(0, var(--md-progress-value), 1),
- clamp(0, 100 - var(--md-progress-value), 1)
- );
- transition:
- transform 500ms cubic-bezier(0.19, 1, 0.22, 1),
- opacity 250ms var(--md-progress-delay);
- transform: scaleX(calc(var(--md-progress-value) * 1%));
- transform-origin: left;
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_search.scss b/dev/src/templates/assets/stylesheets/main/components/_search.scss
deleted file mode 100644
index e0f36b0c..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_search.scss
+++ /dev/null
@@ -1,707 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Search variables
-:root {
- --md-search-result-icon: svg-load("material/file-search-outline.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Search
-.md-search {
- position: relative;
-
- // [tablet landscape +]: Header-embedded search
- @include break-from-device(tablet landscape) {
- padding: px2rem(4px) 0;
- }
-
- // [no-js]: Hide search
- .no-js & {
- display: none;
- }
-
- // Search overlay
- &__overlay {
- z-index: 1;
- opacity: 0;
-
- // [tablet portrait -]: Search modal
- @include break-to-device(tablet portrait) {
- position: absolute;
- top: px2rem(-20px);
- width: px2rem(40px);
- height: px2rem(40px);
- overflow: hidden;
- pointer-events: none;
- background-color: var(--md-default-bg-color);
- border-radius: px2rem(20px);
- transition:
- transform 300ms 100ms,
- opacity 200ms 200ms;
- transform-origin: center;
- inset-inline-start: px2rem(-44px);
-
- // Show overlay when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
- opacity: 1;
- transition:
- transform 400ms,
- opacity 100ms;
- }
- }
-
- // [tablet landscape +]: Header-embedded search
- @include break-from-device(tablet landscape) {
- position: fixed;
- top: 0;
- width: 0;
- height: 0;
- cursor: pointer;
- background-color: hsla(0, 0%, 0%, 0.54);
- transition:
- width 0ms 250ms,
- height 0ms 250ms,
- opacity 250ms;
- inset-inline-start: 0;
-
- // Show overlay when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
- width: 100%;
- // Hack: when the header is translated upon scrolling, a new layer is
- // induced, which means that the height will now refer to the height of
- // the header, albeit positioning is fixed. This should be mitigated
- // in all cases when setting the height to 2x the viewport.
- height: 200vh;
- opacity: 1;
- transition:
- width 0ms,
- height 0ms,
- opacity 250ms;
- }
- }
-
- // Adjust appearance when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
-
- // [mobile portrait -]: Scale up 45 times
- @include break-to-device(mobile portrait) {
- transform: scale(45);
- }
-
- // [mobile landscape]: Scale up 60 times
- @include break-at-device(mobile landscape) {
- transform: scale(60);
- }
-
- // [tablet portrait]: Scale up 75 times
- @include break-at-device(tablet portrait) {
- transform: scale(75);
- }
- }
- }
-
- // Search wrapper
- &__inner {
- // Hack: promote to own layer to reduce jitter
- backface-visibility: hidden;
-
- // [tablet portrait -]: Search modal
- @include break-to-device(tablet portrait) {
- position: fixed;
- top: 0;
- z-index: 2;
- width: 0;
- height: 0;
- overflow: hidden;
- opacity: 0;
- transition:
- width 0ms 300ms,
- height 0ms 300ms,
- transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1),
- opacity 150ms 150ms;
- transform: translateX(5%);
- inset-inline-start: 0;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: translateX(-5%);
- }
-
- // Adjust appearance when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
- width: 100%;
- height: 100%;
- opacity: 1;
- transition:
- width 0ms 0ms,
- height 0ms 0ms,
- transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1),
- opacity 150ms 150ms;
- transform: translateX(0);
- }
- }
-
- // [tablet landscape +]: Header-embedded search
- @include break-from-device(tablet landscape) {
- position: relative;
- float: inline-end;
- width: px2rem(234px);
- padding: px2rem(2px) 0;
- transition: width 250ms cubic-bezier(0.1, 0.7, 0.1, 1);
- }
-
- // Adjust appearance when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
-
- // [tablet landscape]: Omit overlaying header title
- @include break-at-device(tablet landscape) {
- width: px2rem(468px);
- }
-
- // [screen +]: Match width of content area
- @include break-from-device(screen) {
- width: px2rem(688px);
- }
- }
- }
-
- // Search form
- &__form {
- position: relative;
- z-index: 2;
- height: px2rem(48px);
- background-color: var(--md-default-bg-color);
- box-shadow: 0 0 px2rem(12px) transparent;
- transition:
- color 250ms,
- background-color 250ms;
-
- // [tablet landscape +]: Header-embedded search
- @include break-from-device(tablet landscape) {
- height: px2rem(36px);
- background-color: hsla(0, 0%, 0%, 0.26);
- border-radius: px2rem(2px);
-
- // Search form on hover
- &:hover {
- background-color: hsla(0, 0%, 100%, 0.12);
- }
- }
-
- // Adjust appearance when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
- color: var(--md-default-fg-color);
- background-color: var(--md-default-bg-color);
- border-radius: px2rem(2px) px2rem(2px) 0 0;
- box-shadow: 0 0 px2rem(12px) hsla(0, 0%, 0%, 0.07);
- }
- }
-
- // Search input
- &__input {
- position: relative;
- z-index: 2;
- width: 100%;
- height: 100%;
- padding-inline: px2rem(72px) px2rem(44px);
- font-size: px2rem(18px);
- text-overflow: ellipsis;
- background: transparent;
-
- // Search placeholder
- &::placeholder {
- transition: color 250ms;
- }
-
- // Search icon and placeholder
- ~ .md-search__icon,
- &::placeholder {
- color: var(--md-default-fg-color--light);
- }
-
- // Remove the "x" rendered by Internet Explorer
- &::-ms-clear {
- display: none;
- }
-
- // [tablet portrait -]: Search modal
- @include break-to-device(tablet portrait) {
- width: 100%;
- height: px2rem(48px);
- font-size: px2rem(18px);
- }
-
- // [tablet landscape +]: Header-embedded search
- @include break-from-device(tablet landscape) {
- padding-inline-start: px2rem(44px);
- font-size: px2rem(16px);
- color: inherit;
-
- // Search placeholder
- &::placeholder {
- color: var(--md-primary-bg-color--light);
- }
-
- // Search icon
- + .md-search__icon {
- color: var(--md-primary-bg-color);
- }
-
- // Adjust appearance when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
- text-overflow: clip;
-
- // Search icon and placeholder
- + .md-search__icon {
- color: var(--md-default-fg-color--light);
- }
-
- // Search placeholder
- &::placeholder {
- color: transparent;
- }
- }
- }
- }
-
- // Search icon
- &__icon {
- display: inline-block;
- width: px2rem(24px);
- height: px2rem(24px);
- cursor: pointer;
- transition:
- color 250ms,
- opacity 250ms;
-
- // Search icon on hover
- &:hover {
- opacity: 0.7;
- }
-
- // Search focus button
- &[for="__search"] {
- position: absolute;
- top: px2rem(6px);
- inset-inline-start: px2rem(10px);
- z-index: 2;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & svg {
- transform: scaleX(-1);
- }
-
- // [tablet portrait -]: Search modal
- @include break-to-device(tablet portrait) {
- top: px2rem(12px);
- inset-inline-start: px2rem(16px);
-
- // Hide the magnifying glass
- svg:first-child {
- display: none;
- }
- }
-
- // [tablet landscape +]: Header-embedded search
- @include break-from-device(tablet landscape) {
- pointer-events: none;
-
- // Hide the back arrow
- svg:last-child {
- display: none;
- }
- }
- }
- }
-
- // Search options
- &__options {
- position: absolute;
- top: px2rem(6px);
- inset-inline-end: px2rem(10px);
- z-index: 2;
- pointer-events: none;
-
- // [tablet portrait -]: Search modal
- @include break-to-device(tablet portrait) {
- top: px2rem(12px);
- inset-inline-end: px2rem(16px);
- }
-
- // Search option buttons
- > .md-icon {
- margin-inline-start: px2rem(4px);
- color: var(--md-default-fg-color--light);
- opacity: 0;
- transition:
- transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1),
- opacity 150ms;
- transform: scale(0.75);
-
- // Hide outline for pointer devices
- &:not(.focus-visible) {
- outline: none;
- -webkit-tap-highlight-color: transparent;
- }
-
- // Show buttons when search is active and input non-empty
- [data-md-toggle="search"]:checked ~ .md-header // stylelint-disable-line
- .md-search__input:valid ~ & {
- pointer-events: initial;
- opacity: 1;
- transform: scale(1);
-
- // Search focus icon
- &:hover {
- opacity: 0.7;
- }
- }
- }
- }
-
- // Search suggestions
- &__suggest {
- position: absolute;
- top: 0;
- display: flex;
- align-items: center;
- width: 100%;
- height: 100%;
- padding-inline: px2rem(72px) px2rem(44px);
- font-size: px2rem(18px);
- color: var(--md-default-fg-color--lighter);
- white-space: nowrap;
- opacity: 0;
- transition: opacity 50ms;
-
- // [tablet landscape +]: Header-embedded search
- @include break-from-device(tablet landscape) {
- padding-inline-start: px2rem(44px);
- font-size: px2rem(16px);
- }
-
- // Show suggestions when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
- opacity: 1;
- transition: opacity 300ms 100ms;
- }
- }
-
- // Search output
- &__output {
- position: absolute;
- z-index: 1;
- width: 100%;
- overflow: hidden;
- border-end-start-radius: px2rem(2px);
- border-end-end-radius: px2rem(2px);
-
- // [tablet portrait -]: Search modal
- @include break-to-device(tablet portrait) {
- top: px2rem(48px);
- bottom: 0;
- }
-
- // [tablet landscape +]: Header-embedded search
- @include break-from-device(tablet landscape) {
- top: px2rem(38px);
- opacity: 0;
- transition: opacity 400ms;
-
- // Show output when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
- box-shadow: var(--md-shadow-z3);
- opacity: 1;
- }
- }
- }
-
- // Search scroll wrapper
- &__scrollwrap {
- height: 100%;
- overflow-y: auto;
- // Hack: Chrome 88+ has weird overscroll behavior. Overall, scroll snapping
- // seems to be something that is not ready for prime time on some browsers.
- // scroll-snap-type: y mandatory;
- touch-action: pan-y;
- background-color: var(--md-default-bg-color);
- // Hack: promote to own layer to reduce jitter
- backface-visibility: hidden;
-
- // Mitigiate excessive repaints on non-retina devices
- @media (max-resolution: 1dppx) {
- transform: translateZ(0);
- }
-
- // [tablet landscape]: Set fixed width to omit unnecessary reflow
- @include break-at-device(tablet landscape) {
- width: px2rem(468px);
- }
-
- // [screen +]: Set fixed width to omit unnecessary reflow
- @include break-from-device(screen) {
- width: px2rem(688px);
- }
-
- // [tablet landscape +]: Limit height to viewport
- @include break-from-device(tablet landscape) {
- max-height: 0;
- scrollbar-width: thin;
- scrollbar-color: var(--md-default-fg-color--lighter) transparent;
-
- // Show scroll wrapper when search is active
- [data-md-toggle="search"]:checked ~ .md-header & {
- max-height: 75vh;
- }
-
- // Search scroll wrapper on hover
- &:hover {
- scrollbar-color: var(--md-accent-fg-color) transparent;
- }
-
- // Webkit scrollbar
- &::-webkit-scrollbar {
- width: px2rem(4px);
- height: px2rem(4px);
- }
-
- // Webkit scrollbar thumb
- &::-webkit-scrollbar-thumb {
- background-color: var(--md-default-fg-color--lighter);
-
- // Webkit scrollbar thumb on hover
- &:hover {
- background-color: var(--md-accent-fg-color);
- }
- }
- }
- }
-}
-
-// Search result
-.md-search-result {
- color: var(--md-default-fg-color);
- word-break: break-word;
-
- // Search result metadata
- &__meta {
- padding: 0 px2rem(16px);
- font-size: px2rem(12.8px);
- line-height: px2rem(36px);
- color: var(--md-default-fg-color--light);
- background-color: var(--md-default-fg-color--lightest);
- scroll-snap-align: start;
-
- // [tablet landscape +]: Adjust spacing
- @include break-from-device(tablet landscape) {
- padding-inline-start: px2rem(44px);
- }
- }
-
- // Search result list
- &__list {
- padding: 0;
- margin: 0;
- list-style: none;
- // Hack: omit accidental text selection on fast toggle of more button
- user-select: none;
- }
-
- // Search result item
- &__item {
- box-shadow: 0 px2rem(-1px) var(--md-default-fg-color--lightest);
-
- // Omit border on first child
- &:first-child {
- box-shadow: none;
- }
- }
-
- // Search result link
- &__link {
- display: block;
- outline: none;
- transition: background-color 250ms;
- scroll-snap-align: start;
-
- // Search result link on focus/hover
- &:is(:focus, :hover) {
- background-color: var(--md-accent-fg-color--transparent);
- }
-
- // Adjust spacing on last child of last link
- &:last-child p:last-child {
- margin-bottom: px2rem(12px);
- }
- }
-
- // Search result more container
- &__more > summary {
- position: sticky;
- top: 0;
- z-index: 1;
- display: block;
- cursor: pointer;
- outline: none;
- scroll-snap-align: start;
-
- // Hide native details marker
- &::marker {
- display: none;
- }
-
- // Hide native details marker - legacy, must be split into a seprate rule,
- // so older browsers don't consider the selector list as invalid
- &::-webkit-details-marker {
- display: none;
- }
-
- // Search result more button
- > div {
- padding: px2em(12px) px2rem(16px);
- font-size: px2rem(12.8px);
- color: var(--md-typeset-a-color);
- transition:
- color 250ms,
- background-color 250ms;
-
- // [tablet landscape +]: Adjust spacing
- @include break-from-device(tablet landscape) {
- padding-inline-start: px2rem(44px);
- }
- }
-
- // Search result more link on focus/hover
- &:is(:focus, :hover) > div {
- color: var(--md-accent-fg-color);
- background-color: var(--md-accent-fg-color--transparent);
- }
- }
-
- // Adjust background for more container in open state
- &__more[open] > summary {
- background-color: var(--md-default-bg-color);
- // box-shadow: 0 px2rem(-1px) hsla(0, 0%, 0%, 0.07) inset;
- }
-
- // Search result article
- &__article {
- position: relative;
- padding: 0 px2rem(16px);
- overflow: hidden;
-
- // [tablet landscape +]: Adjust spacing
- @include break-from-device(tablet landscape) {
- padding-inline-start: px2rem(44px);
- }
- }
-
- // Search result icon
- &__icon {
- position: absolute;
- inset-inline-start: 0;
- width: px2rem(24px);
- height: px2rem(24px);
- margin: px2rem(10px);
- color: var(--md-default-fg-color--light);
-
- // [tablet portrait -]: Hide icon
- @include break-to-device(tablet portrait) {
- display: none;
- }
-
- // Search result icon content
- &::after {
- display: inline-block;
- width: 100%;
- height: 100%;
- content: "";
- background-color: currentcolor;
- mask-image: var(--md-search-result-icon);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: scaleX(-1);
- }
- }
- }
-
- // Typesetted content
- .md-typeset {
- font-size: px2rem(12.8px);
- line-height: 1.6;
- color: var(--md-default-fg-color--light);
-
- // Search result article title
- h1 {
- margin: px2rem(11px) 0;
- font-size: px2rem(16px);
- font-weight: 400;
- line-height: 1.4;
- color: var(--md-default-fg-color);
-
- // Search term highlighting
- mark {
- text-decoration: none;
- }
- }
-
- // Search result section title
- h2 {
- margin: 0.5em 0;
- font-size: px2rem(12.8px);
- font-weight: 700;
- line-height: 1.6;
- color: var(--md-default-fg-color);
-
- // Search term highlighting
- mark {
- text-decoration: none;
- }
- }
- }
-
- // Search result terms
- &__terms {
- display: block;
- margin: 0.5em 0;
- font-size: px2rem(12.8px);
- font-style: italic;
- color: var(--md-default-fg-color);
- }
-
- // Search term highlighting
- mark {
- color: var(--md-accent-fg-color);
- text-decoration: underline;
- background-color: transparent;
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_select.scss b/dev/src/templates/assets/stylesheets/main/components/_select.scss
deleted file mode 100644
index ed597a39..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_select.scss
+++ /dev/null
@@ -1,115 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Selection
-.md-select {
- position: relative;
- z-index: 1;
-
- // Selection tooltip
- &__inner {
- position: absolute;
- top: calc(100% - #{px2rem(4px)});
- left: 50%;
- max-height: 0;
- margin-top: px2rem(4px);
- color: var(--md-default-fg-color);
- background-color: var(--md-default-bg-color);
- border-radius: px2rem(2px);
- box-shadow: var(--md-shadow-z2);
- opacity: 0;
- transition:
- transform 250ms 375ms,
- opacity 250ms 250ms,
- max-height 0ms 500ms;
- transform: translate3d(-50%, px2rem(6px), 0);
-
- // Selection bubble on parent focus/hover
- .md-select:is(:focus-within, :hover) & {
- max-height: px2rem(200px);
- opacity: 1;
- transition:
- transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1),
- opacity 250ms,
- max-height 0ms;
- transform: translate3d(-50%, 0, 0);
- }
-
- // Selection bubble handle
- &::after {
- position: absolute;
- top: 0;
- left: 50%;
- width: 0;
- height: 0;
- margin-top: px2rem(-4px);
- margin-left: px2rem(-4px);
- content: "";
- border: px2rem(4px) solid transparent;
- border-top: 0;
- border-bottom-color: var(--md-default-bg-color);
- }
- }
-
- // Selection list
- &__list {
- max-height: inherit;
- padding: 0;
- margin: 0;
- overflow: auto;
- font-size: px2rem(16px);
- list-style-type: none;
- border-radius: px2rem(2px);
- }
-
- // Selection item
- &__item {
- line-height: px2rem(36px);
- }
-
- // Selection link
- &__link {
- display: block;
- width: 100%;
- padding-inline: px2rem(12px) px2rem(24px);
- cursor: pointer;
- outline: none;
- transition:
- background-color 250ms,
- color 250ms;
- scroll-snap-align: start;
-
- // Link on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-fg-color);
- }
-
- // Link on focus
- &:focus {
- background-color: var(--md-default-fg-color--lightest);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_sidebar.scss b/dev/src/templates/assets/stylesheets/main/components/_sidebar.scss
deleted file mode 100644
index 8a320c04..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_sidebar.scss
+++ /dev/null
@@ -1,209 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Sidebar
-.md-sidebar {
- position: sticky;
- top: px2rem(48px);
- flex-shrink: 0;
- align-self: flex-start;
- width: px2rem(242px);
- padding: px2rem(24px) 0;
-
- // [print]: Hide sidebar
- @media print {
- display: none;
- }
-
- // Primary sidebar with navigation
- &--primary {
-
- // [tablet -]: Show navigation as drawer
- @include break-to-device(tablet) {
- position: fixed;
- top: 0;
- z-index: 5;
- display: block;
- width: px2rem(242px);
- height: 100%;
- background-color: var(--md-default-bg-color);
- transition:
- transform 250ms cubic-bezier(0.4, 0, 0.2, 1),
- box-shadow 250ms;
- transform: translateX(0);
- inset-inline-start: px2rem(-242px);
-
- // Show sidebar when drawer is active
- [data-md-toggle="drawer"]:checked ~ .md-container & {
- box-shadow: var(--md-shadow-z3);
- transform: translateX(px2rem(242px));
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: translateX(px2rem(-242px));
- }
- }
-
- // Stretch scroll wrapper for primary sidebar
- .md-sidebar__scrollwrap {
- position: absolute;
- inset: 0;
- margin: 0;
- scroll-snap-type: none;
- overflow: hidden;
- }
- }
- }
-
- // [screen +]: Show navigation as sidebar
- @include break-from-device(screen) {
- height: 0;
-
- // [no-js]: Switch to native sticky behavior
- .no-js & {
- height: auto;
- }
-
- // Adjust spacing for sticky navigation tabs
- .md-header--lifted ~ .md-container & {
- top: px2rem(96px);
- }
- }
-
- // Secondary sidebar with table of contents
- &--secondary {
- display: none;
- order: 2;
-
- // [tablet landscape +]: Show table of contents as sidebar
- @include break-from-device(tablet landscape) {
- height: 0;
-
- // [no-js]: Switch to native sticky behavior
- .no-js & {
- height: auto;
- }
-
- // Sidebar is visible
- &:not([hidden]) {
- display: block;
- }
-
- // Ensure smooth scrolling on iOS
- .md-sidebar__scrollwrap {
- touch-action: pan-y;
- }
- }
- }
-
- // Sidebar scroll wrapper
- &__scrollwrap {
- margin: 0 px2rem(4px);
- overflow-y: auto;
- // Hack: promote to own layer to reduce jitter
- backface-visibility: hidden;
- // Hack: Chrome 81+ exhibits a strange bug, where it scrolls the container
- // to the bottom if `scroll-snap-type` is set on the initial render. For
- // this reason, we disable scroll snapping until this is resolved (#1667).
- // scroll-snap-type: y mandatory;
- scrollbar-width: thin;
- scrollbar-gutter: stable;
- scrollbar-color: var(--md-default-fg-color--lighter) transparent;
-
- // Webkit scrollbar
- &::-webkit-scrollbar {
- width: px2rem(4px);
- height: px2rem(4px);
- }
-
- // Sidebar scroll wrapper on focus/hover
- &:is(:focus-within, :hover) {
- scrollbar-color: var(--md-accent-fg-color) transparent;
-
- // Webkit scrollbar thumb
- &::-webkit-scrollbar-thumb {
- background-color: var(--md-default-fg-color--lighter);
-
- // Webkit scrollbar thumb on hover
- &:hover {
- background-color: var(--md-accent-fg-color);
- }
- }
- }
- }
-
- // Hack: the scrollbar is only visible when the sidebar's contents overflow,
- // which is nice, but leads to the problem where the chevrons of expandable
- // sections will jump by `4px` when the sidebar is shown. We wanted to fix
- // this problem for so long, but haven't found a clean way of doing it.
- // Until now. The following declaration is only applied to Webkit browsers
- // (e.g. Chrome and Safari), which support styling of scrollbars. The trick
- // is to add conditional padding on the side of the scrollbar only if the
- // sidebar's content doesn't overflow. This hack is inspired and adapted
- // from Ayke van Laëthem's year old trick – see https://bit.ly/3Sb1qql
- @supports selector(::-webkit-scrollbar) {
-
- // Sidebar scroll wrapper
- &__scrollwrap {
- scrollbar-gutter: auto;
- }
-
- // Sidebar wrapper
- &__inner {
- padding-inline-end: calc(100% - #{px2rem(230px)});
- }
- }
-}
-
-// [tablet -]: Show overlay on active drawer
-@include break-to-device(tablet) {
-
- // Drawer overlay
- .md-overlay {
- position: fixed;
- top: 0;
- z-index: 5;
- width: 0;
- height: 0;
- background-color: hsla(0, 0%, 0%, 0.54);
- opacity: 0;
- transition:
- width 0ms 250ms,
- height 0ms 250ms,
- opacity 250ms;
-
- // Show overlay when drawer is active
- [data-md-toggle="drawer"]:checked ~ & {
- width: 100%;
- height: 100%;
- opacity: 1;
- transition:
- width 0ms,
- height 0ms,
- opacity 250ms;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_source.scss b/dev/src/templates/assets/stylesheets/main/components/_source.scss
deleted file mode 100644
index a2b72009..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_source.scss
+++ /dev/null
@@ -1,182 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Keyframes
-// ----------------------------------------------------------------------------
-
-// Show repository facts
-@keyframes facts {
- 0% {
- height: 0;
- }
-
- 100% {
- height: px2rem(13px);
- }
-}
-
-// Show repository fact
-@keyframes fact {
- 0% {
- opacity: 0;
- transform: translateY(100%);
- }
-
- 50% {
- opacity: 0;
- }
-
- 100% {
- opacity: 1;
- transform: translateY(0%);
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Repository information variables
-:root {
- --md-source-forks-icon: svg-load("octicons/repo-forked-16.svg");
- --md-source-repositories-icon: svg-load("octicons/repo-16.svg");
- --md-source-stars-icon: svg-load("octicons/star-16.svg");
- --md-source-version-icon: svg-load("octicons/tag-16.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Repository information
-.md-source {
- display: block;
- font-size: px2rem(13px);
- line-height: 1.2;
- white-space: nowrap;
- outline-color: var(--md-accent-fg-color);
- // Hack: promote to own layer to reduce jitter
- backface-visibility: hidden;
- transition: opacity 250ms;
-
- // Repository information on hover
- &:hover {
- opacity: 0.7;
- }
-
- // Repository icon
- &__icon {
- display: inline-block;
- width: px2rem(40px);
- height: px2rem(48px);
- vertical-align: middle;
-
- // Align with margin only (as opposed to normal button alignment)
- svg {
- margin-inline-start: px2rem(12px);
- margin-top: px2rem(12px);
- }
-
- // Adjust spacing if icon is present
- + .md-source__repository {
- padding-inline-start: px2rem(40px);
- margin-inline-start: px2rem(-40px);
- }
- }
-
- // Repository name
- &__repository {
- display: inline-block;
- max-width: calc(100% - #{px2rem(24px)});
- margin-inline-start: px2rem(12px);
- overflow: hidden;
- text-overflow: ellipsis;
- vertical-align: middle;
- }
-
- // Repository facts
- &__facts {
- display: flex;
- gap: px2rem(8px);
- width: 100%;
- padding: 0;
- margin: px2rem(2px) 0 0;
- overflow: hidden;
- font-size: px2rem(11px);
- list-style-type: none;
- opacity: 0.75;
-
- // Show after the data was loaded
- .md-source__repository--active & {
- animation: facts 250ms ease-in;
- }
- }
-
- // Repository fact
- &__fact {
- overflow: hidden;
- text-overflow: ellipsis;
-
- // Show after the data was loaded
- .md-source__repository--active & {
- animation: fact 400ms ease-out;
- }
-
- // Repository fact icon
- &::before {
- display: inline-block;
- width: px2rem(12px);
- height: px2rem(12px);
- margin-inline-end: px2rem(2px);
- vertical-align: text-top;
- content: "";
- background-color: currentcolor;
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
-
- // Adjust spacing for 2nd+ fact
- &:nth-child(1n+2) {
- flex-shrink: 0;
- }
-
- // Repository fact: version
- &--version::before {
- mask-image: var(--md-source-version-icon);
- }
-
- // Repository fact: stars
- &--stars::before {
- mask-image: var(--md-source-stars-icon);
- }
-
- // Repository fact: forks
- &--forks::before {
- mask-image: var(--md-source-forks-icon);
- }
-
- // Repository fact: repositories
- &--repositories::before {
- mask-image: var(--md-source-repositories-icon);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_status.scss b/dev/src/templates/assets/stylesheets/main/components/_status.scss
deleted file mode 100644
index 9e096021..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_status.scss
+++ /dev/null
@@ -1,73 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Status variables
-:root {
- --md-status: svg-load("material/information-outline.svg");
- --md-status--new: svg-load("material/alert-decagram.svg");
- --md-status--deprecated: svg-load("material/trash-can.svg");
- --md-status--encrypted: svg-load("material/shield-lock.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Status
-.md-status {
-
- // Status icon
- &::after {
- display: inline-block;
- width: px2em(18px);
- height: px2em(18px);
- vertical-align: text-bottom;
- content: "";
- background-color: var(--md-default-fg-color--light);
- mask-image: var(--md-status);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
-
- // Status icon on hover
- &:hover::after {
- background-color: currentcolor;
- }
-
- // Status: new
- &--new::after {
- mask-image: var(--md-status--new);
- }
-
- // Status: deprecated
- &--deprecated::after {
- mask-image: var(--md-status--deprecated);
- }
-
- // Status: encrypted
- &--encrypted::after {
- mask-image: var(--md-status--encrypted);
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_tabs.scss b/dev/src/templates/assets/stylesheets/main/components/_tabs.scss
deleted file mode 100644
index 0da3384b..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_tabs.scss
+++ /dev/null
@@ -1,133 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Navigation tabs
-.md-tabs {
- // Must be higher than the z-index of the back-to-top button, or the button
- // will overlay the navigation tabs bar when scrolling up fast.
- z-index: 3;
- display: block;
- width: 100%;
- overflow: auto;
- line-height: 1.3;
- color: var(--md-primary-bg-color);
- background-color: var(--md-primary-fg-color);
-
- // [print]: Hide tabs
- @media print {
- display: none;
- }
-
- // [tablet -]: Hide tabs
- @include break-to-device(tablet) {
- display: none;
- }
-
- // Navigation tabs are hidden
- &[hidden] {
- pointer-events: none;
- }
-
- // Navigation tabs list
- &__list {
- display: flex;
- padding: 0;
- margin: 0;
- margin-inline-start: px2rem(4px);
- overflow: auto;
- white-space: nowrap;
- list-style: none;
- contain: content;
- // Hack: don't show scrollbar when navigation tabs overflow, which should
- // only happen in rare occasions, as adding too many top level sections is
- // discouraged, since hiding content on horitontal axis doesn't lead to a
- // good user experience. It's just harder to discover.
- scrollbar-width: none;
-
- // Hack: see above
- &::-webkit-scrollbar {
- display: none;
- }
- }
-
- // Navigation tabs item
- &__item {
- height: px2rem(48px);
- padding-inline: px2rem(12px);
-
- // Navigation tabs link in active navigation
- &--active .md-tabs__link {
- color: inherit;
- opacity: 1;
- }
- }
-
- // Navigation tabs link - could be defined as block elements and aligned via
- // line height, but this would imply more repaints when scrolling
- &__link {
- display: flex;
- margin-top: px2rem(16px);
- font-size: px2rem(14px);
- outline-color: var(--md-accent-fg-color);
- outline-offset: px2rem(4px);
- // Hack: save a repaint when tabs are appearing on scrolling up
- backface-visibility: hidden;
- opacity: 0.7;
- transition:
- transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),
- opacity 250ms;
-
- // Navigation tabs link on focus/hover
- &:is(:focus, :hover) {
- color: inherit;
- opacity: 1;
- }
-
- // Navigation tabs link icon
- svg {
- height: 1.3em;
- margin-inline-end: px2rem(8px);
- fill: currentcolor;
- }
-
- // Delay transitions by a small amount
- @for $i from 2 through 16 {
- .md-tabs__item:nth-child(#{$i}) & {
- transition-delay: 20ms * ($i - 1);
- }
- }
-
- // Hide tabs upon scrolling - disable transition to minimizes repaints
- // while scrolling down, while scrolling up seems to be okay
- .md-tabs[hidden] & {
- opacity: 0;
- transition:
- transform 0ms 100ms,
- opacity 100ms;
- transform: translateY(50%);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_tag.scss b/dev/src/templates/assets/stylesheets/main/components/_tag.scss
deleted file mode 100644
index 9f31829d..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_tag.scss
+++ /dev/null
@@ -1,105 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Tag variables
-:root {
- --md-tag-icon: svg-load("material/pound.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Tag list
- .md-tags {
- display: inline-flex;
- flex-wrap: wrap;
- gap: px2em(8px);
- margin-top: px2em(-2px);
- margin-bottom: px2em(12px);
- }
-
- // Tag
- .md-tag {
- display: inline-flex;
- gap: px2em(8px);
- align-items: center;
- padding: px2em(4px, 12.8px) px2em(10px, 12.8px);
- font-size: px2rem(12.8px); // Fallback
- font-size: min(px2em(12.8px), px2rem(12.8px));
- font-weight: 700;
- line-height: 1.6;
- letter-spacing: initial;
- background: var(--md-default-fg-color--lightest);
- border-radius: px2rem(48px);
-
- // Linked tag
- &[href] {
- color: inherit;
- outline: none;
- -webkit-tap-highlight-color: transparent;
- transition:
- color 125ms,
- background-color 125ms;
-
- // Linked tag on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-bg-color);
- background-color: var(--md-accent-fg-color);
- }
- }
-
- // Tag inside headline
- [id] > & {
- vertical-align: text-top;
- }
- }
-
- // Tag icon
- .md-tag-icon {
-
- // Tag icon content
- &::before {
- display: inline-block;
- width: 1.2em;
- height: 1.2em;
- vertical-align: text-bottom;
- content: "";
- background-color: var(--md-default-fg-color--lighter);
- transition: background-color 125ms;
- mask-image: var(--md-tag-icon);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
-
- // Linked tag on focus/hover
- &[href]:is(:focus, :hover)::before {
- background-color: var(--md-accent-bg-color);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_tooltip.scss b/dev/src/templates/assets/stylesheets/main/components/_tooltip.scss
deleted file mode 100644
index 421e5858..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_tooltip.scss
+++ /dev/null
@@ -1,292 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Keyframes
-// ----------------------------------------------------------------------------
-
-// Continuous pulse animation
-@keyframes pulse {
- 0% {
- transform: scale(0.95);
- }
-
- 75% {
- transform: scale(1);
- }
-
- 100% {
- transform: scale(0.95);
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Tooltip variables
-:root {
- --md-annotation-bg-icon: svg-load("material/circle.svg");
- --md-annotation-icon: svg-load("material/plus-circle.svg");
- --md-tooltip-width: #{px2rem(400px)};
-}
-
-// ----------------------------------------------------------------------------
-
-// Tooltip
-.md-tooltip {
- position: absolute;
- top: var(--md-tooltip-y);
- left:
- clamp(
- var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)},
- var(--md-tooltip-x),
- 100vw +
- var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)} -
- var(--md-tooltip-width) -
- 2 * #{px2rem(16px)}
- );
- // Hack: set an explicit `z-index` so we can transition it to ensure that any
- // following elements are not overlaying the tooltip during the transition.
- z-index: 0;
- width: var(--md-tooltip-width);
- max-width: calc(100vw - 2 * #{px2rem(16px)});
- font-family: var(--md-text-font-family);
- color: var(--md-default-fg-color);
- background-color: var(--md-default-bg-color);
- border-radius: px2rem(2px);
- box-shadow: var(--md-shadow-z2);
- opacity: 0;
- transition:
- transform 0ms 250ms,
- opacity 250ms,
- z-index 250ms;
- transform: translateY(px2rem(-8px));
- // Hack: promote to own layer to reduce jitter
- backface-visibility: hidden;
-
- // Active tooltip
- &--active {
- z-index: 2;
- opacity: 1;
- transition:
- transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1),
- opacity 250ms,
- z-index 0ms;
- transform: translateY(0);
- }
-
- // Show outline on target and for keyboard devices
- :is(.focus-visible > &, &:target) {
- outline: var(--md-accent-fg-color) auto;
- }
-
- // Tooltip wrapper
- &__inner {
- padding: px2rem(16px);
- font-size: px2rem(12.8px);
-
- // Adjust spacing on first child
- &.md-typeset > :first-child {
- margin-top: 0;
- }
-
- // Adjust spacing on last child
- &.md-typeset > :last-child {
- margin-bottom: 0;
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Annotation
-.md-annotation {
- font-weight: 400;
- white-space: normal;
- vertical-align: text-bottom;
- outline: none;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- direction: rtl;
- }
-
- // Annotation index in code block
- code & {
- font-family: var(--md-code-font-family);
- font-size: inherit;
- }
-
- // Annotation is not hidden (e.g. when copying)
- &:not([hidden]) {
- display: inline-block;
- // Hack: ensure that the line height doesn't exceed the line height of the
- // hosting line, because it will lead to dancing pixels.
- line-height: 1.25;
- }
-
- // Annotation index
- &__index {
- position: relative;
- z-index: 0;
- display: inline-block;
- margin-inline: 0.4ch;
- vertical-align: text-top;
- cursor: pointer;
- user-select: none;
- outline: none;
-
- // Hack: increase specificity to override default for anchors in typesetted
- // content, because transitions are defined on anchor elements
- .md-annotation & {
- transition: z-index 250ms;
- }
-
- // Hack: Work around Firefox bug that renders a subpixel outline when
- // rotating a mask image element.
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1671784
- overflow: hidden; // stylelint-disable-line order/properties-order
- border-radius: 0.01px;
-
- // [screen]: Render annotation markers as icons
- @media screen {
- width: 2.2ch;
-
- // Annotation is visible
- [data-md-visible] > & {
- animation: pulse 2000ms infinite;
- }
-
- // Annotation marker background
- &::before {
- position: absolute;
- top: -0.1ch;
- z-index: -1;
- width: 2.2ch;
- height: 2.2ch;
- content: "";
- background: var(--md-default-bg-color);
- mask-image: var(--md-annotation-bg-icon);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
-
- // Annotation marker – the marker must be positioned absolutely behind
- // the index, because it shouldn't impact the rendering of a code block.
- // Otherwise, small rounding differences in browsers can sometimes mess up
- // alignment of text following an annotation.
- &::after {
- position: absolute;
- top: -0.1ch;
- z-index: -1;
- width: 2.2ch;
- height: 2.2ch;
- content: "";
- background-color: var(--md-default-fg-color--lighter);
- transition:
- background-color 250ms,
- transform 250ms;
- // Hack: promote to own layer to reduce jitter
- transform: scale(1.0001);
- mask-image: var(--md-annotation-icon);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
-
- // Annotation marker for active tooltip
- .md-tooltip--active + & {
- transform: rotate(45deg);
- }
-
- // Annotation marker for active tooltip or on hover
- :is(.md-tooltip--active + &, :hover > &) {
- background-color: var(--md-accent-fg-color);
- }
- }
- }
-
- // Annotation index for active tooltip
- .md-tooltip--active + & {
- z-index: 2;
- transition-duration: 0ms;
- animation-play-state: paused;
- }
-
- // Annotation marker
- [data-md-annotation-id] {
- display: inline-block;
-
- // [print]: Render annotation markers as numbers
- @media print {
- padding: 0 0.6ch;
- font-weight: 700;
- color: var(--md-default-bg-color);
- white-space: nowrap;
- background: var(--md-default-fg-color--lighter);
- border-radius: 2ch;
-
- // Annotation marker content
- &::after {
- content: attr(data-md-annotation-id);
- }
- }
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Annotation list
- .md-annotation-list {
- list-style: none;
- counter-reset: xxx;
-
- // Annotation list item
- li {
- position: relative;
-
- // Annotation list marker
- &::before {
- position: absolute;
- top: px2em(4px);
- inset-inline-start: px2em(-34px);
- min-width: 2ch;
- height: 2ch;
- padding: 0 0.6ch;
- font-size: px2em(14.2px);
- font-weight: 700;
- line-height: 1.25;
- color: var(--md-default-bg-color);
- text-align: center;
- content: counter(xxx);
- counter-increment: xxx;
- background: var(--md-default-fg-color--lighter);
- border-radius: 2ch;
- }
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_top.scss b/dev/src/templates/assets/stylesheets/main/components/_top.scss
deleted file mode 100644
index c24d44d1..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_top.scss
+++ /dev/null
@@ -1,83 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Back-to-top button
-.md-top {
- position: fixed;
- top: px2rem(48px + 16px);
- z-index: 2;
- display: block;
- padding: px2rem(8px) px2rem(16px);
- margin-inline-start: 50%;
- font-size: px2rem(14px);
- color: var(--md-default-fg-color--light);
- cursor: pointer;
- background-color: var(--md-default-bg-color);
- border-radius: px2rem(32px);
- outline: none;
- box-shadow: var(--md-shadow-z2);
- transition:
- color 125ms,
- background-color 125ms,
- transform 125ms cubic-bezier(0.4, 0, 0.2, 1),
- opacity 125ms;
- transform: translate(-50%, 0);
-
- // [print]: Hide back-to-top button
- @media print {
- display: none;
- }
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: translate(50%, 0);
- }
-
- // Back-to-top button is hidden
- &[hidden] {
- pointer-events: none;
- opacity: 0;
- transition-duration: 0ms;
- transform: translate(-50%, px2rem(4px));
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: translate(50%, px2rem(4px));
- }
- }
-
- // Back-to-top button on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-bg-color);
- background-color: var(--md-accent-fg-color);
- }
-
- // Inline icon
- svg {
- display: inline-block;
- vertical-align: -0.5em;
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/components/_version.scss b/dev/src/templates/assets/stylesheets/main/components/_version.scss
deleted file mode 100644
index 3f85d6cd..00000000
--- a/dev/src/templates/assets/stylesheets/main/components/_version.scss
+++ /dev/null
@@ -1,150 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Keyframes
-// ----------------------------------------------------------------------------
-
-// See https://github.com/squidfunk/mkdocs-material/issues/2429
-@keyframes hoverfix {
- 0% {
- pointer-events: none;
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Version selection variables
-:root {
- --md-version-icon: svg-load("fontawesome/solid/caret-down.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Version selection
-.md-version {
- flex-shrink: 0;
- height: px2rem(48px);
- font-size: px2rem(16px);
-
- // Current selection
- &__current {
- position: relative;
- // Hack: in general, we would use `vertical-align` to align the version at
- // the bottom with the title, but since the list uses absolute positioning,
- // this won't work consistently. Furthermore, we would need to use inline
- // positioning to align the links, which looks jagged.
- top: px2rem(1px);
- margin-inline: px2rem(28px) px2rem(8px);
- color: inherit;
- cursor: pointer;
- outline: none;
-
- // Version selection icon
- &::after {
- display: inline-block;
- width: px2rem(8px);
- height: px2rem(12px);
- margin-inline-start: px2rem(8px);
- content: "";
- background-color: currentcolor;
- mask-image: var(--md-version-icon);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
- }
-
- // Version selection list
- &__list {
- position: absolute;
- top: px2rem(3px);
- z-index: 3;
- max-height: 0;
- padding: 0;
- margin: px2rem(4px) px2rem(16px);
- overflow: auto;
- color: var(--md-default-fg-color);
- list-style-type: none;
- background-color: var(--md-default-bg-color);
- border-radius: px2rem(2px);
- box-shadow: var(--md-shadow-z2);
- opacity: 0;
- transition:
- max-height 0ms 500ms,
- opacity 250ms 250ms;
- scroll-snap-type: y mandatory;
-
- // Version selection list on parent focus/hover
- .md-version:is(:focus-within, :hover) & {
- max-height: px2rem(200px);
- opacity: 1;
- transition:
- max-height 0ms,
- opacity 250ms;
- }
-
- // Fix hover on touch devices
- @media (pointer: coarse), (hover: none) {
- // Switch off on hover
- .md-version:hover & {
- animation: hoverfix 250ms forwards;
- }
-
- // Enable on focus
- .md-version:focus-within & {
- animation: none;
- }
- }
- }
-
- // Version selection item
- &__item {
- line-height: px2rem(36px);
- }
-
- // Version selection link
- &__link {
- display: block;
- width: 100%;
- padding-inline: px2rem(12px) px2rem(24px);
- white-space: nowrap;
- cursor: pointer;
- outline: none;
- transition:
- color 250ms,
- background-color 250ms;
- scroll-snap-align: start;
-
- // Link on focus/hover
- &:is(:focus, :hover) {
- color: var(--md-accent-fg-color);
- }
-
- // Link on focus
- &:focus {
- background-color: var(--md-default-fg-color--lightest);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/markdown/_admonition.scss b/dev/src/templates/assets/stylesheets/main/extensions/markdown/_admonition.scss
deleted file mode 100644
index bf517989..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/markdown/_admonition.scss
+++ /dev/null
@@ -1,195 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-@use "sass:color";
-@use "sass:list";
-
-// ----------------------------------------------------------------------------
-// Variables
-// ----------------------------------------------------------------------------
-
-/// Admonition flavours
-$admonitions: (
- "note": pencil-circle $clr-blue-a200,
- "abstract": clipboard-text $clr-light-blue-a400,
- "info": information $clr-cyan-a700,
- "tip": fire $clr-teal-a700,
- "success": check $clr-green-a700,
- "question": help-circle $clr-light-green-a700,
- "warning": alert $clr-orange-a400,
- "failure": close $clr-red-a200,
- "danger": lightning-bolt-circle $clr-red-a400,
- "bug": shield-bug $clr-pink-a400,
- "example": test-tube $clr-deep-purple-a200,
- "quote": format-quote-close $clr-grey
-) !default;
-
-// ----------------------------------------------------------------------------
-// Rules: layout
-// ----------------------------------------------------------------------------
-
-// Admonition variables
-:root {
- @each $name, $props in $admonitions {
- --md-admonition-icon--#{$name}:
- svg-load("material/#{list.nth($props, 1)}.svg");
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Admonition - note that all styles also apply to details tags, which are
- // rendered as collapsible admonitions with summary elements as titles.
- .admonition {
- display: flow-root;
- padding: 0 px2rem(12px);
- margin: px2em(20px, 12.8px) 0;
- font-size: px2rem(12.8px);
- color: var(--md-admonition-fg-color);
- background-color: var(--md-admonition-bg-color);
- border: px2rem(1.5px) solid $clr-blue-a200;
- border-radius: px2rem(4px);
- box-shadow: var(--md-shadow-z1);
- transition: box-shadow 125ms;
- page-break-inside: avoid;
-
- // [print]: Omit shadow as it may lead to rendering errors
- @media print {
- box-shadow: none;
- }
-
- // Admonition on focus
- &:focus-within {
- box-shadow: 0 0 0 px2rem(4px) color.adjust($clr-blue-a200, $alpha: -0.9);
- }
-
- // Hack: Chrome exhibits a weird issue where it will set nested elements to
- // content-box. Doesn't happen in other browsers, so looks like a bug.
- > * {
- box-sizing: border-box;
- }
-
- // Adjust vertical spacing for nested admonitions
- .admonition {
- margin-top: 1em;
- margin-bottom: 1em;
- }
-
- // Adjust spacing for contained table wrappers
- .md-typeset__scrollwrap {
- margin: 1em px2rem(-12px);
- }
-
- // Adjust spacing for contained tables
- .md-typeset__table {
- padding: 0 px2rem(12px);
- }
-
- // Adjust spacing for single-child tabbed block container
- > .tabbed-set:only-child {
- margin-top: 0;
- }
-
- // Adjust spacing on last child
- html & > :last-child {
- margin-bottom: px2rem(12px);
- }
- }
-
- // Admonition title
- .admonition-title {
- position: relative;
- padding-block: px2rem(8px);
- padding-inline: px2rem(40px) px2rem(12px);
- margin-block: 0;
- margin-inline: px2rem(-12px);
- font-weight: 700;
- background-color: color.adjust($clr-blue-a200, $alpha: -0.9);
- border: none;
- border-inline-start-width: px2rem(4px);
- border-start-start-radius: px2rem(2px);
- border-start-end-radius: px2rem(2px);
-
- // Adjust spacing for title-only admonitions
- html &:last-child {
- margin-bottom: 0;
- }
-
- // Admonition icon
- &::before {
- position: absolute;
- top: px2em(10px);
- width: px2rem(20px);
- height: px2rem(20px);
- content: "";
- background-color: $clr-blue-a200;
- inset-inline-start: px2rem(12px);
- mask-image: var(--md-admonition-icon--note);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
-
- // Inline code block
- code {
- box-shadow: 0 0 0 px2rem(1px) var(--md-default-fg-color--lightest);
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules: flavours
-// ----------------------------------------------------------------------------
-
-// Define admonition flavors
-@each $name, $props in $admonitions {
- $tint: list.nth($props, 2);
-
- // Admonition flavour
- .md-typeset .admonition.#{$name} {
- border-color: $tint;
-
- // Admonition on focus
- &:focus-within {
- box-shadow: 0 0 0 px2rem(4px) color.adjust($tint, $alpha: -0.9);
- }
- }
-
- // Admonition flavour title
- .md-typeset .#{$name} > .admonition-title {
- background-color: color.adjust($tint, $alpha: -0.9);
-
- // Admonition icon
- &::before {
- background-color: $tint;
- mask-image: var(--md-admonition-icon--#{$name});
- }
-
- // Details marker
- &::after {
- color: $tint;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/markdown/_footnotes.scss b/dev/src/templates/assets/stylesheets/main/extensions/markdown/_footnotes.scss
deleted file mode 100644
index 59447d89..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/markdown/_footnotes.scss
+++ /dev/null
@@ -1,146 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Footnotes variables
-:root {
- --md-footnotes-icon: svg-load("material/keyboard-return.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Footnote container
- .footnote {
- font-size: px2rem(12.8px);
- color: var(--md-default-fg-color--light);
-
- // Footnote list - omit left indentation
- > ol {
- margin-inline-start: 0;
-
- // Footnote item - footnote items can contain lists, so we need to scope
- // the spacing adjustments to the top-level footnote item.
- > li {
- transition: color 125ms;
-
- // Darken color on target
- &:target {
- color: var(--md-default-fg-color);
- }
-
- // Show backreferences on footnote focus without transition
- &:focus-within .footnote-backref {
- opacity: 1;
- transition: none;
- transform: translateX(0);
- }
-
- // Show backreferences on footnote hover/target
- &:is(:hover, :target) .footnote-backref {
- opacity: 1;
- transform: translateX(0);
- }
-
- // Adjust spacing on first child
- > :first-child {
- margin-top: 0;
- }
- }
- }
- }
-
- // Footnote reference
- .footnote-ref {
- font-size: px2em(12px, 16px);
- font-weight: 700;
-
- // Hack: increase specificity to override default
- html & {
- outline-offset: px2rem(2px);
- }
- }
-
- // Show outline for all devices
- [id^="fnref:"]:target > .footnote-ref {
- outline: auto;
- }
-
- // Footnote backreference
- .footnote-backref {
- display: inline-block;
- // Hack: omit Unicode arrow for replacement with icon
- font-size: 0;
- color: var(--md-typeset-a-color);
- vertical-align: text-bottom;
- opacity: 0;
- transition:
- color 250ms,
- transform 250ms 250ms,
- opacity 125ms 250ms;
- transform: translateX(px2rem(5px));
-
- // [print]: Show footnote backreferences
- @media print {
- color: var(--md-typeset-a-color);
- opacity: 1;
- transform: translateX(0);
- }
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: translateX(px2rem(-5px));
- }
-
- // Adjust color on hover
- &:hover {
- color: var(--md-accent-fg-color);
- }
-
- // Footnote backreference icon
- &::before {
- display: inline-block;
- width: px2rem(16px);
- height: px2rem(16px);
- content: "";
- background-color: currentcolor;
- mask-image: var(--md-footnotes-icon);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
-
- // Flip icon vertically
- svg {
- transform: scaleX(-1);
- }
- }
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/markdown/_toc.scss b/dev/src/templates/assets/stylesheets/main/extensions/markdown/_toc.scss
deleted file mode 100644
index 8284a5c0..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/markdown/_toc.scss
+++ /dev/null
@@ -1,92 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Headerlink
- .headerlink {
- display: inline-block;
- margin-inline-start: px2rem(10px);
- color: var(--md-default-fg-color--lighter);
- opacity: 0;
- transition:
- color 250ms,
- opacity 125ms;
-
- // [print]: Hide headerlinks
- @media print {
- display: none;
- }
- }
-
- // Show headerlinks on parent hover
- :is(:hover, :target) > .headerlink,
- .headerlink:focus {
- opacity: 1;
- transition:
- color 250ms,
- opacity 125ms;
- }
-
- // Adjust color on parent target or focus/hover
- :target > .headerlink,
- .headerlink:is(:focus, :hover) {
- color: var(--md-accent-fg-color);
- }
-
- // Adjust scroll margin for all elements with `id` attributes
- :target {
- --md-scroll-margin: #{px2rem(48px + 24px)};
- --md-scroll-offset: #{px2rem(0px)};
- // Scroll margin is finally ready for prime time - before, we used a hack
- // for anchor correction based on pseudo elements but those times are gone.
- scroll-margin-top:
- calc(
- var(--md-scroll-margin) -
- var(--md-scroll-offset)
- );
-
- // [screen +]: Sticky navigation tabs
- @include break-from-device(screen) {
-
- // Adjust scroll margin for sticky navigation tabs
- .md-header--lifted ~ .md-container & {
- --md-scroll-margin: #{px2rem(96px + 24px)};
- }
- }
- }
-
- // Adjust scroll offset for headlines of level 1-3
- :is(h1, h2, h3):target {
- --md-scroll-offset: #{px2rem(4px)};
- }
-
- // Adjust scroll offset for headlines of level 4
- h4:target {
- --md-scroll-offset: #{px2rem(3px)};
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss b/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss
deleted file mode 100644
index fe8ffd62..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss
+++ /dev/null
@@ -1,52 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Arithmatex container
- div.arithmatex {
- overflow: auto;
-
- // [mobile -]: Align with body copy
- @include break-to-device(mobile) {
- margin: 0 px2rem(-16px);
- }
-
- // Arithmatex content
- > * {
- width: min-content;
- padding: 0 px2rem(16px);
- margin-inline: auto !important; // stylelint-disable-line
- touch-action: auto;
-
- // MathJax container - see https://bit.ly/3HR8YJ5
- mjx-container {
- margin: 0 !important; // stylelint-disable-line
- }
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_critic.scss b/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_critic.scss
deleted file mode 100644
index 683705ce..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_critic.scss
+++ /dev/null
@@ -1,76 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Deletion
- del.critic {
- background-color: var(--md-typeset-del-color);
- box-decoration-break: clone;
- }
-
- // Addition
- ins.critic {
- background-color: var(--md-typeset-ins-color);
- box-decoration-break: clone;
- }
-
- // Comment
- .critic.comment {
- color: var(--md-code-hl-comment-color);
- box-decoration-break: clone;
-
- // Comment opening mark
- &::before {
- content: "/* ";
- }
-
- // Comment closing mark
- &::after {
- content: " */";
- }
- }
-
- // Critic block
- .critic.block {
- display: block;
- padding-inline: px2rem(16px);
- margin: 1em 0;
- overflow: auto;
- box-shadow: none;
-
- // Adjust spacing on first child
- > :first-child {
- margin-top: 0.5em;
- }
-
- // Adjust spacing on last child
- > :last-child {
- margin-bottom: 0.5em;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_details.scss b/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_details.scss
deleted file mode 100644
index 8eea678a..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_details.scss
+++ /dev/null
@@ -1,121 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Details variables
-:root {
- --md-details-icon: svg-load("material/chevron-right.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Details
- details {
- @extend .admonition;
-
- display: flow-root;
- padding-top: 0;
- overflow: visible;
-
- // Details title icon - rotate icon on transition to open state
- &[open] > summary::after {
- transform: rotate(90deg);
- }
-
- // Adjust spacing for details in closed state
- &:not([open]) {
- padding-bottom: 0;
- box-shadow: none;
-
- // Hack: we cannot set `overflow: hidden` on the `details` element (which
- // is why we set it to `overflow: visible`, as the outline would not be
- // visible when focusing. Therefore, we must set the border radius on the
- // summary explicitly.
- > summary {
- border-radius: px2rem(2px);
- }
- }
- }
-
- // Details title
- summary {
- @extend .admonition-title;
-
- display: block;
- min-height: px2rem(20px);
- padding-inline-end: px2rem(36px);
- cursor: pointer;
- border-start-start-radius: px2rem(2px);
- border-start-end-radius: px2rem(2px);
-
- // Show outline for keyboard devices
- &.focus-visible {
- outline-color: var(--md-accent-fg-color);
- outline-offset: px2rem(4px);
- }
-
- // Hide outline for pointer devices
- &:not(.focus-visible) {
- outline: none;
- -webkit-tap-highlight-color: transparent;
- }
-
- // Details marker
- &::after {
- position: absolute;
- top: px2em(10px);
- width: px2rem(20px);
- height: px2rem(20px);
- content: "";
- background-color: currentcolor;
- transition: transform 250ms;
- transform: rotate(0deg);
- inset-inline-end: px2rem(8px);
- mask-image: var(--md-details-icon);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: rotate(180deg);
- }
- }
-
- // Hide native details marker - modern
- &::marker {
- display: none;
- }
-
- // Hide native details marker - legacy, must be split into a seprate rule,
- // so older browsers don't consider the selector list as invalid
- &::-webkit-details-marker {
- display: none;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_emoji.scss b/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_emoji.scss
deleted file mode 100644
index 8b351013..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_emoji.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Emoji and icon container
- :is(.emojione, .twemoji, .gemoji) {
- display: inline-flex;
- height: px2em(18px);
- vertical-align: text-top;
-
- // Icon - inlined via mkdocs-material-extensions
- svg {
- width: px2em(18px);
- max-height: 100%;
- fill: currentcolor;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_highlight.scss b/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_highlight.scss
deleted file mode 100644
index 7d297677..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_highlight.scss
+++ /dev/null
@@ -1,382 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules: syntax highlighting
-// ----------------------------------------------------------------------------
-
-// Code block
-.highlight {
-
- // .o = Operator
- // .ow = Operator, word
- :is(.o, .ow) {
- color: var(--md-code-hl-operator-color);
- }
-
- .p { // Punctuation
- color: var(--md-code-hl-punctuation-color);
- }
-
- // .cpf = Comment, preprocessor file
- // .l = Literal
- // .s = Literal, string
- // .sb = Literal, string backticks
- // .sc = Literal, string char
- // .s2 = Literal, string double
- // .si = Literal, string interpol
- // .s1 = Literal, string single
- // .ss = Literal, string symbol
- :is(.cpf, .l, .s, .sb, .sc, .s2, .si, .s1, .ss) {
- color: var(--md-code-hl-string-color);
- }
-
- // .cp = Comment, pre-processor
- // .se = Literal, string escape
- // .sh = Literal, string heredoc
- // .sr = Literal, string regex
- // .sx = Literal, string other
- :is(.cp, .se, .sh, .sr, .sx) {
- color: var(--md-code-hl-special-color);
- }
-
- // .m = Number
- // .mb = Number, binary
- // .mf = Number, float
- // .mh = Number, hex
- // .mi = Number, integer
- // .il = Number, integer long
- // .mo = Number, octal
- :is(.m, .mb, .mf, .mh, .mi, .il, .mo) {
- color: var(--md-code-hl-number-color);
- }
-
- // .k = Keyword,
- // .kd = Keyword, declaration
- // .kn = Keyword, namespace
- // .kp = Keyword, pseudo
- // .kr = Keyword, reserved
- // .kt = Keyword, type
- :is(.k, .kd, .kn, .kp, .kr, .kt) {
- color: var(--md-code-hl-keyword-color);
- }
-
- // .kc = Keyword, constant
- // .n = Name
- :is(.kc, .n) {
- color: var(--md-code-hl-name-color);
- }
-
- // .no = Name, constant
- // .nb = Name, builtin
- // .bp = Name, builtin pseudo
- :is(.no, .nb, .bp) {
- color: var(--md-code-hl-constant-color);
- }
-
- // .nc = Name, class
- // .ne = Name, exception
- // .nf = Name, function
- // .nn = Name, namespace
- :is(.nc, .ne, .nf, .nn) {
- color: var(--md-code-hl-function-color);
- }
-
- // .nd = Name, decorator
- // .ni = Name, entity
- // .nl = Name, label
- // .nt = Name, tag
- :is(.nd, .ni, .nl, .nt) {
- color: var(--md-code-hl-keyword-color);
- }
-
- // .c = Comment
- // .cm = Comment, multiline
- // .c1 = Comment, single
- // .ch = Comment, shebang
- // .cs = Comment, special
- // .sd = Literal, string doc
- :is(.c, .cm, .c1, .ch, .cs, .sd) {
- color: var(--md-code-hl-comment-color);
- }
-
- // .na = Name, attribute
- // .nv = Variable,
- // .vc = Variable, class
- // .vg = Variable, global
- // .vi = Variable, instance
- :is(.na, .nv, .vc, .vg, .vi) {
- color: var(--md-code-hl-variable-color);
- }
-
- // .ge = Generic, emph
- // .gr = Generic, error
- // .gh = Generic, heading
- // .go = Generic, output
- // .gp = Generic, prompt
- // .gs = Generic, strong
- // .gu = Generic, subheading
- // .gt = Generic, traceback
- :is(.ge, .gr, .gh, .go, .gp, .gs, .gu, .gt) {
- color: var(--md-code-hl-generic-color);
- }
-
- // .gd = Diff, delete
- // .gi = Diff, insert
- :is(.gd, .gi) {
- padding: 0 px2em(2px);
- margin: 0 px2em(-2px);
- border-radius: px2rem(2px);
- }
-
- .gd { // Diff, delete
- background-color: var(--md-typeset-del-color);
- }
-
- .gi { // Diff, insert
- background-color: var(--md-typeset-ins-color);
- }
-
- // Highlighted line
- .hll {
- display: block;
- padding: 0 px2em(16px, 13.6px);
- margin: 0 px2em(-16px, 13.6px);
- background-color: var(--md-code-hl-color--light);
- box-shadow: 2px 0 0 0 var(--md-code-hl-color) inset;
- }
-
- // Code block title
- span.filename {
- position: relative;
- display: flow-root;
- padding: px2em(9px, 13.6px) px2em(16px, 13.6px);
- margin-top: 1em;
- font-size: px2em(13.6px);
- font-weight: 700;
- background-color: var(--md-code-bg-color);
- border-bottom: px2rem(1px) solid var(--md-default-fg-color--lightest);
- border-top-left-radius: px2rem(2px);
- border-top-right-radius: px2rem(2px);
-
- // Adjust spacing for code block
- + pre {
- margin-top: 0;
-
- // Remove rounded border on top side
- > code {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- }
- }
- }
-
- // Code block line numbers (pymdownx-inline)
- [data-linenos]::before {
- position: sticky;
- left: px2em(-16px, 13.6px);
- // A `z-index` of 3 is necessary for ensuring that code block annotations
- // don't overlay line numbers, as active annotations have a `z-index` of 2.
- z-index: 3;
- float: left;
- padding-left: px2em(16px, 13.6px);
- margin-right: px2em(16px, 13.6px);
- margin-left: px2em(-16px, 13.6px);
- color: var(--md-default-fg-color--light);
- content: attr(data-linenos);
- user-select: none;
- background-color: var(--md-code-bg-color);
- box-shadow: px2rem(-1px) 0 var(--md-default-fg-color--lightest) inset;
- }
-
- // Code block line anchors - Chrome and Safari seem to have a strange bug
- // where scroll margin is not applied to anchors inside code blocks. Setting
- // positioning to absolute seems to fix the problem. Interestingly, this does
- // not happen in Firefox. Furthermore we must set `visibility: hidden` or
- // the copy to clipboard functionality will include an empty line between
- // each set of lines.
- code a[id] {
- position: absolute;
- visibility: hidden;
- }
-
- // Copying in progress - this class is set before the content is copied and
- // removed after copying is done to mitigate whitespace-related issues.
- code[data-md-copying] {
-
- // Temporarily remove highlighted lines - see https://bit.ly/32iVGWh
- .hll {
- display: contents;
- }
-
- // Temporarily remove annotations
- .md-annotation {
- display: none;
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules: layout
-// ----------------------------------------------------------------------------
-
-// Code block with line numbers
-.highlighttable {
- display: flow-root;
-
- // Set table elements to block layout, because otherwise the whole flexbox
- // hacking won't work correctly
- :is(tbody, td) {
- display: block;
- padding: 0;
- }
-
- // We need to use flexbox layout, because otherwise it's not possible to
- // make the code container scroll while keeping the line numbers static
- tr {
- display: flex;
- }
-
- // The pre tags are nested inside a table, so we need to omit the margin
- // because it collapses below all the overflows
- pre {
- margin: 0;
- }
-
- // Code block title container
- th.filename {
- flex-grow: 1;
- padding: 0;
- text-align: left;
-
- // Adjust spacing
- span.filename {
- margin-top: 0;
- }
- }
-
- // Code block line numbers - disable user selection, so code can be easily
- // copied without accidentally also copying the line numbers
- .linenos {
- padding: px2em(10.5px, 13.6px) px2em(16px, 13.6px);
- padding-right: 0;
- font-size: px2em(13.6px);
- user-select: none;
- background-color: var(--md-code-bg-color);
- border-top-left-radius: px2rem(2px);
- border-bottom-left-radius: px2rem(2px);
- }
-
- // Code block line numbers container
- .linenodiv {
- padding-right: px2em(8px, 13.6px);
- box-shadow: px2rem(-1px) 0 var(--md-default-fg-color--lightest) inset;
-
- // Adjust colors and alignment
- pre {
- color: var(--md-default-fg-color--light);
- text-align: right;
- }
- }
-
- // Code block container - stretch to remaining space
- .code {
- flex: 1;
- min-width: 0;
- }
-}
-
-// Code block line numbers container
-.linenodiv a {
- color: inherit;
-}
-
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Code block with line numbers - unfortunately, these selectors need to be
- // overly specific so they don't bleed into code blocks in annotations.
- .highlighttable {
- margin: 1em 0;
- direction: ltr;
-
- // Remove rounded borders on code blocks
- > tbody > tr > .code > div > pre > code {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
- }
-
- // Code block result container
- .highlight + .result {
- padding: 0 px2em(16px);
- margin-top: calc(-1em + #{px2em(-2px)});
- overflow: visible;
- border: px2rem(1px) solid var(--md-code-bg-color);
- border-top-width: px2rem(2px);
- border-bottom-right-radius: px2rem(2px);
- border-bottom-left-radius: px2rem(2px);
-
- // Clearfix, because we can't use overflow: auto
- &::after {
- display: block;
- clear: both;
- content: "";
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules: top-level
-// ----------------------------------------------------------------------------
-
-// [mobile -]: Align with body copy
-@include break-to-device(mobile) {
-
- // Top-level code block
- .md-content__inner > .highlight {
- margin: 1em px2rem(-16px);
-
- // Remove rounded borders
- > .filename,
- > pre > code {
- border-radius: 0;
- }
-
- // Code block with line numbers - unfortunately, these selectors need to be
- // overly specific so they don't bleed into code blocks in annotations.
- > .highlighttable > tbody > tr > .filename span.filename,
- > .highlighttable > tbody > tr > .linenos,
- > .highlighttable > tbody > tr > .code > div > pre > code {
- border-radius: 0;
- }
-
- // Code block result container
- + .result {
- margin-inline: px2rem(-16px);
- border-inline-width: 0;
- border-radius: 0;
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_keys.scss b/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_keys.scss
deleted file mode 100644
index 8749f08c..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_keys.scss
+++ /dev/null
@@ -1,115 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Keyboard key
- .keys {
-
- // Keyboard key icon
- kbd:is(::before, ::after) {
- position: relative;
- margin: 0;
- color: inherit;
- -moz-osx-font-smoothing: initial;
- -webkit-font-smoothing: initial;
- }
-
- // Surrounding text
- span {
- padding: 0 px2em(3.2px);
- color: var(--md-default-fg-color--light);
- }
-
- // Define keyboard keys with left icon
- @each $name, $code in (
-
- // Modifiers
- "alt": "\2387",
- "left-alt": "\2387",
- "right-alt": "\2387",
- "command": "\2318",
- "left-command": "\2318",
- "right-command": "\2318",
- "control": "\2303",
- "left-control": "\2303",
- "right-control": "\2303",
- "meta": "\25C6",
- "left-meta": "\25C6",
- "right-meta": "\25C6",
- "option": "\2325",
- "left-option": "\2325",
- "right-option": "\2325",
- "shift": "\21E7",
- "left-shift": "\21E7",
- "right-shift": "\21E7",
- "super": "\2756",
- "left-super": "\2756",
- "right-super": "\2756",
- "windows": "\229E",
- "left-windows": "\229E",
- "right-windows": "\229E",
-
- // Other keys
- "arrow-down": "\2193",
- "arrow-left": "\2190",
- "arrow-right": "\2192",
- "arrow-up": "\2191",
- "backspace": "\232B",
- "backtab": "\21E4",
- "caps-lock": "\21EA",
- "clear": "\2327",
- "context-menu": "\2630",
- "delete": "\2326",
- "eject": "\23CF",
- "end": "\2913",
- "escape": "\238B",
- "home": "\2912",
- "insert": "\2380",
- "page-down": "\21DF",
- "page-up": "\21DE",
- "print-screen": "\2399"
- ) {
- .key-#{$name}::before {
- padding-right: px2em(6.4px);
- content: $code;
- }
- }
-
- // Define keyboard keys with right icon
- @each $name, $code in (
- "tab": "\21E5",
- "num-enter": "\2324",
- "enter": "\23CE"
- ) {
- .key-#{$name}::after {
- padding-left: px2em(6.4px);
- content: $code;
- }
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss b/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss
deleted file mode 100644
index 9df91bfc..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss
+++ /dev/null
@@ -1,400 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Tabbed variables
-:root {
- --md-tabbed-icon--prev: svg-load("material/chevron-left.svg");
- --md-tabbed-icon--next: svg-load("material/chevron-right.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Tabbed container
- .tabbed-set {
- position: relative;
- display: flex;
- flex-flow: column wrap;
- margin: 1em 0;
- border-radius: px2rem(2px);
-
- // Tab radio button - the Tabbed extension will generate radio buttons with
- // labels, so tabs can be triggered without the necessity for JavaScript.
- // This is pretty cool, as it has great accessibility out-of-the box, so
- // we just hide the radio button and toggle the label color for indication.
- > input {
- position: absolute;
- width: 0;
- height: 0;
- opacity: 0;
-
- // Adjust scroll margin
- &:target {
- --md-scroll-offset: #{px2em(10px, 16px)};
- }
-
- // Tab label states
- @for $i from 20 through 1 {
- &:nth-child(#{$i}) {
-
- // Tab is active
- &:checked {
-
- // Tab label
- ~ .tabbed-labels > :nth-child(#{$i}) {
- @extend %tabbed-label;
- }
-
- // Tab content
- ~ .tabbed-content > :nth-child(#{$i}) {
- @extend %tabbed-content;
- }
- }
-
- // Tab label on keyboard focus
- &.focus-visible ~ .tabbed-labels > :nth-child(#{$i}) {
- @extend %tabbed-label-focus-visible;
- }
- }
- }
-
- // Tab indicator on keyboard focus
- &.focus-visible ~ .tabbed-labels::before {
- background-color: var(--md-accent-fg-color);
- }
- }
- }
-
- // Tabbed labels
- .tabbed-labels {
- display: flex;
- max-width: 100%;
- overflow: auto;
- box-shadow: 0 px2rem(-1px) var(--md-default-fg-color--lightest) inset;
- -ms-overflow-style: none; // IE, Edge
- scrollbar-width: none; // Firefox
-
- // [print]: Move one layer up for ordering
- @media print {
- display: contents;
- }
-
- // [screen and no reduced motion]: Disable animation
- @media screen {
-
- // [js]: Show animated tab indicator
- .js & {
- position: relative;
-
- // Tab indicator
- &::before {
- position: absolute;
- bottom: 0;
- left: 0;
- display: block;
- width: var(--md-indicator-width);
- height: 2px;
- content: "";
- background: var(--md-default-fg-color);
- transition:
- width 225ms,
- background-color 250ms,
- transform 250ms;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transform: translateX(var(--md-indicator-x));
- }
- }
- }
-
- // Webkit scrollbar
- &::-webkit-scrollbar {
- display: none; // Chrome, Safari
- }
-
- // Tab label
- > label {
- flex-shrink: 0;
- width: auto;
- padding: px2em(10px, 12.8px) 1.25em px2em(8px, 12.8px);
- font-size: px2rem(12.8px);
- font-weight: 700;
- color: var(--md-default-fg-color--light);
- white-space: nowrap;
- cursor: pointer;
- border-bottom: px2rem(2px) solid transparent;
- border-radius: px2rem(2px) px2rem(2px) 0 0;
- transition:
- background-color 250ms,
- color 250ms;
- scroll-margin-inline-start: px2rem(20px);
-
- // [print]: Intersperse labels with containers
- @media print {
-
- // Ensure correct order of labels
- @for $i from 1 through 20 {
- &:nth-child(#{$i}) {
- order: $i;
- }
- }
- }
-
- // Tab label on hover
- &:hover {
- color: var(--md-default-fg-color);
- }
- }
- }
-
- // Tabbed content
- .tabbed-content {
- width: 100%;
-
- // [print]: Move one layer up for ordering
- @media print {
- display: contents;
- }
- }
-
- // Tabbed block
- .tabbed-block {
- display: none;
-
- // [print]: Intersperse labels with containers
- @media print {
- display: block;
-
- // Ensure correct order of containers
- @for $i from 1 through 20 {
- &:nth-child(#{$i}) {
- order: $i;
- }
- }
- }
-
- // Code block is the first child of a tab - remove margin and mirror
- // previous (now deprecated) SuperFences code block grouping behavior
- > pre:first-child,
- > .highlight:first-child > pre {
- margin: 0;
-
- // Remove rounded borders on code block
- > code {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- }
- }
-
- // Code block is the first child of a tab - remove margin and mirror
- // previous (now deprecated) SuperFences code block grouping behavior
- > .highlight:first-child {
-
- // Code block title - remove spacing and rounded borders
- > .filename {
- margin: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- }
-
- // Code block with line numbers - unfortunately, these selectors need to
- // be overly specific so they don't bleed into code blocks in annotations.
- > .highlighttable {
- margin: 0;
-
- // Remove rounded borders on line numbers and titles
- > tbody > tr > .filename span.filename,
- > tbody > tr > .linenos {
- margin: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- }
-
- // Remove rounded borders on code blocks
- > tbody > tr > .code > div > pre > code {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- }
- }
-
- // Code block result container - adjust spacing
- + .result {
- margin-top: px2em(-2px);
- }
- }
-
- // Adjust spacing for nested tabbed container
- > .tabbed-set {
- margin: 0;
- }
- }
-
- // Tabbed button
- .tabbed-button {
- display: block;
- align-self: center;
- width: px2rem(18px);
- height: px2rem(18px);
- margin-top: px2rem(2px);
- color: var(--md-default-fg-color--light);
- pointer-events: initial;
- cursor: pointer;
- border-radius: 100%;
- transition: background-color 250ms;
-
- // Tabbed button on hover
- &:hover {
- color: var(--md-accent-fg-color);
- background-color: var(--md-accent-fg-color--transparent);
- }
-
- // Tabbed button icon
- &::after {
- display: block;
- width: 100%;
- height: 100%;
- content: "";
- background-color: currentcolor;
- transition:
- background-color 250ms,
- transform 250ms;
- mask-image: var(--md-tabbed-icon--prev);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
- }
-
- // Tabbed control
- .tabbed-control {
- position: absolute;
- display: flex;
- justify-content: start;
- width: px2rem(24px);
- height: px2rem(38px);
- pointer-events: none;
- background:
- linear-gradient(
- to right,
- var(--md-default-bg-color) 60%,
- transparent
- );
- transition: opacity 125ms;
-
- // Adjust for right-to-left languages
- [dir="rtl"] & {
- transform: rotate(180deg);
- }
-
- // Tabbed control is hidden
- &[hidden] {
- opacity: 0;
- }
-
- // Tabbed control next
- &--next {
- right: 0;
- justify-content: end;
- background:
- linear-gradient(
- to left,
- var(--md-default-bg-color) 60%,
- transparent
- );
-
- // Tabbed button icon content
- .tabbed-button::after {
- mask-image: var(--md-tabbed-icon--next);
- }
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules: top-level
-// ----------------------------------------------------------------------------
-
-// [mobile -]: Align with body copy
-@include break-to-device(mobile) {
-
- // Top-level tabbed labels
- .md-content__inner > .tabbed-set .tabbed-labels {
- max-width: 100vw;
- padding-inline-start: px2rem(16px);
- margin: 0 px2rem(-16px);
- scroll-padding-inline-start: px2rem(16px);
-
- // Hack: some browsers ignore the right padding on flex containers,
- // see https://bit.ly/3lsPS3S
- &::after {
- padding-inline-end: px2rem(16px);
- content: "";
- }
-
- // Tabbed control previous
- ~ .tabbed-control--prev {
- width: px2rem(40px);
- padding-inline-start: px2rem(16px);
- margin-inline-start: px2rem(-16px);
- }
-
- // Tabbed control next
- ~ .tabbed-control--next {
- width: px2rem(40px);
- padding-inline-end: px2rem(16px);
- margin-inline-end: px2rem(-16px);
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// Placeholders: improve colocation for better compression
-// ----------------------------------------------------------------------------
-
-// Tab label placeholder
-%tabbed-label {
-
- // [screen]: Show active state
- @media screen {
- color: var(--md-default-fg-color);
-
- // [no-js]: Show border (indicator is animated with JavaScript)
- .no-js & {
- border-color: var(--md-default-fg-color);
- }
- }
-}
-
-// Tab label on keyboard focus placeholder
-%tabbed-label-focus-visible {
- color: var(--md-accent-fg-color);
-}
-
-// Tab content placeholder
-%tabbed-content {
- display: block;
-}
diff --git a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss b/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss
deleted file mode 100644
index a1d1117c..00000000
--- a/dev/src/templates/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss
+++ /dev/null
@@ -1,78 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Tasklist variables
-:root {
- --md-tasklist-icon: svg-load("octicons/check-circle-fill-24.svg");
- --md-tasklist-icon--checked: svg-load("octicons/check-circle-fill-24.svg");
-}
-
-// ----------------------------------------------------------------------------
-
-// Scoped in typesetted content to match specificity of regular content
-.md-typeset {
-
- // Tasklist item
- .task-list-item {
- position: relative;
- list-style-type: none;
-
- // Make checkbox items align with normal list items, but position
- // everything in ems for correct layout at smaller font sizes
- [type="checkbox"] {
- position: absolute;
- top: 0.45em;
- inset-inline-start: -2em;
- }
- }
-
- // Hide native checkbox, when custom classes are enabled
- .task-list-control [type="checkbox"] {
- z-index: -1;
- opacity: 0;
- }
-
- // Tasklist indicator in unchecked state
- .task-list-indicator::before {
- position: absolute;
- top: 0.15em;
- width: px2em(20px);
- height: px2em(20px);
- content: "";
- background-color: var(--md-default-fg-color--lightest);
- inset-inline-start: px2em(-24px);
- mask-image: var(--md-tasklist-icon);
- mask-position: center;
- mask-repeat: no-repeat;
- mask-size: contain;
- }
-
- // Tasklist indicator in checked state
- [type="checkbox"]:checked + .task-list-indicator::before {
- background-color: $clr-green-a400;
- mask-image: var(--md-tasklist-icon--checked);
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/main/integrations/_mermaid.scss b/dev/src/templates/assets/stylesheets/main/integrations/_mermaid.scss
deleted file mode 100644
index d0325f39..00000000
--- a/dev/src/templates/assets/stylesheets/main/integrations/_mermaid.scss
+++ /dev/null
@@ -1,67 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Mermaid variables
-:root > * {
- --md-mermaid-font-family: var(--md-text-font-family), sans-serif;
-
- // General colors
- --md-mermaid-edge-color: var(--md-code-fg-color);
- --md-mermaid-node-bg-color: var(--md-accent-fg-color--transparent);
- --md-mermaid-node-fg-color: var(--md-accent-fg-color);
- --md-mermaid-label-bg-color: var(--md-default-bg-color);
- --md-mermaid-label-fg-color: var(--md-code-fg-color);
-
- // Sequence diagram colors
- --md-mermaid-sequence-actor-bg-color: var(--md-mermaid-label-bg-color);
- --md-mermaid-sequence-actor-fg-color: var(--md-mermaid-label-fg-color);
- --md-mermaid-sequence-actor-border-color: var(--md-mermaid-node-fg-color);
- --md-mermaid-sequence-actor-line-color: var(--md-default-fg-color--lighter);
- --md-mermaid-sequence-actorman-bg-color: var(--md-mermaid-label-bg-color);
- --md-mermaid-sequence-actorman-line-color: var(--md-mermaid-node-fg-color);
- --md-mermaid-sequence-box-bg-color: var(--md-mermaid-node-bg-color);
- --md-mermaid-sequence-box-fg-color: var(--md-mermaid-edge-color);
- --md-mermaid-sequence-label-bg-color: var(--md-mermaid-node-bg-color);
- --md-mermaid-sequence-label-fg-color: var(--md-mermaid-node-fg-color);
- --md-mermaid-sequence-loop-bg-color: var(--md-mermaid-node-bg-color);
- --md-mermaid-sequence-loop-fg-color: var(--md-mermaid-edge-color);
- --md-mermaid-sequence-loop-border-color: var(--md-mermaid-node-fg-color);
- --md-mermaid-sequence-message-fg-color: var(--md-mermaid-edge-color);
- --md-mermaid-sequence-message-line-color: var(--md-mermaid-edge-color);
- --md-mermaid-sequence-note-bg-color: var(--md-mermaid-label-bg-color);
- --md-mermaid-sequence-note-fg-color: var(--md-mermaid-edge-color);
- --md-mermaid-sequence-note-border-color: var(--md-mermaid-label-fg-color);
- --md-mermaid-sequence-number-bg-color: var(--md-mermaid-node-fg-color);
- --md-mermaid-sequence-number-fg-color: var(--md-accent-bg-color);
-}
-
-// ----------------------------------------------------------------------------
-
-// Mermaid container
-.mermaid {
- margin: 1em 0;
- line-height: normal;
-}
diff --git a/dev/src/material/templates/assets/stylesheets/palette.356b1318.min.css b/dev/src/templates/assets/stylesheets/palette.356b1318.min.css
index 141eb5f9..141eb5f9 100644
--- a/dev/src/material/templates/assets/stylesheets/palette.356b1318.min.css
+++ b/dev/src/templates/assets/stylesheets/palette.356b1318.min.css
diff --git a/dev/src/material/templates/assets/stylesheets/palette.356b1318.min.css.map b/dev/src/templates/assets/stylesheets/palette.356b1318.min.css.map
index 4627b687..4627b687 100644
--- a/dev/src/material/templates/assets/stylesheets/palette.356b1318.min.css.map
+++ b/dev/src/templates/assets/stylesheets/palette.356b1318.min.css.map
diff --git a/dev/src/templates/assets/stylesheets/palette.scss b/dev/src/templates/assets/stylesheets/palette.scss
deleted file mode 100644
index ff73a982..00000000
--- a/dev/src/templates/assets/stylesheets/palette.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Dependencies
-// ----------------------------------------------------------------------------
-
-@import "material-color";
-
-// ----------------------------------------------------------------------------
-// Local imports
-// ----------------------------------------------------------------------------
-
-@import "utilities/break";
-@import "utilities/convert";
-
-@import "config";
-
-@import "palette/scheme";
-@import "palette/accent";
-@import "palette/primary";
diff --git a/dev/src/templates/assets/stylesheets/palette/_accent.scss b/dev/src/templates/assets/stylesheets/palette/_accent.scss
deleted file mode 100644
index 9f69b596..00000000
--- a/dev/src/templates/assets/stylesheets/palette/_accent.scss
+++ /dev/null
@@ -1,61 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Define accent colors
-@each $name, $color in (
- "red": $clr-red-a400,
- "pink": $clr-pink-a400,
- "purple": $clr-purple-a200,
- "deep-purple": $clr-deep-purple-a200,
- "indigo": $clr-indigo-a200,
- "blue": $clr-blue-a200,
- "light-blue": $clr-light-blue-a700,
- "cyan": $clr-cyan-a700,
- "teal": $clr-teal-a700,
- "green": $clr-green-a700,
- "light-green": $clr-light-green-a700,
- "lime": $clr-lime-a700,
- "yellow": $clr-yellow-a700,
- "amber": $clr-amber-a700,
- "orange": $clr-orange-a400,
- "deep-orange": $clr-deep-orange-a200
-) {
-
- // Color palette
- [data-md-color-accent="#{$name}"] {
- --md-accent-fg-color: hsla(#{hex2hsl($color)}, 1);
- --md-accent-fg-color--transparent: hsla(#{hex2hsl($color)}, 0.1);
-
- // Inverted text for lighter shades
- @if index("lime" "yellow" "amber" "orange", $name) {
- --md-accent-bg-color: hsla(0, 0%, 0%, 0.87);
- --md-accent-bg-color--light: hsla(0, 0%, 0%, 0.54);
- } @else {
- --md-accent-bg-color: hsla(0, 0%, 100%, 1);
- --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/palette/_primary.scss b/dev/src/templates/assets/stylesheets/palette/_primary.scss
deleted file mode 100644
index a8653f0f..00000000
--- a/dev/src/templates/assets/stylesheets/palette/_primary.scss
+++ /dev/null
@@ -1,203 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-@use "sass:list";
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Define primary colors
-@each $name, $colors in (
- "red": $clr-red-400 $clr-red-300 $clr-red-600,
- "pink": $clr-pink-500 $clr-pink-400 $clr-pink-700,
- "purple": $clr-purple-400 $clr-purple-300 $clr-purple-600,
- "deep-purple": $clr-deep-purple-400 $clr-deep-purple-300 $clr-deep-purple-500,
- "indigo": $clr-indigo-500 $clr-indigo-400 $clr-indigo-700,
- "blue": $clr-blue-500 $clr-blue-400 $clr-blue-700,
- "light-blue": $clr-light-blue-500 $clr-light-blue-400 $clr-light-blue-700,
- "cyan": $clr-cyan-500 $clr-cyan-400 $clr-cyan-700,
- "teal": $clr-teal-500 $clr-teal-400 $clr-teal-700,
- "green": $clr-green-500 $clr-green-400 $clr-green-700,
- "light-green": $clr-light-green-500 $clr-light-green-400 $clr-light-green-700,
- "lime": $clr-lime-500 $clr-lime-400 $clr-lime-700,
- "yellow": $clr-yellow-500 $clr-yellow-400 $clr-yellow-700,
- "amber": $clr-amber-500 $clr-amber-400 $clr-amber-700,
- "orange": $clr-orange-400 $clr-orange-400 $clr-orange-600,
- "deep-orange": $clr-deep-orange-400 $clr-deep-orange-300 $clr-deep-orange-600,
- "brown": $clr-brown-500 $clr-brown-400 $clr-brown-700,
- "grey": $clr-grey-600 $clr-grey-500 $clr-grey-700,
- "blue-grey": $clr-blue-grey-600 $clr-blue-grey-500 $clr-blue-grey-700
-) {
-
- // Color palette
- [data-md-color-primary="#{$name}"] {
- --md-primary-fg-color: hsl(#{hex2hsl(list.nth($colors, 1))});
- --md-primary-fg-color--light: hsl(#{hex2hsl(list.nth($colors, 2))});
- --md-primary-fg-color--dark: hsl(#{hex2hsl(list.nth($colors, 3))});
-
- // Inverted text for lighter shades
- @if index("lime" "yellow" "amber" "orange", $name) {
- --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);
- --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);
- } @else {
- --md-primary-bg-color: hsla(0, 0%, 100%, 1);
- --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);
- }
-
- // Typeset color shades
- @if index("grey" "blue-grey", $name) {
- --md-typeset-a-color: hsl(#{hex2hsl($clr-indigo-500)});
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Adjust link colors for light primary colors
-@each $name, $color in (
- "light-green": hsl(88, 58%, 43%),
- "lime": hsl(66, 88%, 32%),
- "yellow": hsl(54, 100%, 36%),
- "amber": hsl(45, 100%, 41%),
- "orange": hsl(36, 100%, 45%)
-) {
- [data-md-color-primary="#{$name}"]:not([data-md-color-scheme="slate"]) {
- --md-typeset-a-color: #{$color};
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules: white
-// ----------------------------------------------------------------------------
-
-// Define primary colors for white
-[data-md-color-primary="white"] {
- --md-primary-fg-color: hsla(var(--md-hue), 0%, 100%, 1);
- --md-primary-fg-color--light: hsla(var(--md-hue), 0%, 100%, 0.7);
- --md-primary-fg-color--dark: hsla(var(--md-hue), 0%, 0%, 0.07);
- --md-primary-bg-color: hsla(var(--md-hue), 0%, 0%, 0.87);
- --md-primary-bg-color--light: hsla(var(--md-hue), 0%, 0%, 0.54);
-
- // Typeset `a` color shades
- --md-typeset-a-color: hsl(#{hex2hsl($clr-indigo-500)});
-
- // Form button
- .md-button {
- color: var(--md-typeset-a-color);
-
- // Primary button
- &--primary {
- color: hsla(var(--md-hue), 0%, 100%, 1);
- background-color: var(--md-typeset-a-color);
- border-color: var(--md-typeset-a-color);
- }
- }
-
- // [tablet portrait +]: Header-embedded search
- @include break-from-device(tablet landscape) {
-
- // Search form
- .md-search__form {
- background-color: hsla(var(--md-hue), 0%, 0%, 0.07);
-
- // Search form on hover
- &:hover {
- background-color: hsla(var(--md-hue), 0%, 0%, 0.32);
- }
- }
-
- // Search icon
- .md-search__input + .md-search__icon {
- color: hsla(var(--md-hue), 0%, 0%, 0.87);
- }
- }
-
- // [screen +]: Add bottom border for tabs
- @include break-from-device(screen) {
-
- // Navigation tabs
- .md-tabs {
- border-bottom: px2rem(1px) solid hsla(0, 0%, 0%, 0.07);
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// Rules: black
-// ----------------------------------------------------------------------------
-
-// Define primary colors for black
-[data-md-color-primary="black"] {
- --md-primary-fg-color: hsla(var(--md-hue), 15%, 9%, 1);
- --md-primary-fg-color--light: hsla(var(--md-hue), 15%, 9%, 0.54);
- --md-primary-fg-color--dark: hsla(var(--md-hue), 15%, 9%, 1);
- --md-primary-bg-color: hsla(var(--md-hue), 15%, 100%, 1);
- --md-primary-bg-color--light: hsla(var(--md-hue), 15%, 100%, 0.7);
-
- // Typeset `a` color shades
- --md-typeset-a-color: hsl(#{hex2hsl($clr-indigo-500)});
-
- // Form button
- .md-button {
- color: var(--md-typeset-a-color);
-
- // Primary button
- &--primary {
- color: hsla(var(--md-hue), 0%, 100%, 1);
- background-color: var(--md-typeset-a-color);
- border-color: var(--md-typeset-a-color);
- }
- }
-
- // Header
- .md-header {
- background-color: hsla(var(--md-hue), 15%, 9%, 1);
- }
-
- // [tablet portrait -]: Layered navigation
- @include break-to-device(tablet portrait) {
-
- // Repository information container
- .md-nav__source {
- background-color: hsla(var(--md-hue), 15%, 11%, 0.87);
- }
- }
-
- // [tablet -]: Layered navigation
- @include break-to-device(tablet) {
-
- // Site title in main navigation
- html & .md-nav--primary .md-nav__title[for="__drawer"] {
- background-color: hsla(var(--md-hue), 15%, 9%, 1);
- }
- }
-
- // [screen +]: Set background color for tabs
- @include break-from-device(screen) {
-
- // Navigation tabs
- .md-tabs {
- background-color: hsla(var(--md-hue), 15%, 9%, 1);
- }
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/palette/_scheme.scss b/dev/src/templates/assets/stylesheets/palette/_scheme.scss
deleted file mode 100644
index 0a9f9823..00000000
--- a/dev/src/templates/assets/stylesheets/palette/_scheme.scss
+++ /dev/null
@@ -1,145 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-// ----------------------------------------------------------------------------
-// Rules
-// ----------------------------------------------------------------------------
-
-// Only use dark mode on screens
-@media screen {
-
- // Slate theme, i.e. dark mode
- [data-md-color-scheme="slate"] {
-
- // Indicate that the site is rendered with a dark color scheme
- color-scheme: dark;
-
- // Default color shades
- --md-default-fg-color: hsla(var(--md-hue), 15%, 90%, 0.82);
- --md-default-fg-color--light: hsla(var(--md-hue), 15%, 90%, 0.56);
- --md-default-fg-color--lighter: hsla(var(--md-hue), 15%, 90%, 0.32);
- --md-default-fg-color--lightest: hsla(var(--md-hue), 15%, 90%, 0.12);
- --md-default-bg-color: hsla(var(--md-hue), 15%, 14%, 1);
- --md-default-bg-color--light: hsla(var(--md-hue), 15%, 14%, 0.54);
- --md-default-bg-color--lighter: hsla(var(--md-hue), 15%, 14%, 0.26);
- --md-default-bg-color--lightest: hsla(var(--md-hue), 15%, 14%, 0.07);
-
- // Code color shades
- --md-code-fg-color: hsla(var(--md-hue), 18%, 86%, 0.82);
- --md-code-bg-color: hsla(var(--md-hue), 15%, 18%, 1);
-
- // Code highlighting color shades
- --md-code-hl-color--light: hsla(#{hex2hsl($clr-blue-a200)}, 0.15);
- --md-code-hl-number-color: hsla(6, 74%, 63%, 1);
- --md-code-hl-special-color: hsla(340, 83%, 66%, 1);
- --md-code-hl-function-color: hsla(291, 57%, 65%, 1);
- --md-code-hl-constant-color: hsla(250, 62%, 70%, 1);
- --md-code-hl-keyword-color: hsla(219, 66%, 64%, 1);
- --md-code-hl-string-color: hsla(150, 58%, 44%, 1);
- --md-code-hl-name-color: var(--md-code-fg-color);
- --md-code-hl-operator-color: var(--md-default-fg-color--light);
- --md-code-hl-punctuation-color: var(--md-default-fg-color--light);
- --md-code-hl-comment-color: var(--md-default-fg-color--light);
- --md-code-hl-generic-color: var(--md-default-fg-color--light);
- --md-code-hl-variable-color: var(--md-default-fg-color--light);
-
- // Typeset color shades
- --md-typeset-color: var(--md-default-fg-color);
-
- // Typeset `a` color shades
- --md-typeset-a-color: var(--md-primary-fg-color);
-
- // Typeset `kbd` color shades
- --md-typeset-kbd-color: hsla(var(--md-hue), 15%, 90%, 0.12);
- --md-typeset-kbd-accent-color: hsla(var(--md-hue), 15%, 90%, 0.2);
- --md-typeset-kbd-border-color: hsla(var(--md-hue), 15%, 14%, 1);
-
- // Typeset `mark` color shades
- --md-typeset-mark-color: hsla(#{hex2hsl($clr-blue-a200)}, 0.3);
-
- // Typeset `table` color shades
- --md-typeset-table-color: hsla(var(--md-hue), 15%, 95%, 0.12);
- --md-typeset-table-color--light: hsla(var(--md-hue), 15%, 95%, 0.035);
-
- // Admonition color shades
- --md-admonition-fg-color: var(--md-default-fg-color);
- --md-admonition-bg-color: var(--md-default-bg-color);
-
- // Footer color shades
- --md-footer-bg-color: hsla(var(--md-hue), 15%, 10%, 0.87);
- --md-footer-bg-color--dark: hsla(var(--md-hue), 15%, 8%, 1);
-
- // Shadow depth 1
- --md-shadow-z1:
- 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.05),
- 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.1);
-
- // Shadow depth 2
- --md-shadow-z2:
- 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.25),
- 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.25);
-
- // Shadow depth 3
- --md-shadow-z3:
- 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.4),
- 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.35);
-
- // Hide images for light mode
- img[src$="#only-light"],
- img[src$="#gh-light-mode-only"] {
- display: none;
- }
- }
-
- // --------------------------------------------------------------------------
-
- // Adjust link colors for dark primary colors
- @each $name, $color in (
- "pink": hsl(340, 81%, 63%),
- "purple": hsl(291, 53%, 63%),
- "deep-purple": hsl(262, 73%, 70%),
- "indigo": hsl(219, 76%, 62%),
- "teal": hsl(174, 100%, 40%),
- "green": hsl(122, 39%, 60%),
- "deep-orange": hsl(14, 100%, 65%),
- "brown": hsl(16, 45%, 56%),
-
- // Set neutral colors to indigo
- "grey": hsl(219, 66%, 62%),
- "blue-grey": hsl(219, 66%, 62%),
- "white": hsl(219, 66%, 62%),
- "black": hsl(219, 66%, 62%)
- ) {
- [data-md-color-scheme="slate"][data-md-color-primary="#{$name}"] {
- --md-typeset-a-color: #{$color};
- }
- }
-
- // --------------------------------------------------------------------------
-
- // Switching in progress - disable all transitions temporarily
- [data-md-color-switching] *,
- [data-md-color-switching] *::before,
- [data-md-color-switching] *::after {
- transition-duration: 0ms !important; // stylelint-disable-line
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/utilities/_break.scss b/dev/src/templates/assets/stylesheets/utilities/_break.scss
deleted file mode 100644
index 7ccd8622..00000000
--- a/dev/src/templates/assets/stylesheets/utilities/_break.scss
+++ /dev/null
@@ -1,219 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-@use "sass:list";
-@use "sass:map";
-@use "sass:math";
-
-// ----------------------------------------------------------------------------
-// Variables
-// ----------------------------------------------------------------------------
-
-///
-/// Device-specific breakpoints
-///
-/// @example
-/// $break-devices: (
-/// mobile: (
-/// portrait: 220px 479px,
-/// landscape: 480px 719px
-/// ),
-/// tablet: (
-/// portrait: 720px 959px,
-/// landscape: 960px 1219px
-/// ),
-/// screen: (
-/// small: 1220px 1599px,
-/// medium: 1600px 1999px,
-/// large: 2000px
-/// )
-/// );
-///
-$break-devices: () !default;
-
-// ----------------------------------------------------------------------------
-// Helpers
-// ----------------------------------------------------------------------------
-
-///
-/// Choose minimum and maximum device widths
-///
-@function break-select-min-max($devices) {
- $min: 1000000;
- $max: 0;
- @each $key, $value in $devices {
- @while type-of($value) == map {
- $value: break-select-min-max($value);
- }
- @if type-of($value) == list {
- @each $number in $value {
- @if type-of($number) == number {
- $min: math.min($number, $min);
- @if $max {
- $max: math.max($number, $max);
- }
- } @else {
- @error "Invalid number: #{$number}";
- }
- }
- } @else if type-of($value) == number {
- $min: math.min($value, $min);
- $max: null;
- } @else {
- @error "Invalid value: #{$value}";
- }
- }
- @return $min, $max;
-}
-
-///
-/// Select minimum and maximum widths for a device breakpoint
-///
-@function break-select-device($device) {
- $current: $break-devices;
- @for $n from 1 through length($device) {
- @if type-of($current) == map {
- $current: map.get($current, list.nth($device, $n));
- } @else {
- @error "Invalid device map: #{$devices}";
- }
- }
- @if type-of($current) == list or type-of($current) == number {
- $current: (default: $current);
- }
- @return break-select-min-max($current);
-}
-
-// ----------------------------------------------------------------------------
-// Mixins
-// ----------------------------------------------------------------------------
-
-///
-/// A minimum-maximum media query breakpoint
-///
-@mixin break-at($breakpoint) {
- @if type-of($breakpoint) == number {
- @media screen and (min-width: $breakpoint) {
- @content;
- }
- } @else if type-of($breakpoint) == list {
- $min: list.nth($breakpoint, 1);
- $max: list.nth($breakpoint, 2);
- @if type-of($min) == number and type-of($max) == number {
- @media screen and (min-width: $min) and (max-width: $max) {
- @content;
- }
- } @else {
- @error "Invalid breakpoint: #{$breakpoint}";
- }
- } @else {
- @error "Invalid breakpoint: #{$breakpoint}";
- }
-}
-
-///
-/// An orientation media query breakpoint
-///
-@mixin break-at-orientation($breakpoint) {
- @if type-of($breakpoint) == string {
- @media screen and (orientation: $breakpoint) {
- @content;
- }
- } @else {
- @error "Invalid breakpoint: #{$breakpoint}";
- }
-}
-
-///
-/// A maximum-aspect-ratio media query breakpoint
-///
-@mixin break-at-ratio($breakpoint) {
- @if type-of($breakpoint) == number {
- @media screen and (max-aspect-ratio: $breakpoint) {
- @content;
- }
- } @else {
- @error "Invalid breakpoint: #{$breakpoint}";
- }
-}
-
-///
-/// A minimum-maximum media query device breakpoint
-///
-@mixin break-at-device($device) {
- @if type-of($device) == string {
- $device: $device,;
- }
- @if type-of($device) == list {
- $breakpoint: break-select-device($device);
- @if list.nth($breakpoint, 2) {
- $min: list.nth($breakpoint, 1);
- $max: list.nth($breakpoint, 2);
-
- @media screen and (min-width: $min) and (max-width: $max) {
- @content;
- }
- } @else {
- @error "Invalid device: #{$device}";
- }
- } @else {
- @error "Invalid device: #{$device}";
- }
-}
-
-///
-/// A minimum media query device breakpoint
-///
-@mixin break-from-device($device) {
- @if type-of($device) == string {
- $device: $device,;
- }
- @if type-of($device) == list {
- $breakpoint: break-select-device($device);
- $min: list.nth($breakpoint, 1);
-
- @media screen and (min-width: $min) {
- @content;
- }
- } @else {
- @error "Invalid device: #{$device}";
- }
-}
-
-///
-/// A maximum media query device breakpoint
-///
-@mixin break-to-device($device) {
- @if type-of($device) == string {
- $device: $device,;
- }
- @if type-of($device) == list {
- $breakpoint: break-select-device($device);
- $max: list.nth($breakpoint, 2);
-
- @media screen and (max-width: $max) {
- @content;
- }
- } @else {
- @error "Invalid device: #{$device}";
- }
-}
diff --git a/dev/src/templates/assets/stylesheets/utilities/_convert.scss b/dev/src/templates/assets/stylesheets/utilities/_convert.scss
deleted file mode 100644
index 8199c9c8..00000000
--- a/dev/src/templates/assets/stylesheets/utilities/_convert.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-////
-/// Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-///
-/// Permission is hereby granted, free of charge, to any person obtaining a
-/// copy of this software and associated documentation files (the "Software"),
-/// to deal in the Software without restriction, including without limitation
-/// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-/// and/or sell copies of the Software, and to permit persons to whom the
-/// Software is furnished to do so, subject to the following conditions:
-///
-/// The above copyright notice and this permission notice shall be included in
-/// all copies or substantial portions of the Software.
-///
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-/// DEALINGS
-////
-
-@use "sass:math";
-
-// ----------------------------------------------------------------------------
-// Helpers
-// ----------------------------------------------------------------------------
-
-///
-/// Strip units from a number
-///
-@function strip-units($number) {
- @return math.div($number, ($number * 0 + 1));
-}
-
-///
-/// Convert color in HEX to HSL
-///
-/// Note, that we need to strip the `deg` units from the `hue` value, as they
-/// were added in Color Level 4, which not all browsers support.
-///
-@function hex2hsl($color) {
- @return
- round(strip-units(hue($color))),
- round(saturation($color)),
- round(lightness($color));
-}
-
-// ----------------------------------------------------------------------------
-
-///
-/// Convert font size in px to em
-///
-@function px2em($size, $base: 16px) {
- @if unit($size) == px {
- @if unit($base) == px {
- @return math.div($size, $base) * 1em;
- } @else {
- @error "Invalid base: #{$base} - unit must be 'px'";
- }
- } @else {
- @error "Invalid size: #{$size} - unit must be 'px'";
- }
-}
-
-///
-/// Convert font size in px to rem
-///
-@function px2rem($size, $base: 20px) {
- @if unit($size) == px {
- @if unit($base) == px {
- @return math.div($size, $base) * 1rem;
- } @else {
- @error "Invalid base: #{$base} - unit must be 'px'";
- }
- } @else {
- @error "Invalid size: #{$size} - unit must be 'px'";
- }
-}
diff --git a/dev/src/templates/base.html b/dev/src/templates/base.html
index 8323e76e..e1f7ae5b 100644
--- a/dev/src/templates/base.html
+++ b/dev/src/templates/base.html
@@ -1,92 +1,39 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
{% import "partials/language.html" as lang with context %}
-
<!doctype html>
<html lang="{{ lang.t('language') }}" class="no-js">
<head>
-
- <!-- Meta tags -->
{% block site_meta %}
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width,initial-scale=1" />
-
- <!-- Page description -->
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
{% if page.meta and page.meta.description %}
- <meta name="description" content="{{ page.meta.description }}" />
+ <meta name="description" content="{{ page.meta.description }}">
{% elif config.site_description %}
- <meta name="description" content="{{ config.site_description }}" />
+ <meta name="description" content="{{ config.site_description }}">
{% endif %}
-
- <!-- Page author -->
{% if page.meta and page.meta.author %}
- <meta name="author" content="{{ page.meta.author }}" />
+ <meta name="author" content="{{ page.meta.author }}">
{% elif config.site_author %}
- <meta name="author" content="{{ config.site_author }}" />
+ <meta name="author" content="{{ config.site_author }}">
{% endif %}
-
- <!-- Canonical -->
{% if page.canonical_url %}
- <link rel="canonical" href="{{ page.canonical_url }}" />
+ <link rel="canonical" href="{{ page.canonical_url }}">
{% endif %}
-
- <!-- Previous page -->
{% if page.previous_page %}
- <link rel="prev" href="{{ page.previous_page.url | url }}" />
+ <link rel="prev" href="{{ page.previous_page.url | url }}">
{% endif %}
-
- <!-- Next page -->
{% if page.next_page %}
- <link rel="next" href="{{ page.next_page.url | url }}" />
+ <link rel="next" href="{{ page.next_page.url | url }}">
{% endif %}
-
- <!-- RSS feed -->
{% if "rss" in config.plugins %}
- <link
- rel="alternate"
- type="application/rss+xml"
- title="{{ lang.t('rss.created') }}"
- href="{{ 'feed_rss_created.xml' | url }}"
- />
- <link
- rel="alternate"
- type="application/rss+xml"
- title="{{ lang.t('rss.updated') }}"
- href="{{ 'feed_rss_updated.xml' | url }}"
- />
+ <link rel="alternate" type="application/rss+xml" title="{{ lang.t('rss.created') }}" href="{{ 'feed_rss_created.xml' | url }}">
+ <link rel="alternate" type="application/rss+xml" title="{{ lang.t('rss.updated') }}" href="{{ 'feed_rss_updated.xml' | url }}">
{% endif %}
-
- <!-- Favicon -->
- <link rel="icon" href="{{ config.theme.favicon | url }}" />
-
- <!-- Generator banner -->
- <meta
- name="generator"
- content="mkdocs-{{ mkdocs_version }}, $md-name$-$md-version$"
- />
+ <link rel="icon" href="{{ config.theme.favicon | url }}">
+ <meta name="generator" content="mkdocs-{{ mkdocs_version }}, mkdocs-material-9.4.4">
{% endblock %}
-
- <!-- Site title -->
{% block htmltitle %}
{% if page.meta and page.meta.title %}
<title>{{ page.meta.title }} - {{ config.site_name }}</title>
@@ -96,84 +43,45 @@
<title>{{ config.site_name }}</title>
{% endif %}
{% endblock %}
-
- <!-- Theme-related style sheets -->
{% block styles %}
- <link rel="stylesheet" href="{{ 'assets/stylesheets/main.css' | url }}" />
-
- <!-- Extra color palette -->
+ <link rel="stylesheet" href="{{ 'assets/stylesheets/main.bd3936ea.min.css' | url }}">
{% if config.theme.palette %}
{% set palette = config.theme.palette %}
- <link
- rel="stylesheet"
- href="{{ 'assets/stylesheets/palette.css' | url }}"
- />
+ <link rel="stylesheet" href="{{ 'assets/stylesheets/palette.356b1318.min.css' | url }}">
{% endif %}
-
- <!-- Custom icons -->
{% include "partials/icons.html" %}
{% endblock %}
-
- <!-- JavaScript libraries -->
{% block libs %}
{% for script in config.extra.polyfills %}
{{ script | script_tag }}
{% endfor %}
{% endblock %}
-
- <!-- Webfonts -->
{% block fonts %}
-
- <!-- Load fonts from Google -->
{% if config.theme.font != false %}
{% set text = config.theme.font.get("text", "Roboto") %}
{% set code = config.theme.font.get("code", "Roboto Mono") %}
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
- <link
- rel="stylesheet"
- href="https://fonts.googleapis.com/css?family={{
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family={{
text | replace(' ', '+') + ':300,300i,400,400i,700,700i%7C' +
code | replace(' ', '+') + ':400,400i,700,700i'
- }}&display=fallback"
- />
- <style>
- :root {
- --md-text-font: "{{ text }}";
- --md-code-font: "{{ code }}";
- }
- </style>
+ }}&display=fallback">
+ <style>:root{--md-text-font:"{{ text }}";--md-code-font:"{{ code }}"}</style>
{% endif %}
{% endblock %}
-
- <!-- Custom style sheets -->
{% for path in config.extra_css %}
- <link rel="stylesheet" href="{{ path | url }}" />
+ <link rel="stylesheet" href="{{ path | url }}">
{% endfor %}
-
- <!-- Helper functions for inline scripts -->
{% include "partials/javascripts/base.html" %}
-
- <!-- Analytics -->
{% block analytics %}
{% include "partials/integrations/analytics.html" %}
{% endblock %}
-
- <!-- Meta tags from front matter or plugins -->
{% if page.meta and page.meta.meta %}
{% for tag in page.meta.meta %}
- <meta
- {% for key, value in tag.items() %}
- {{ key }}="{{value}}"
- {% endfor %}
- />
+ <meta {% for key, value in tag.items() %} {{ key }}="{{value}}" {% endfor %}>
{% endfor %}
{% endif %}
-
- <!-- Custom front matter -->
{% block extrahead %}{% endblock %}
</head>
-
- <!-- Set text direction and color palette, if defined -->
{% set direction = config.theme.direction or lang.t("direction") %}
{% if config.theme.palette %}
{% set palette = config.theme.palette %}
@@ -183,45 +91,17 @@
{% set scheme = palette.scheme | d("default", true) %}
{% set primary = palette.primary | d("indigo", true) %}
{% set accent = palette.accent | d("indigo", true) %}
- <body
- dir="{{ direction }}"
- data-md-color-scheme="{{ scheme | replace(' ', '-') }}"
- data-md-color-primary="{{ primary | replace(' ', '-') }}"
- data-md-color-accent="{{ accent | replace(' ', '-') }}"
- >
+ <body dir="{{ direction }}" data-md-color-scheme="{{ scheme | replace(' ', '-') }}" data-md-color-primary="{{ primary | replace(' ', '-') }}" data-md-color-accent="{{ accent | replace(' ', '-') }}">
{% else %}
<body dir="{{ direction }}">
{% endif %}
{% set features = config.theme.features or [] %}
-
- <!-- User preference: color palette -->
{% if not config.theme.palette is mapping %}
{% include "partials/javascripts/palette.html" %}
{% endif %}
-
- <!--
- State toggles - we need to set autocomplete="off" in order to reset the
- drawer on back button invocation in some browsers
- -->
- <input
- class="md-toggle"
- data-md-toggle="drawer"
- type="checkbox"
- id="__drawer"
- autocomplete="off"
- />
- <input
- class="md-toggle"
- data-md-toggle="search"
- type="checkbox"
- id="__search"
- autocomplete="off"
- />
-
- <!-- Overlay for expanded drawer -->
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
-
- <!-- Skip to content -->
<div data-md-component="skip">
{% if page.toc | first is defined %}
{% set skip = page.toc | first %}
@@ -230,25 +110,16 @@
</a>
{% endif %}
</div>
-
- <!-- Announcement bar -->
<div data-md-component="announce">
{% if self.announce() %}
<aside class="md-banner">
<div class="md-banner__inner md-grid md-typeset">
-
- <!-- Button to dismiss announcement -->
{% if "announce.dismiss" in features %}
- <button
- class="md-banner__button md-icon"
- aria-label="{{ lang.t('announce.dismiss') }}"
- >
+ <button class="md-banner__button md-icon" aria-label="{{ lang.t('announce.dismiss') }}">
{% set icon = config.theme.icon.close or "material/close" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</button>
{% endif %}
-
- <!-- Announcement bar content -->
{% block announce %}{% endblock %}
</div>
{% if "announce.dismiss" in features %}
@@ -257,8 +128,6 @@
</aside>
{% endif %}
</div>
-
- <!-- Version warning -->
{% if config.extra.version %}
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
{% if self.outdated() %}
@@ -271,19 +140,11 @@
{% endif %}
</div>
{% endif %}
-
- <!-- Header -->
{% block header %}
{% include "partials/header.html" %}
{% endblock %}
-
- <!-- Container -->
<div class="md-container" data-md-component="container">
-
- <!-- Hero teaser -->
{% block hero %}{% endblock %}
-
- <!-- Navigation tabs (collapsing) -->
{% block tabs %}
{% if "navigation.tabs.sticky" not in features %}
{% if "navigation.tabs" in features %}
@@ -291,25 +152,14 @@
{% endif %}
{% endif %}
{% endblock %}
-
- <!-- Main area -->
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
-
- <!-- Sidebars -->
{% block site_nav %}
-
- <!-- Navigation -->
{% if nav %}
{% if page.meta and page.meta.hide %}
{% set hidden = "hidden" if "navigation" in page.meta.hide %}
{% endif %}
- <div
- class="md-sidebar md-sidebar--primary"
- data-md-component="sidebar"
- data-md-type="navigation"
- {{ hidden }}
- >
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" {{ hidden }}>
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
{% include "partials/nav.html" %}
@@ -317,18 +167,11 @@
</div>
</div>
{% endif %}
-
- <!-- Table of contents -->
{% if "toc.integrate" not in features %}
{% if page.meta and page.meta.hide %}
{% set hidden = "hidden" if "toc" in page.meta.hide %}
{% endif %}
- <div
- class="md-sidebar md-sidebar--secondary"
- data-md-component="sidebar"
- data-md-type="toc"
- {{ hidden }}
- >
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" {{ hidden }}>
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
{% include "partials/toc.html" %}
@@ -337,8 +180,6 @@
</div>
{% endif %}
{% endblock %}
-
- <!-- Page content -->
{% block container %}
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
@@ -348,34 +189,22 @@
</article>
</div>
{% endblock %}
-
- <!-- User preference: content -->
{% include "partials/javascripts/content.html" %}
</div>
-
- <!-- Back-to-top button -->
{% if "navigation.top" in features %}
{% include "partials/top.html" %}
{% endif %}
</main>
-
- <!-- Footer -->
{% block footer %}
{% include "partials/footer.html" %}
{% endblock %}
</div>
-
- <!-- Dialog -->
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
-
- <!-- Progress indicator -->
{% if "navigation.instant.progress" in features %}
{% include "partials/progress.html" %}
{% endif %}
-
- <!-- Consent -->
{% if config.extra.consent %}
<div class="md-consent" data-md-component="consent" id="__consent" hidden>
<div class="md-consent__overlay"></div>
@@ -385,31 +214,21 @@
</form>
</aside>
</div>
-
- <!-- User preference: consent -->
{% include "partials/javascripts/consent.html" %}
{% endif %}
-
- <!-- Theme-related configuration -->
{% block config %}
{%- set app = {
"base": base_url,
"features": features,
"translations": {},
- "search": "assets/javascripts/workers/search.js" | url
+ "search": "assets/javascripts/workers/search.f886a092.min.js" | url
} -%}
-
- <!-- Versioning -->
{%- if config.extra.version -%}
{%- set _ = app.update({ "version": config.extra.version }) -%}
{%- endif -%}
-
- <!-- Tags -->
{%- if config.extra.tags -%}
{%- set _ = app.update({ "tags": config.extra.tags }) -%}
{%- endif -%}
-
- <!-- Translations -->
{%- set translations = app.translations -%}
{%- for key in [
"clipboard.copy",
@@ -425,18 +244,12 @@
] -%}
{%- set _ = translations.update({ key: lang.t(key) }) -%}
{%- endfor -%}
-
- <!-- Configuration -->
<script id="__config" type="application/json">
{{- app | tojson -}}
</script>
{% endblock %}
-
- <!-- Theme-related JavaScript -->
{% block scripts %}
- <script src="{{ 'assets/javascripts/bundle.js' | url }}"></script>
-
- <!-- Custom JavaScript -->
+ <script src="{{ 'assets/javascripts/bundle.94c44541.min.js' | url }}"></script>
{% for script in config.extra_javascript %}
{{ script | script_tag }}
{% endfor %}
diff --git a/dev/src/templates/blog-post.html b/dev/src/templates/blog-post.html
index 73fb669f..8e3e5f2c 100644
--- a/dev/src/templates/blog-post.html
+++ b/dev/src/templates/blog-post.html
@@ -1,47 +1,17 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
{% extends "main.html" %}
-
{% import "partials/nav-item.html" as item with context %}
-
-<!-- Page content -->
{% block container %}
<div class="md-content md-content--post" data-md-component="content">
-
- <!-- Sidebar -->
- <div
- class="md-sidebar md-sidebar--post"
- data-md-component="sidebar"
- data-md-type="navigation"
- >
+ <div class="md-sidebar md-sidebar--post" data-md-component="sidebar" data-md-type="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner md-post">
<nav class="md-nav md-nav--primary">
-
- <!-- Back to overview link -->
<div class="md-post__back">
<div class="md-nav__title md-nav__container">
- <a href="{{ page.parent.url | url }}" class=" md-nav__link">
+ <a href="{{ page.parent.url | url }}" class="md-nav__link">
{% include ".icons/material/arrow-left.svg" %}
<span class="md-ellipsis">
{{ lang.t("blog.index") }}
@@ -49,25 +19,21 @@
</a>
</div>
</div>
-
- <!-- Post authors -->
{% if page.authors %}
<div class="md-post__authors md-typeset">
{% for author in page.authors %}
<div class="md-profile md-post__profile">
<span class="md-author md-author--long">
- <img src="{{ author.avatar }}" alt="{{ author.name }}" />
+ <img src="{{ author.avatar }}" alt="{{ author.name }}">
</span>
<span class="md-profile__description">
- <strong>{{ author.name }}</strong><br />
+ <strong>{{ author.name }}</strong><br>
{{ author.description }}
</span>
</div>
{% endfor %}
</div>
{% endif %}
-
- <!-- Post metadata -->
<ul class="md-post__meta md-nav__list">
<li class="md-nav__item md-nav__item--section">
<div class="md-post__title">
@@ -77,36 +43,24 @@
</div>
<nav class="md-nav">
<ul class="md-nav__list">
-
- <!-- Post date -->
<li class="md-nav__item">
<div class="md-nav__link">
{% include ".icons/material/calendar.svg" %}
- <time
- datetime="{{ page.config.date.created }}"
- class="md-ellipsis"
- >
+ <time datetime="{{ page.config.date.created }}" class="md-ellipsis">
{{- page.config.date.created | date -}}
</time>
</div>
</li>
-
- <!-- Post date updated -->
{% if page.config.date.updated %}
<li class="md-nav__item">
<div class="md-nav__link">
{% include ".icons/material/calendar-clock.svg" %}
- <time
- datetime="{{ page.config.date.updated }}"
- class="md-ellipsis"
- >
+ <time datetime="{{ page.config.date.updated }}" class="md-ellipsis">
{{- page.config.date.updated | date -}}
</time>
</div>
</li>
{% endif %}
-
- <!-- Post categories -->
{% if page.categories %}
<li class="md-nav__item">
<div class="md-nav__link">
@@ -123,8 +77,6 @@
</div>
</li>
{% endif %}
-
- <!-- Post readtime -->
{% if page.config.readtime %}
{% set time = page.config.readtime %}
<li class="md-nav__item">
@@ -145,16 +97,12 @@
</li>
</ul>
</nav>
-
- <!-- Table of contents, if integrated -->
{% if "toc.integrate" in features %}
{% include "partials/toc.html" %}
{% endif %}
</div>
</div>
</div>
-
- <!-- Page content -->
<article class="md-content__inner md-typeset">
{% block content %}
{% include "partials/content.html" %}
diff --git a/dev/src/templates/blog.html b/dev/src/templates/blog.html
index eedc77d9..cbcf2d89 100644
--- a/dev/src/templates/blog.html
+++ b/dev/src/templates/blog.html
@@ -1,43 +1,16 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
{% extends "main.html" %}
-
-<!-- Page content -->
{% block container %}
<div class="md-content" data-md-component="content">
<div class="md-content__inner">
-
- <!-- Header -->
<header class="md-typeset">
{{ page.content }}
</header>
-
- <!-- Posts -->
{% for post in posts %}
{% include "partials/post.html" %}
{% endfor %}
-
- <!-- Pagination -->
{% if pagination %}
{% block pagination %}
{% include "partials/pagination.html" %}
diff --git a/dev/src/templates/main.html b/dev/src/templates/main.html
index 3b77d200..094a197b 100644
--- a/dev/src/templates/main.html
+++ b/dev/src/templates/main.html
@@ -1,23 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
{% extends "base.html" %}
diff --git a/dev/src/templates/partials/actions.html b/dev/src/templates/partials/actions.html
index 75fcb8eb..1031f151 100644
--- a/dev/src/templates/partials/actions.html
+++ b/dev/src/templates/partials/actions.html
@@ -1,52 +1,20 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Actions -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% if page.edit_url %}
-
- <!-- Edit button -->
{% if "content.action.edit" in features %}
- <a
- href="{{ page.edit_url }}"
- title="{{ lang.t('action.edit') }}"
- class="md-content__button md-icon"
- >
+ <a href="{{ page.edit_url }}" title="{{ lang.t('action.edit') }}" class="md-content__button md-icon">
{% set icon = config.theme.icon.edit or "material/file-edit-outline" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</a>
{% endif %}
-
- <!-- View button -->
{% if "content.action.view" in features %}
{% if "/blob/" in page.edit_url %}
{% set part = "blob" %}
{% else %}
{% set part = "edit" %}
{% endif %}
- <a
- href="{{ page.edit_url | replace(part, 'raw') }}"
- title="{{ lang.t('action.view') }}"
- class="md-content__button md-icon"
- >
+ <a href="{{ page.edit_url | replace(part, 'raw') }}" title="{{ lang.t('action.view') }}" class="md-content__button md-icon">
{% set icon = config.theme.icon.view or "material/file-eye-outline" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</a>
diff --git a/dev/src/templates/partials/alternate.html b/dev/src/templates/partials/alternate.html
index 7d7c925b..4492d657 100644
--- a/dev/src/templates/partials/alternate.html
+++ b/dev/src/templates/partials/alternate.html
@@ -1,44 +1,17 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Site language selector -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<div class="md-header__option">
<div class="md-select">
{% set icon = config.theme.icon.alternate or "material/translate" %}
- <button
- class="md-header__button md-icon"
- aria-label="{{ lang.t('select.language') }}"
- >
+ <button class="md-header__button md-icon" aria-label="{{ lang.t('select.language') }}">
{% include ".icons/" ~ icon ~ ".svg" %}
</button>
<div class="md-select__inner">
<ul class="md-select__list">
{% for alt in config.extra.alternate %}
<li class="md-select__item">
- <a
- href="{{ alt.link | url }}"
- hreflang="{{ alt.lang }}"
- class="md-select__link"
- >
+ <a href="{{ alt.link | url }}" hreflang="{{ alt.lang }}" class="md-select__link">
{{ alt.name }}
</a>
</li>
diff --git a/dev/src/templates/partials/comments.html b/dev/src/templates/partials/comments.html
index 6641d20e..fae1698d 100644
--- a/dev/src/templates/partials/comments.html
+++ b/dev/src/templates/partials/comments.html
@@ -1,23 +1,3 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Comment system -->
+{#-
+ This file was automatically generated - do not edit
+-#}
diff --git a/dev/src/templates/partials/consent.html b/dev/src/templates/partials/consent.html
index c84622bc..4ac5cb77 100644
--- a/dev/src/templates/partials/consent.html
+++ b/dev/src/templates/partials/consent.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Determine cookies -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% set cookies = config.extra.consent.cookies | d({}) %}
{% if config.extra.analytics %}
{% if "analytics" not in cookies %}
@@ -32,29 +12,16 @@
{% set _ = cookies.update({ "github": "GitHub" }) %}
{% endif %}
{% endif %}
-
-<!-- Determine actions -->
{% set actions = config.extra.consent.actions %}
{% if not actions %}
{% set actions = ["accept", "manage"] %}
{% endif %}
-
-<!-- Determine initial settings state -->
{% if "manage" not in actions %}
{% set checked = "checked" %}
{% endif %}
-
-<!-- Consent title -->
<h4>{{ config.extra.consent.title }}</h4>
<p>{{ config.extra.consent.description }}</p>
-
-<!-- Consent settings -->
-<input
- class="md-toggle"
- type="checkbox"
- id="__settings"
- {{ checked }}
-/>
+<input class="md-toggle" type="checkbox" id="__settings" {{ checked }}>
<div class="md-consent__settings">
<ul class="task-list">
{% for type in cookies %}
@@ -78,26 +45,18 @@
{% endfor %}
</ul>
</div>
-
-<!-- Consent controls -->
<div class="md-consent__controls">
{% for action in actions %}
-
- <!-- Button to accept cookies -->
{% if action == "accept" %}
<button class="md-button md-button--primary">
{{- lang.t("consent.accept") -}}
</button>
{% endif %}
-
- <!-- Button to reject cookies -->
{% if action == "reject" %}
<button type="reset" class="md-button md-button--primary">
{{- lang.t("consent.reject") -}}
</button>
{% endif %}
-
- <!-- Button to manage settings -->
{% if action == "manage" %}
<label class="md-button" for="__settings">
{{- lang.t("consent.manage") -}}
diff --git a/dev/src/templates/partials/content.html b/dev/src/templates/partials/content.html
index 2b78b09b..351ec986 100644
--- a/dev/src/templates/partials/content.html
+++ b/dev/src/templates/partials/content.html
@@ -1,54 +1,19 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Tags -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% if "material/tags" in config.plugins and tags %}
{% include "partials/tags.html" %}
{% endif %}
-
-<!-- Actions -->
{% include "partials/actions.html" %}
-
-<!--
- Hack: check whether the content contains a h1 headline. If it doesn't, the
- page title (or respectively site name) is used as the main headline.
--->
{% if "\x3ch1" not in page.content %}
<h1>{{ page.title | d(config.site_name, true)}}</h1>
{% endif %}
-
-<!-- Page content -->
{{ page.content }}
-
-<!-- Source file information -->
{% if page.meta and (
page.meta.git_revision_date_localized or
page.meta.revision_date
) %}
{% include "partials/source-file.html" %}
{% endif %}
-
-<!-- Was this page helpful? -->
{% include "partials/feedback.html" %}
-
-<!-- Comment system -->
{% include "partials/comments.html" %}
diff --git a/dev/src/templates/partials/copyright.html b/dev/src/templates/partials/copyright.html
index 070948d2..5da0dc4b 100644
--- a/dev/src/templates/partials/copyright.html
+++ b/dev/src/templates/partials/copyright.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Copyright and theme information -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<div class="md-copyright">
{% if config.copyright %}
<div class="md-copyright__highlight">
@@ -29,10 +9,7 @@
{% endif %}
{% if not config.extra.generator == false %}
Made with
- <a
- href="https://squidfunk.github.io/mkdocs-material/"
- target="_blank" rel="noopener"
- >
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
{% endif %}
diff --git a/dev/src/templates/partials/feedback.html b/dev/src/templates/partials/feedback.html
index bf27c640..2cde98c7 100644
--- a/dev/src/templates/partials/feedback.html
+++ b/dev/src/templates/partials/feedback.html
@@ -1,38 +1,14 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Determine feedback configuration -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% if config.extra.analytics %}
{% set feedback = config.extra.analytics.feedback %}
{% endif %}
-
-<!-- Determine whether to show feedback -->
{% if page.meta and page.meta.hide %}
{% if "feedback" in page.meta.hide %}
{% set feedback = None %}
{% endif %}
{% endif %}
-
-<!-- Was this page helpful? -->
{% if feedback %}
<form class="md-feedback" name="feedback" hidden>
<fieldset>
@@ -40,35 +16,22 @@
{{ feedback.title }}
</legend>
<div class="md-feedback__inner">
-
- <!-- Feedback ratings -->
<div class="md-feedback__list">
{% for rating in feedback.ratings %}
- <button
- class="md-feedback__icon md-icon"
- type="submit"
- title="{{ rating.name }}"
- data-md-value="{{ rating.data }}"
- >
+ <button class="md-feedback__icon md-icon" type="submit" title="{{ rating.name }}" data-md-value="{{ rating.data }}">
{% include ".icons/" ~ rating.icon ~ ".svg" %}
</button>
{% endfor %}
</div>
-
- <!-- Feedback rating notes (shown after submission) -->
<div class="md-feedback__note">
{% for rating in feedback.ratings %}
<div data-md-value="{{ rating.data }}" hidden>
{% set url = "/" ~ page.url %}
-
- <!-- Determine title -->
{% if page.meta and page.meta.title %}
{% set title = page.meta.title | urlencode %}
{% else %}
{% set title = page.title | urlencode %}
{% endif %}
-
- <!-- Replace {url} and {title} placeholders in note -->
{{ rating.note.format(url = url, title = title) }}
</div>
{% endfor %}
diff --git a/dev/src/templates/partials/footer.html b/dev/src/templates/partials/footer.html
index ebe9278f..37783bcf 100644
--- a/dev/src/templates/partials/footer.html
+++ b/dev/src/templates/partials/footer.html
@@ -1,48 +1,16 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Footer -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<footer class="md-footer">
-
- <!-- Link to previous and/or next page -->
{% if "navigation.footer" in features %}
{% if page.previous_page or page.next_page %}
{% if page.meta and page.meta.hide %}
{% set hidden = "hidden" if "footer" in page.meta.hide %}
{% endif %}
- <nav
- class="md-footer__inner md-grid"
- aria-label="{{ lang.t('footer') }}"
- {{ hidden }}
- >
-
- <!-- Link to previous page -->
+ <nav class="md-footer__inner md-grid" aria-label="{{ lang.t('footer') }}" {{ hidden }}>
{% if page.previous_page %}
{% set direction = lang.t("footer.previous") %}
- <a
- href="{{ page.previous_page.url | url }}"
- class="md-footer__link md-footer__link--prev"
- aria-label="{{ direction }}: {{ page.previous_page.title | e }}"
- >
+ <a href="{{ page.previous_page.url | url }}" class="md-footer__link md-footer__link--prev" aria-label="{{ direction }}: {{ page.previous_page.title | e }}">
<div class="md-footer__button md-icon">
{% set icon = config.theme.icon.previous or "material/arrow-left" %}
{% include ".icons/" ~ icon ~ ".svg" %}
@@ -57,15 +25,9 @@
</div>
</a>
{% endif %}
-
- <!-- Link to next page -->
{% if page.next_page %}
{% set direction = lang.t("footer.next") %}
- <a
- href="{{ page.next_page.url | url }}"
- class="md-footer__link md-footer__link--next"
- aria-label="{{ direction }}: {{ page.next_page.title | e }}"
- >
+ <a href="{{ page.next_page.url | url }}" class="md-footer__link md-footer__link--next" aria-label="{{ direction }}: {{ page.next_page.title | e }}">
<div class="md-footer__title">
<span class="md-footer__direction">
{{ direction }}
@@ -83,13 +45,9 @@
</nav>
{% endif %}
{% endif %}
-
- <!-- Further information -->
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
{% include "partials/copyright.html" %}
-
- <!-- Social links -->
{% if config.extra.social %}
{% include "partials/social.html" %}
{% endif %}
diff --git a/dev/src/templates/partials/header.html b/dev/src/templates/partials/header.html
index 9b6d2e2e..86311ad3 100644
--- a/dev/src/templates/partials/header.html
+++ b/dev/src/templates/partials/header.html
@@ -1,58 +1,21 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Determine classes -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% set class = "md-header" %}
{% if "navigation.tabs.sticky" in features %}
{% set class = class ~ " md-header--shadow md-header--lifted" %}
{% elif "navigation.tabs" not in features %}
{% set class = class ~ " md-header--shadow" %}
{% endif %}
-
-<!-- Header -->
<header class="{{ class }}" data-md-component="header">
- <nav
- class="md-header__inner md-grid"
- aria-label="{{ lang.t('header') }}"
- >
-
- <!-- Link to home -->
- <a
- href="{{ config.extra.homepage | d(nav.homepage.url, true) | url }}"
- title="{{ config.site_name | e }}"
- class="md-header__button md-logo"
- aria-label="{{ config.site_name }}"
- data-md-component="logo"
- >
+ <nav class="md-header__inner md-grid" aria-label="{{ lang.t('header') }}">
+ <a href="{{ config.extra.homepage | d(nav.homepage.url, true) | url }}" title="{{ config.site_name | e }}" class="md-header__button md-logo" aria-label="{{ config.site_name }}" data-md-component="logo">
{% include "partials/logo.html" %}
</a>
-
- <!-- Button to open drawer -->
<label class="md-header__button md-icon" for="__drawer">
{% set icon = config.theme.icon.menu or "material/menu" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</label>
-
- <!-- Header title -->
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
@@ -71,39 +34,27 @@
</div>
</div>
</div>
-
- <!-- Color palette toggle -->
{% if config.theme.palette %}
{% if not config.theme.palette is mapping %}
{% include "partials/palette.html" %}
{% endif %}
{% endif %}
-
- <!-- Site language selector -->
{% if config.extra.alternate %}
{% include "partials/alternate.html" %}
{% endif %}
-
- <!-- Button to open search modal -->
{% if "material/search" in config.plugins %}
<label class="md-header__button md-icon" for="__search">
{% set icon = config.theme.icon.search or "material/magnify" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</label>
-
- <!-- Search interface -->
{% include "partials/search.html" %}
{% endif %}
-
- <!-- Repository information -->
{% if config.repo_url %}
<div class="md-header__source">
{% include "partials/source.html" %}
</div>
{% endif %}
</nav>
-
- <!-- Navigation tabs (sticky) -->
{% if "navigation.tabs.sticky" in features %}
{% if "navigation.tabs" in features %}
{% include "partials/tabs.html" %}
diff --git a/dev/src/templates/partials/icons.html b/dev/src/templates/partials/icons.html
index 17dd20d8..3fb55a6e 100644
--- a/dev/src/templates/partials/icons.html
+++ b/dev/src/templates/partials/icons.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Custom admonition icons -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% if config.theme.icon.admonition %}
{% set style = ["\x3cstyle\x3e:root{"] %}
{% for type, icon in config.theme.icon.admonition.items() %}
@@ -35,8 +15,6 @@
{% set _ = style.append("}\x3c/style\x3e") %}
{{ style | join }}
{% endif %}
-
-<!-- Custom annotation icon -->
{% if config.theme.icon.annotation %}
{% set style = ["\x3cstyle\x3e:root{"] %}
{% import ".icons/" ~ config.theme.icon.annotation ~ ".svg" as icon %}
@@ -49,8 +27,6 @@
{% set _ = style.append("}\x3c/style\x3e") %}
{{ style | join }}
{% endif %}
-
-<!-- Custom tag icons -->
{% if config.theme.icon.tag %}
{% set style = ["\x3cstyle\x3e"] %}
{% for type, icon in config.theme.icon.tag.items() %}
diff --git a/dev/src/templates/partials/integrations/analytics.html b/dev/src/templates/partials/integrations/analytics.html
index 4b483046..ea27ef0c 100644
--- a/dev/src/templates/partials/integrations/analytics.html
+++ b/dev/src/templates/partials/integrations/analytics.html
@@ -1,49 +1,14 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Determine analytics provider -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% if config.extra.analytics %}
{% set provider = config.extra.analytics.provider %}
{% endif %}
-
-<!-- Set up analytics provider -->
{% if provider %}
{% include "partials/integrations/analytics/" ~ provider ~ ".html" %}
-
- <!-- Consent necessary -->
{% if config.extra.consent %}
- <script>
- if (typeof __md_analytics !== "undefined") {
- var consent = __md_get("__consent")
- if (consent && consent.analytics)
- __md_analytics()
- }
- </script>
-
- <!-- Consent unnecessary -->
+ <script>var consent;"undefined"==typeof __md_analytics||(consent=__md_get("__consent"))&&consent.analytics&&__md_analytics()</script>
{% else %}
- <script>
- if (typeof __md_analytics !== "undefined")
- __md_analytics()
- </script>
+ <script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
{% endif %}
{% endif %}
diff --git a/dev/src/templates/partials/integrations/analytics/google.html b/dev/src/templates/partials/integrations/analytics/google.html
index a9fa37d9..128854da 100644
--- a/dev/src/templates/partials/integrations/analytics/google.html
+++ b/dev/src/templates/partials/integrations/analytics/google.html
@@ -1,97 +1,7 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Determine analytics property -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% if config.extra.analytics %}
{% set property = config.extra.analytics.property | d("", true) %}
{% endif %}
-
-<!-- Integrate with Google Analytics 4 -->
-<script id="__analytics">
- function __md_analytics() {
- window.dataLayer = window.dataLayer || []
- function gtag() { dataLayer.push(arguments) }
-
- /* Set up integration and send page view */
- gtag("js", new Date())
- gtag("config", "{{ property }}")
-
- /* Register event handlers after documented loaded */
- document.addEventListener("DOMContentLoaded", function() {
-
- /* Set up search tracking */
- if (document.forms.search) {
- var query = document.forms.search.query
- query.addEventListener("blur", function() {
- if (this.value)
- gtag("event", "search", { search_term: this.value })
- })
- }
-
- /* Set up feedback, i.e. "Was this page helpful?" */
- document$.subscribe(function() {
- var feedback = document.forms.feedback
- if (typeof feedback === "undefined")
- return
-
- /* Send feedback to Google Analytics */
- for (var button of feedback.querySelectorAll("[type=submit]")) {
- button.addEventListener("click", function(ev) {
- ev.preventDefault()
-
- /* Retrieve and send data */
- var page = document.location.pathname
- var data = this.getAttribute("data-md-value")
- gtag("event", "feedback", { page, data })
-
- /* Disable form and show note, if given */
- feedback.firstElementChild.disabled = true
- var note = feedback.querySelector(
- ".md-feedback__note [data-md-value='" + data + "']"
- )
- if (note)
- note.hidden = false
- })
-
- /* Show feedback */
- feedback.hidden = false
- }
- })
-
- /* Send page view on location change */
- location$.subscribe(function(url) {
- gtag("config", "{{ property }}", {
- page_path: url.pathname
- })
- })
- })
-
- /* Create script tag */
- var script = document.createElement("script")
- script.async = true
- script.src = "https://www.googletagmanager.com/gtag/js?id={{ property }}"
-
- /* Inject script tag */
- var container = document.getElementById("__analytics")
- container.insertAdjacentElement("afterEnd", script)
- }
-</script>
+<script id="__analytics">function __md_analytics(){function n(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],n("js",new Date),n("config","{{ property }}"),document.addEventListener("DOMContentLoaded",function(){document.forms.search&&document.forms.search.query.addEventListener("blur",function(){this.value&&n("event","search",{search_term:this.value})}),document$.subscribe(function(){var a=document.forms.feedback;if(void 0!==a)for(var e of a.querySelectorAll("[type=submit]"))e.addEventListener("click",function(e){e.preventDefault();var t=document.location.pathname,e=this.getAttribute("data-md-value");n("event","feedback",{page:t,data:e}),a.firstElementChild.disabled=!0;e=a.querySelector(".md-feedback__note [data-md-value='"+e+"']");e&&(e.hidden=!1)}),a.hidden=!1}),location$.subscribe(function(e){n("config","{{ property }}",{page_path:e.pathname})})});var e=document.createElement("script");e.async=!0,e.src="https://www.googletagmanager.com/gtag/js?id={{ property }}",document.getElementById("__analytics").insertAdjacentElement("afterEnd",e)}</script>
diff --git a/dev/src/templates/partials/javascripts/announce.html b/dev/src/templates/partials/javascripts/announce.html
index f13961b2..b62a131e 100644
--- a/dev/src/templates/partials/javascripts/announce.html
+++ b/dev/src/templates/partials/javascripts/announce.html
@@ -1,31 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Announcement bar -->
-<script>
- var el = document.querySelector("[data-md-component=announce]")
- if (el) {
- var content = el.querySelector(".md-typeset")
- if (__md_hash(content.innerHTML) === __md_get("__announce"))
- el.hidden = true
- }
-</script>
+{#-
+ This file was automatically generated - do not edit
+-#}
+<script>var content,el=document.querySelector("[data-md-component=announce]");el&&(content=el.querySelector(".md-typeset"),__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0))</script>
diff --git a/dev/src/templates/partials/javascripts/base.html b/dev/src/templates/partials/javascripts/base.html
index f0eeeb8a..7625632d 100644
--- a/dev/src/templates/partials/javascripts/base.html
+++ b/dev/src/templates/partials/javascripts/base.html
@@ -1,48 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!--
- A collection of functions used from within some partials to allow the usage
- of state saved in local or session storage, e.g. to model preferences.
--->
-<script>
-
- /* Compute base path once to integrate with instant loading */
- __md_scope = new URL("{{ config.extra.scope | d(base_url) }}", location)
-
- /* Compute hash from the given string - see https://bit.ly/3pvPjXG */
- __md_hash = v => [...v].reduce((h, c) => (h << 5) - h + c.charCodeAt(0), 0)
-
- /* Fetch the value for a key from the given storage */
- __md_get = (key, storage = localStorage, scope = __md_scope) => (
- JSON.parse(storage.getItem(scope.pathname + "." + key))
- )
-
- /* Persist a key-value pair in the given storage */
- __md_set = (key, value, storage = localStorage, scope = __md_scope) => {
- try {
- storage.setItem(scope.pathname + "." + key, JSON.stringify(value))
- } catch (err) {
- /* Uncritical, just swallow */
- }
- }
-</script>
+{#-
+ This file was automatically generated - do not edit
+-#}
+<script>__md_scope=new URL("{{ config.extra.scope | d(base_url) }}",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
diff --git a/dev/src/templates/partials/javascripts/consent.html b/dev/src/templates/partials/javascripts/consent.html
index 13730da7..538a38c7 100644
--- a/dev/src/templates/partials/javascripts/consent.html
+++ b/dev/src/templates/partials/javascripts/consent.html
@@ -1,61 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- User-preference: consent -->
-<script>
- var consent = __md_get("__consent")
- if (consent) {
- for (var input of document.forms.consent.elements)
- if (input.name)
- input.checked = consent[input.name] || false
-
- /* Show consent with a small delay, but not if browsing locally */
- } else if (location.protocol !== "file:") {
- setTimeout(function() {
- var el = document.querySelector("[data-md-component=consent]")
- el.hidden = false
- }, 250)
- }
-
- /* Intercept submission of consent form */
- var form = document.forms.consent
- for (var action of ["submit", "reset"])
- form.addEventListener(action, function(ev) {
- ev.preventDefault()
-
- /* Reject all cookies */
- if (ev.type === "reset")
- for (var input of document.forms.consent.elements)
- if (input.name)
- input.checked = false
-
- /* Grab and serialize form data */
- __md_set("__consent", Object.fromEntries(
- Array.from(new FormData(form).keys())
- .map(function(key) { return [key, true] })
- ))
-
- /* Remove anchor to omit consent from reappearing and reload */
- location.hash = '';
- location.reload()
- })
-</script>
+{#-
+ This file was automatically generated - do not edit
+-#}
+<script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout(function(){document.querySelector("[data-md-component=consent]").hidden=!1},250);var action,form=document.forms.consent;for(action of["submit","reset"])form.addEventListener(action,function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map(function(e){return[e,!0]}))),location.hash="",location.reload()})</script>
diff --git a/dev/src/templates/partials/javascripts/content.html b/dev/src/templates/partials/javascripts/content.html
index d361f18b..32021d0b 100644
--- a/dev/src/templates/partials/javascripts/content.html
+++ b/dev/src/templates/partials/javascripts/content.html
@@ -1,39 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- User-preference: link content tabs -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% if "content.tabs.link" in features %}
- <script>
- var tabs = __md_get("__tabs")
- if (Array.isArray(tabs))
- main: for (var set of document.querySelectorAll(".tabbed-set")) {
- var labels = set.querySelector(".tabbed-labels")
- for (var tab of tabs)
- for (var label of labels.getElementsByTagName("label"))
- if (label.innerText.trim() === tab) {
- var input = document.getElementById(label.htmlFor)
- input.checked = true
- continue main
- }
- }
- </script>
+ <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
{% endif %}
diff --git a/dev/src/templates/partials/javascripts/outdated.html b/dev/src/templates/partials/javascripts/outdated.html
index 576f3c85..640a3669 100644
--- a/dev/src/templates/partials/javascripts/outdated.html
+++ b/dev/src/templates/partials/javascripts/outdated.html
@@ -1,29 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Version warning -->
-<script>
- var el = document.querySelector("[data-md-component=outdated]")
- var outdated = __md_get("__outdated", sessionStorage)
- if (outdated === true && el)
- el.hidden = false
-</script>
+{#-
+ This file was automatically generated - do not edit
+-#}
+<script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script>
diff --git a/dev/src/templates/partials/javascripts/palette.html b/dev/src/templates/partials/javascripts/palette.html
index a2daef1d..b7e6f4dd 100644
--- a/dev/src/templates/partials/javascripts/palette.html
+++ b/dev/src/templates/partials/javascripts/palette.html
@@ -1,29 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- User preference: color palette -->
-<script>
- var palette = __md_get("__palette")
- if (palette && typeof palette.color === "object")
- for (var key of Object.keys(palette.color))
- document.body.setAttribute("data-md-color-" + key, palette.color[key])
-</script>
+{#-
+ This file was automatically generated - do not edit
+-#}
+<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
diff --git a/dev/src/templates/partials/language.html b/dev/src/templates/partials/language.html
index e37b953b..e497e66b 100644
--- a/dev/src/templates/partials/language.html
+++ b/dev/src/templates/partials/language.html
@@ -1,28 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Import translations for given language and fallback -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% import "partials/languages/" ~ config.theme.language ~ ".html" as lang %}
{% import "partials/languages/en.html" as fallback %}
-
-<!-- Re-export translations -->
{% macro t(key) %}{{ lang.t(key) or fallback.t(key) or key }}{% endmacro %}
diff --git a/dev/src/templates/partials/languages/af.html b/dev/src/templates/partials/languages/af.html
index b7f9f8fa..bc4a0232 100644
--- a/dev/src/templates/partials/languages/af.html
+++ b/dev/src/templates/partials/languages/af.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Afrikaans -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "af",
"action.edit": "Wysig hierdie bladsy",
diff --git a/dev/src/templates/partials/languages/ar.html b/dev/src/templates/partials/languages/ar.html
index 4d5da33a..580f0d77 100644
--- a/dev/src/templates/partials/languages/ar.html
+++ b/dev/src/templates/partials/languages/ar.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Arabic -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ar",
"direction": "rtl",
diff --git a/dev/src/templates/partials/languages/be.html b/dev/src/templates/partials/languages/be.html
index c36c8402..fa89f2a1 100644
--- a/dev/src/templates/partials/languages/be.html
+++ b/dev/src/templates/partials/languages/be.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Belarusian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "be",
"direction": "ltr",
diff --git a/dev/src/templates/partials/languages/bg.html b/dev/src/templates/partials/languages/bg.html
index f36fd437..4fc20a98 100644
--- a/dev/src/templates/partials/languages/bg.html
+++ b/dev/src/templates/partials/languages/bg.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Bulgarian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "bg",
"action.edit": "Редактирай тази страница",
diff --git a/dev/src/templates/partials/languages/bn.html b/dev/src/templates/partials/languages/bn.html
index 0a3ee6d0..b5fed867 100644
--- a/dev/src/templates/partials/languages/bn.html
+++ b/dev/src/templates/partials/languages/bn.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Bengali (Bangla) -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "bn",
"action.edit": "এই পেজ এডিট করুন",
diff --git a/dev/src/templates/partials/languages/ca.html b/dev/src/templates/partials/languages/ca.html
index 8fd2b03a..5f70ef17 100644
--- a/dev/src/templates/partials/languages/ca.html
+++ b/dev/src/templates/partials/languages/ca.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Catalan -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ca",
"action.edit": "Edita aquesta pàgina",
diff --git a/dev/src/templates/partials/languages/cs.html b/dev/src/templates/partials/languages/cs.html
index fb955865..e8e89822 100644
--- a/dev/src/templates/partials/languages/cs.html
+++ b/dev/src/templates/partials/languages/cs.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Czech -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "cs",
"action.edit": "Upravit tuto stránku",
diff --git a/dev/src/templates/partials/languages/da.html b/dev/src/templates/partials/languages/da.html
index 2f9da2db..3538aa8c 100644
--- a/dev/src/templates/partials/languages/da.html
+++ b/dev/src/templates/partials/languages/da.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Danish -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "da",
"action.edit": "Redigér denne side",
diff --git a/dev/src/templates/partials/languages/de.html b/dev/src/templates/partials/languages/de.html
index bfd8b909..c5df419f 100644
--- a/dev/src/templates/partials/languages/de.html
+++ b/dev/src/templates/partials/languages/de.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: German -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "de",
"action.edit": "Seite editieren",
diff --git a/dev/src/templates/partials/languages/el.html b/dev/src/templates/partials/languages/el.html
index 8dce1793..ab3b5d08 100644
--- a/dev/src/templates/partials/languages/el.html
+++ b/dev/src/templates/partials/languages/el.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Greek -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "el",
"action.edit": "Επεξεργασία αυτής της σελίδας",
diff --git a/dev/src/templates/partials/languages/en.html b/dev/src/templates/partials/languages/en.html
index 0e6a73ac..7f8eb9e9 100644
--- a/dev/src/templates/partials/languages/en.html
+++ b/dev/src/templates/partials/languages/en.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: English -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "en",
"direction": "ltr",
diff --git a/dev/src/templates/partials/languages/eo.html b/dev/src/templates/partials/languages/eo.html
index cd3829a8..65b8a423 100644
--- a/dev/src/templates/partials/languages/eo.html
+++ b/dev/src/templates/partials/languages/eo.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Esperanto -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "eo",
"action.edit": "Redakti ĉi tiun paĝon",
diff --git a/dev/src/templates/partials/languages/es.html b/dev/src/templates/partials/languages/es.html
index bbbd9dc1..78cae750 100644
--- a/dev/src/templates/partials/languages/es.html
+++ b/dev/src/templates/partials/languages/es.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Spanish -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "es",
"action.edit": "Editar esta página",
diff --git a/dev/src/templates/partials/languages/et.html b/dev/src/templates/partials/languages/et.html
index 8add4225..3e23129b 100644
--- a/dev/src/templates/partials/languages/et.html
+++ b/dev/src/templates/partials/languages/et.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Estonian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "et",
"action.edit": "Muuda seda lehte",
diff --git a/dev/src/templates/partials/languages/eu.html b/dev/src/templates/partials/languages/eu.html
index 0e52f925..9b97a732 100644
--- a/dev/src/templates/partials/languages/eu.html
+++ b/dev/src/templates/partials/languages/eu.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Basque -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "eu",
"action.edit": "Editatu orri hau",
diff --git a/dev/src/templates/partials/languages/fa.html b/dev/src/templates/partials/languages/fa.html
index deaa8bca..d61b273e 100644
--- a/dev/src/templates/partials/languages/fa.html
+++ b/dev/src/templates/partials/languages/fa.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Persian (Farsi) -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "fa",
"direction": "rtl",
diff --git a/dev/src/templates/partials/languages/fi.html b/dev/src/templates/partials/languages/fi.html
index 8ee09122..d5fc895e 100644
--- a/dev/src/templates/partials/languages/fi.html
+++ b/dev/src/templates/partials/languages/fi.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Finnish -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "fi",
"action.edit": "Muokkaa tätä sivua",
diff --git a/dev/src/templates/partials/languages/fr.html b/dev/src/templates/partials/languages/fr.html
index 9d49535a..6c762b53 100644
--- a/dev/src/templates/partials/languages/fr.html
+++ b/dev/src/templates/partials/languages/fr.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: French -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "fr",
"action.edit": "Editer cette page",
diff --git a/dev/src/templates/partials/languages/gl.html b/dev/src/templates/partials/languages/gl.html
index ecb54ffd..c43caf1a 100644
--- a/dev/src/templates/partials/languages/gl.html
+++ b/dev/src/templates/partials/languages/gl.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Galician -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "gl",
"action.edit": "Editar esta páxina",
diff --git a/dev/src/templates/partials/languages/he.html b/dev/src/templates/partials/languages/he.html
index 128edab5..e25dc614 100644
--- a/dev/src/templates/partials/languages/he.html
+++ b/dev/src/templates/partials/languages/he.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Hebrew -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "he",
"direction": "rtl",
diff --git a/dev/src/templates/partials/languages/hi.html b/dev/src/templates/partials/languages/hi.html
index 8c27c259..081a32f6 100644
--- a/dev/src/templates/partials/languages/hi.html
+++ b/dev/src/templates/partials/languages/hi.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Hindi -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "hi",
"action.edit": "इस पृष्ठ को संपादित करें",
diff --git a/dev/src/templates/partials/languages/hr.html b/dev/src/templates/partials/languages/hr.html
index 30afe6a9..e10df662 100644
--- a/dev/src/templates/partials/languages/hr.html
+++ b/dev/src/templates/partials/languages/hr.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Croatian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "hr",
"action.edit": "Uredi stranicu",
diff --git a/dev/src/templates/partials/languages/hu.html b/dev/src/templates/partials/languages/hu.html
index 44798dd8..46bdec9a 100644
--- a/dev/src/templates/partials/languages/hu.html
+++ b/dev/src/templates/partials/languages/hu.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Hungarian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "hu",
"action.edit": "Oldal szerkesztése",
diff --git a/dev/src/templates/partials/languages/hy.html b/dev/src/templates/partials/languages/hy.html
index e3418341..076fcb6c 100644
--- a/dev/src/templates/partials/languages/hy.html
+++ b/dev/src/templates/partials/languages/hy.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Armenian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "hy",
"action.edit": "Խմբագրել այս էջը",
diff --git a/dev/src/templates/partials/languages/id.html b/dev/src/templates/partials/languages/id.html
index c54229f0..876d894e 100644
--- a/dev/src/templates/partials/languages/id.html
+++ b/dev/src/templates/partials/languages/id.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Indonesian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "id",
"action.edit": "Ubah halaman ini",
diff --git a/dev/src/templates/partials/languages/is.html b/dev/src/templates/partials/languages/is.html
index 5b9a47e8..c353fe35 100644
--- a/dev/src/templates/partials/languages/is.html
+++ b/dev/src/templates/partials/languages/is.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Icelandic -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "is",
"action.edit": "Breyta þessari síðu",
diff --git a/dev/src/templates/partials/languages/it.html b/dev/src/templates/partials/languages/it.html
index 77956ee7..0472dab0 100644
--- a/dev/src/templates/partials/languages/it.html
+++ b/dev/src/templates/partials/languages/it.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Italian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "it",
"action.edit": "Modifica",
diff --git a/dev/src/templates/partials/languages/ja.html b/dev/src/templates/partials/languages/ja.html
index b4b4279d..f2368574 100644
--- a/dev/src/templates/partials/languages/ja.html
+++ b/dev/src/templates/partials/languages/ja.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Japanese -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ja",
"action.edit": "編集",
diff --git a/dev/src/templates/partials/languages/ka.html b/dev/src/templates/partials/languages/ka.html
index edfd2e02..d8e0a731 100644
--- a/dev/src/templates/partials/languages/ka.html
+++ b/dev/src/templates/partials/languages/ka.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Georgian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ka",
"action.edit": "გვერდის რედარქირება",
diff --git a/dev/src/templates/partials/languages/kn.html b/dev/src/templates/partials/languages/kn.html
index bd0ff722..876a7e0e 100644
--- a/dev/src/templates/partials/languages/kn.html
+++ b/dev/src/templates/partials/languages/kn.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Kannada -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "kn",
"action.edit": "ಈ ಪುಟವನ್ನು ತಿದ್ದುಪಡಿ ಮಾಡಿ",
diff --git a/dev/src/templates/partials/languages/ko.html b/dev/src/templates/partials/languages/ko.html
index adadccb7..06e973f7 100644
--- a/dev/src/templates/partials/languages/ko.html
+++ b/dev/src/templates/partials/languages/ko.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Korean -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ko",
"action.edit": "이 페이지를 편집",
diff --git a/dev/src/templates/partials/languages/ku-IQ.html b/dev/src/templates/partials/languages/ku-IQ.html
index fe9dd1e7..a1ebbcd8 100644
--- a/dev/src/templates/partials/languages/ku-IQ.html
+++ b/dev/src/templates/partials/languages/ku-IQ.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Kurdish (Soranî) -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ku",
"direction": "rtl",
diff --git a/dev/src/templates/partials/languages/lb.html b/dev/src/templates/partials/languages/lb.html
index f38c6568..75beab62 100644
--- a/dev/src/templates/partials/languages/lb.html
+++ b/dev/src/templates/partials/languages/lb.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Luxembourgish -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "lb",
"direction": "ltr",
diff --git a/dev/src/templates/partials/languages/lt.html b/dev/src/templates/partials/languages/lt.html
index 129505f5..e6f72898 100644
--- a/dev/src/templates/partials/languages/lt.html
+++ b/dev/src/templates/partials/languages/lt.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Lithuanian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "lt",
"action.edit": "Redaguoti šį puslapį",
diff --git a/dev/src/templates/partials/languages/lv.html b/dev/src/templates/partials/languages/lv.html
index 7bcd9ace..15719a1f 100644
--- a/dev/src/templates/partials/languages/lv.html
+++ b/dev/src/templates/partials/languages/lv.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Latvian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "lv",
"action.edit": "Rediģēt šo lapu",
diff --git a/dev/src/templates/partials/languages/mk.html b/dev/src/templates/partials/languages/mk.html
index e3dc114c..3ba92a5e 100644
--- a/dev/src/templates/partials/languages/mk.html
+++ b/dev/src/templates/partials/languages/mk.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Macedonian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "mk",
"action.edit": "Уредете ја оваа страница",
diff --git a/dev/src/templates/partials/languages/mn.html b/dev/src/templates/partials/languages/mn.html
index de9002ab..9d2c4791 100644
--- a/dev/src/templates/partials/languages/mn.html
+++ b/dev/src/templates/partials/languages/mn.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Mongolian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "mn",
"action.edit": "Хуудас засварлах",
diff --git a/dev/src/templates/partials/languages/ms.html b/dev/src/templates/partials/languages/ms.html
index 57b70fc7..459dfd3e 100644
--- a/dev/src/templates/partials/languages/ms.html
+++ b/dev/src/templates/partials/languages/ms.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Bahasa Malaysia -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ms",
"action.edit": "Edit halaman ini",
diff --git a/dev/src/templates/partials/languages/my.html b/dev/src/templates/partials/languages/my.html
index 27ca3ad9..09f849c9 100644
--- a/dev/src/templates/partials/languages/my.html
+++ b/dev/src/templates/partials/languages/my.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Burmese -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "my",
"action.edit": "ဤ စာမျက်နှာကို ပြင်ရန်",
diff --git a/dev/src/templates/partials/languages/nb.html b/dev/src/templates/partials/languages/nb.html
index 6be63531..732c8814 100644
--- a/dev/src/templates/partials/languages/nb.html
+++ b/dev/src/templates/partials/languages/nb.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Norwegian Bokmål -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "nb",
"action.edit": "Rediger denne siden",
diff --git a/dev/src/templates/partials/languages/nl.html b/dev/src/templates/partials/languages/nl.html
index 0000fe60..86028a4c 100644
--- a/dev/src/templates/partials/languages/nl.html
+++ b/dev/src/templates/partials/languages/nl.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Dutch -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "nl",
"action.edit": "Wijzig deze pagina",
diff --git a/dev/src/templates/partials/languages/nn.html b/dev/src/templates/partials/languages/nn.html
index 9478bdbe..7ebd8793 100644
--- a/dev/src/templates/partials/languages/nn.html
+++ b/dev/src/templates/partials/languages/nn.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Norwegian Nynorsk -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "nn",
"action.edit": "Rediger denne sida",
diff --git a/dev/src/templates/partials/languages/pl.html b/dev/src/templates/partials/languages/pl.html
index 7817633a..826a8c60 100644
--- a/dev/src/templates/partials/languages/pl.html
+++ b/dev/src/templates/partials/languages/pl.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Polish -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "pl",
"action.edit": "Edytuj tę stronę",
diff --git a/dev/src/templates/partials/languages/pt-BR.html b/dev/src/templates/partials/languages/pt-BR.html
index d934a9ac..de1b1f23 100644
--- a/dev/src/templates/partials/languages/pt-BR.html
+++ b/dev/src/templates/partials/languages/pt-BR.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Portuguese (Brasilian) -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "pt",
"action.edit": "Editar esta página",
diff --git a/dev/src/templates/partials/languages/pt.html b/dev/src/templates/partials/languages/pt.html
index e5dee1cb..8bc6b81f 100644
--- a/dev/src/templates/partials/languages/pt.html
+++ b/dev/src/templates/partials/languages/pt.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Portuguese -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "pt",
"action.edit": "Editar esta página",
diff --git a/dev/src/templates/partials/languages/ro.html b/dev/src/templates/partials/languages/ro.html
index 7bea9afb..31a36229 100644
--- a/dev/src/templates/partials/languages/ro.html
+++ b/dev/src/templates/partials/languages/ro.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Romanian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ro",
"action.edit": "Editeaza această pagină",
diff --git a/dev/src/templates/partials/languages/ru.html b/dev/src/templates/partials/languages/ru.html
index ddbd7b95..31fab68f 100644
--- a/dev/src/templates/partials/languages/ru.html
+++ b/dev/src/templates/partials/languages/ru.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Russian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ru",
"action.edit": "Редактировать страницу",
diff --git a/dev/src/templates/partials/languages/sa.html b/dev/src/templates/partials/languages/sa.html
index 338e2b61..aab566fe 100644
--- a/dev/src/templates/partials/languages/sa.html
+++ b/dev/src/templates/partials/languages/sa.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Sanskrit -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "sa",
"action.edit": "एतत् पृष्ठं सम्पादयतु",
diff --git a/dev/src/templates/partials/languages/sh.html b/dev/src/templates/partials/languages/sh.html
index 42a0d902..a7205f0d 100644
--- a/dev/src/templates/partials/languages/sh.html
+++ b/dev/src/templates/partials/languages/sh.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Serbo-Croatian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "sh",
"action.edit": "Ažuriraj stranicu",
diff --git a/dev/src/templates/partials/languages/si.html b/dev/src/templates/partials/languages/si.html
index eb41309e..b2120f9f 100644
--- a/dev/src/templates/partials/languages/si.html
+++ b/dev/src/templates/partials/languages/si.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Sinhalese -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "si",
"action.edit": "පිටුව සංස්කරණය",
diff --git a/dev/src/templates/partials/languages/sk.html b/dev/src/templates/partials/languages/sk.html
index 701a5a53..793bddbb 100644
--- a/dev/src/templates/partials/languages/sk.html
+++ b/dev/src/templates/partials/languages/sk.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Slovak -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "sk",
"action.edit": "Upraviť túto stránku",
diff --git a/dev/src/templates/partials/languages/sl.html b/dev/src/templates/partials/languages/sl.html
index a01f31d9..4eb060f2 100644
--- a/dev/src/templates/partials/languages/sl.html
+++ b/dev/src/templates/partials/languages/sl.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Slovenian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "sl",
"action.edit": "Uredi stran",
diff --git a/dev/src/templates/partials/languages/sr.html b/dev/src/templates/partials/languages/sr.html
index 275ea126..7ef5f0df 100644
--- a/dev/src/templates/partials/languages/sr.html
+++ b/dev/src/templates/partials/languages/sr.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Serbian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "sr",
"action.edit": "Ажурирај страницу",
diff --git a/dev/src/templates/partials/languages/sv.html b/dev/src/templates/partials/languages/sv.html
index 52f151d2..fe368f8e 100644
--- a/dev/src/templates/partials/languages/sv.html
+++ b/dev/src/templates/partials/languages/sv.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Swedish -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "sv",
"action.edit": "Redigera sidan",
diff --git a/dev/src/templates/partials/languages/te.html b/dev/src/templates/partials/languages/te.html
index 7529a47c..2bd6036d 100644
--- a/dev/src/templates/partials/languages/te.html
+++ b/dev/src/templates/partials/languages/te.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Telugu -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "te",
"action.edit": "ఈ పేజీలో దిద్దుబాట్లు చేయండి",
diff --git a/dev/src/templates/partials/languages/th.html b/dev/src/templates/partials/languages/th.html
index c8104fc1..915e0fd4 100644
--- a/dev/src/templates/partials/languages/th.html
+++ b/dev/src/templates/partials/languages/th.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Thai -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "th",
"action.edit": "แก้ไขหน้านี้",
diff --git a/dev/src/templates/partials/languages/tl.html b/dev/src/templates/partials/languages/tl.html
index 00c22c99..965d0443 100644
--- a/dev/src/templates/partials/languages/tl.html
+++ b/dev/src/templates/partials/languages/tl.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Tagalog -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "tl",
"action.edit": "I-edit ang pahinang ito",
diff --git a/dev/src/templates/partials/languages/tr.html b/dev/src/templates/partials/languages/tr.html
index 860f8ed7..4924828b 100644
--- a/dev/src/templates/partials/languages/tr.html
+++ b/dev/src/templates/partials/languages/tr.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Turkish -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "tr",
"action.edit": "Düzenle",
diff --git a/dev/src/templates/partials/languages/uk.html b/dev/src/templates/partials/languages/uk.html
index ca5c709c..91face86 100644
--- a/dev/src/templates/partials/languages/uk.html
+++ b/dev/src/templates/partials/languages/uk.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Ukrainian -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "uk",
"action.edit": "Редагувати сторінку",
diff --git a/dev/src/templates/partials/languages/ur.html b/dev/src/templates/partials/languages/ur.html
index 14a50588..06817358 100644
--- a/dev/src/templates/partials/languages/ur.html
+++ b/dev/src/templates/partials/languages/ur.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Urdu -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "ur",
"direction": "rtl",
diff --git a/dev/src/templates/partials/languages/uz.html b/dev/src/templates/partials/languages/uz.html
index d86f4db2..a326ab9b 100644
--- a/dev/src/templates/partials/languages/uz.html
+++ b/dev/src/templates/partials/languages/uz.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Uzbek -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "uz",
"action.edit": "Ushbu sahifani tahrirlash",
diff --git a/dev/src/templates/partials/languages/vi.html b/dev/src/templates/partials/languages/vi.html
index b63a8d82..b32202c0 100644
--- a/dev/src/templates/partials/languages/vi.html
+++ b/dev/src/templates/partials/languages/vi.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Vietnamese -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "vi",
"action.edit": "Chỉnh sửa",
diff --git a/dev/src/templates/partials/languages/zh-Hant.html b/dev/src/templates/partials/languages/zh-Hant.html
index 578fc82a..aaac6a7d 100644
--- a/dev/src/templates/partials/languages/zh-Hant.html
+++ b/dev/src/templates/partials/languages/zh-Hant.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Chinese (Traditional) -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "zh-Hant",
"action.edit": "編輯此頁",
diff --git a/dev/src/templates/partials/languages/zh-TW.html b/dev/src/templates/partials/languages/zh-TW.html
index 405538f8..b43170be 100644
--- a/dev/src/templates/partials/languages/zh-TW.html
+++ b/dev/src/templates/partials/languages/zh-TW.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Chinese (Taiwanese) -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "zh-TW",
"action.edit": "編輯此頁",
diff --git a/dev/src/templates/partials/languages/zh.html b/dev/src/templates/partials/languages/zh.html
index 49f233a4..1ce9a0c9 100644
--- a/dev/src/templates/partials/languages/zh.html
+++ b/dev/src/templates/partials/languages/zh.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Translations: Chinese (Simplified) -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro t(key) %}{{ {
"language": "zh",
"action.edit": "编辑此页",
diff --git a/dev/src/templates/partials/logo.html b/dev/src/templates/partials/logo.html
index 05832c71..6d80f2ce 100644
--- a/dev/src/templates/partials/logo.html
+++ b/dev/src/templates/partials/logo.html
@@ -1,28 +1,8 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Logo -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% if config.theme.logo %}
- <img src="{{ config.theme.logo | url }}" alt="logo" />
+ <img src="{{ config.theme.logo | url }}" alt="logo">
{% else %}
{% set icon = config.theme.icon.logo or "material/library" %}
{% include ".icons/" ~ icon ~ ".svg" %}
diff --git a/dev/src/templates/partials/nav-item.html b/dev/src/templates/partials/nav-item.html
index 24d74a1a..5e880792 100644
--- a/dev/src/templates/partials/nav-item.html
+++ b/dev/src/templates/partials/nav-item.html
@@ -1,96 +1,45 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Render navigation link status -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro render_status(nav_item, type) %}
{% set class = "md-status md-status--" ~ type %}
-
- <!-- Render icon with title (or tooltip), if given -->
{% if config.extra.status and config.extra.status[type] %}
- <span
- class="{{ class }}"
- title="{{ config.extra.status[type] }}"
- >
+ <span class="{{ class }}" title="{{ config.extra.status[type] }}">
</span>
-
- <!-- Render icon only -->
{% else %}
<span class="{{ class }}"></span>
{% endif %}
{% endmacro %}
-
-<!-- Render navigation link content -->
{% macro render_content(nav_item, ref = nav_item) %}
-
- <!-- Navigation link icon -->
{% if nav_item.is_page and nav_item.meta.icon %}
{% include ".icons/" ~ nav_item.meta.icon ~ ".svg" %}
{% endif %}
-
- <!-- Navigation link title -->
<span class="md-ellipsis">
{{ ref.title }}
</span>
-
- <!-- Navigation link status -->
{% if nav_item.is_page and nav_item.meta.status %}
{{ render_status(nav_item, nav_item.meta.status) }}
{% endif %}
{% endmacro %}
-
-<!-- Render navigation item (pruned) -->
{% macro render_pruned(nav_item, ref = nav_item) %}
{% set first = nav_item.children | first %}
-
- <!-- Recurse, if the first item has further nested items -->
{% if first and first.children %}
{{ render_pruned(first, ref) }}
-
- <!-- Navigation link -->
{% else %}
<a href="{{ first.url | url }}" class="md-nav__link">
{{ render_content(ref) }}
-
- <!-- Only render toggle if there's at least one nested item -->
{% if nav_item.children | length > 0 %}
<span class="md-nav__icon md-icon"></span>
{% endif %}
</a>
{% endif %}
{% endmacro %}
-
-<!-- Render navigation item -->
{% macro render(nav_item, path, level) %}
-
- <!-- Determine classes -->
{% set class = "md-nav__item" %}
{% if nav_item.active %}
{% set class = class ~ " md-nav__item--active" %}
{% endif %}
-
- <!-- Navigation item with nested items -->
{% if nav_item.children %}
-
- <!-- Determine all nested items that are index pages -->
{% set indexes = [] %}
{% if "navigation.indexes" in features %}
{% for nav_item in nav_item.children %}
@@ -99,93 +48,50 @@
{% endif %}
{% endfor %}
{% endif %}
-
- <!-- Determine whether to render item as a section -->
{% set tabs = "navigation.tabs" in features %}
{% set sections = "navigation.sections" in features %}
{% if tabs and level == 1 or sections and tabs >= level - 1 %}
{% set class = class ~ " md-nav__item--section" %}
{% set is_section = true %}
-
- <!-- Determine whether to prune inactive item -->
{% elif not nav_item.active and "navigation.prune" in features %}
{% set class = class ~ " md-nav__item--pruned" %}
{% set is_pruned = true %}
{% endif %}
-
- <!-- Nested navigation item -->
<li class="{{ class }} md-nav__item--nested">
{% if not is_pruned %}
{% set checked = "checked" if nav_item.active %}
-
- <!-- Determine checked and indeterminate state -->
{% set is_expanded = "navigation.expand" in features %}
{% if is_expanded and not checked %}
{% set indeterminate = "md-toggle--indeterminate" %}
{% endif %}
-
- <!-- Active checkbox expands items contained within nested section -->
- <input
- class="md-nav__toggle md-toggle {{ indeterminate }}"
- type="checkbox"
- id="{{ path }}"
- {{ checked }}
- />
-
- <!-- Toggle to expand nested items -->
+ <input class="md-nav__toggle md-toggle {{ indeterminate }}" type="checkbox" id="{{ path }}" {{ checked }}>
{% if not indexes %}
{% set tabindex = "0" if not is_section %}
- <label
- class="md-nav__link"
- for="{{ path }}"
- id="{{ path }}_label"
- tabindex="{{ tabindex }}"
- >
+ <label class="md-nav__link" for="{{ path }}" id="{{ path }}_label" tabindex="{{ tabindex }}">
{{ render_content(nav_item) }}
<span class="md-nav__icon md-icon"></span>
</label>
-
- <!-- Toggle to expand nested items with link to index page -->
{% else %}
{% set index = indexes | first %}
{% set class = "md-nav__link--active" if index == page %}
<div class="md-nav__link md-nav__container">
- <a
- href="{{ index.url | url }}"
- class="md-nav__link {{ class }}"
- >
+ <a href="{{ index.url | url }}" class="md-nav__link {{ class }}">
{{ render_content(index, nav_item) }}
</a>
-
- <!-- Only render toggle if there's at least one more page -->
{% if nav_item.children | length > 1 %}
{% set tabindex = "0" if not is_section %}
- <label
- class="md-nav__link {{ class }}"
- for="{{ path }}"
- id="{{ path }}_label"
- tabindex="{{ tabindex }}"
- >
+ <label class="md-nav__link {{ class }}" for="{{ path }}" id="{{ path }}_label" tabindex="{{ tabindex }}">
<span class="md-nav__icon md-icon"></span>
</label>
{% endif %}
</div>
{% endif %}
-
- <!-- Nested navigation -->
- <nav
- class="md-nav"
- data-md-level="{{ level }}"
- aria-labelledby="{{ path }}_label"
- aria-expanded="{{ nav_item.active | tojson }}"
- >
+ <nav class="md-nav" data-md-level="{{ level }}" aria-labelledby="{{ path }}_label" aria-expanded="{{ nav_item.active | tojson }}">
<label class="md-nav__title" for="{{ path }}">
<span class="md-nav__icon md-icon"></span>
{{ nav_item.title }}
</label>
<ul class="md-nav__list" data-md-scrollfix>
-
- <!-- Nested navigation item -->
{% for nav_item in nav_item.children %}
{% if not indexes or nav_item != indexes | first %}
{{ render(nav_item, path ~ "_" ~ loop.index, level + 1) }}
@@ -193,52 +99,31 @@
{% endfor %}
</ul>
</nav>
-
- <!-- Pruned navigation item -->
{% else %}
{{ render_pruned(nav_item) }}
{% endif %}
</li>
-
- <!-- Currently active page -->
{% elif nav_item == page %}
<li class="{{ class }}">
{% set toc = page.toc %}
-
- <!-- State toggle -->
- <input
- class="md-nav__toggle md-toggle"
- type="checkbox"
- id="__toc"
- />
-
- <!-- Hack: see partials/toc.html for more information -->
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
{% set first = toc | first %}
{% if first and first.level == 1 %}
{% set toc = first.children %}
{% endif %}
-
- <!-- Navigation link to table of contents -->
{% if toc %}
<label class="md-nav__link md-nav__link--active" for="__toc">
{{ render_content(nav_item) }}
<span class="md-nav__icon md-icon"></span>
</label>
{% endif %}
- <a
- href="{{ nav_item.url | url }}"
- class="md-nav__link md-nav__link--active"
- >
+ <a href="{{ nav_item.url | url }}" class="md-nav__link md-nav__link--active">
{{ render_content(nav_item) }}
</a>
-
- <!-- Table of contents -->
{% if toc %}
{% include "partials/toc.html" %}
{% endif %}
</li>
-
- <!-- Navigation item -->
{% else %}
<li class="{{ class }}">
<a href="{{ nav_item.url | url }}" class="md-nav__link">
diff --git a/dev/src/templates/partials/nav.html b/dev/src/templates/partials/nav.html
index c41fe694..a701dcd2 100644
--- a/dev/src/templates/partials/nav.html
+++ b/dev/src/templates/partials/nav.html
@@ -1,28 +1,7 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
{% import "partials/nav-item.html" as item with context %}
-
-<!-- Determine classes -->
{% set class = "md-nav md-nav--primary" %}
{% if "navigation.tabs" in features %}
{% set class = class ~ " md-nav--lifted" %}
@@ -30,36 +9,18 @@
{% if "toc.integrate" in features %}
{% set class = class ~ " md-nav--integrated" %}
{% endif %}
-
-<!-- Navigation -->
-<nav
- class="{{ class }}"
- aria-label="{{ lang.t('nav') }}"
- data-md-level="0"
->
-
- <!-- Site title -->
+<nav class="{{ class }}" aria-label="{{ lang.t('nav') }}" data-md-level="0">
<label class="md-nav__title" for="__drawer">
- <a
- href="{{ config.extra.homepage | d(nav.homepage.url, true) | url }}"
- title="{{ config.site_name | e }}"
- class="md-nav__button md-logo"
- aria-label="{{ config.site_name }}"
- data-md-component="logo"
- >
+ <a href="{{ config.extra.homepage | d(nav.homepage.url, true) | url }}" title="{{ config.site_name | e }}" class="md-nav__button md-logo" aria-label="{{ config.site_name }}" data-md-component="logo">
{% include "partials/logo.html" %}
</a>
{{ config.site_name }}
</label>
-
- <!-- Repository information -->
{% if config.repo_url %}
<div class="md-nav__source">
{% include "partials/source.html" %}
</div>
{% endif %}
-
- <!-- Navigation list -->
<ul class="md-nav__list" data-md-scrollfix>
{% for nav_item in nav %}
{% set path = "__nav_" ~ loop.index %}
diff --git a/dev/src/templates/partials/pagination.html b/dev/src/templates/partials/pagination.html
index 046ecbe9..1de2cd4c 100644
--- a/dev/src/templates/partials/pagination.html
+++ b/dev/src/templates/partials/pagination.html
@@ -1,32 +1,10 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Pagination icons -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% import ".icons/material/chevron-double-left.svg" as icon_first %}
{% import ".icons/material/chevron-left.svg" as icon_previous %}
{% import ".icons/material/chevron-right.svg" as icon_next %}
{% import ".icons/material/chevron-double-right.svg" as icon_last %}
-
-<!-- Pagination -->
<nav class="md-pagination">
{{
pagination({
diff --git a/dev/src/templates/partials/palette.html b/dev/src/templates/partials/palette.html
index ccb8db0a..11ec1115 100644
--- a/dev/src/templates/partials/palette.html
+++ b/dev/src/templates/partials/palette.html
@@ -1,53 +1,14 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Color palette toggle -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<form class="md-header__option" data-md-component="palette">
{% for option in config.theme.palette %}
{% set scheme = option.scheme | d("default", true) %}
{% set primary = option.primary | d("indigo", true) %}
{% set accent = option.accent | d("indigo", true) %}
- <input
- class="md-option"
- data-md-color-media="{{ option.media }}"
- data-md-color-scheme="{{ scheme | replace(' ', '-') }}"
- data-md-color-primary="{{ primary | replace(' ', '-') }}"
- data-md-color-accent="{{ accent | replace(' ', '-') }}"
- {% if option.toggle %}
- aria-label="{{ option.toggle.name }}"
- {% else %}
- aria-hidden="true"
- {% endif %}
- type="radio"
- name="__palette"
- id="__palette_{{ loop.index }}"
- />
+ <input class="md-option" data-md-color-media="{{ option.media }}" data-md-color-scheme="{{ scheme | replace(' ', '-') }}" data-md-color-primary="{{ primary | replace(' ', '-') }}" data-md-color-accent="{{ accent | replace(' ', '-') }}" {% if option.toggle %} aria-label="{{ option.toggle.name }}" {% else %} aria-hidden="true" {% endif %} type="radio" name="__palette" id="__palette_{{ loop.index }}">
{% if option.toggle %}
- <label
- class="md-header__button md-icon"
- title="{{ option.toggle.name }}"
- for="__palette_{{ loop.index0 or loop.length }}"
- hidden
- >
+ <label class="md-header__button md-icon" title="{{ option.toggle.name }}" for="__palette_{{ loop.index0 or loop.length }}" hidden>
{% include ".icons/" ~ option.toggle.icon ~ ".svg" %}
</label>
{% endif %}
diff --git a/dev/src/templates/partials/post.html b/dev/src/templates/partials/post.html
index c7233051..08f3c8f1 100644
--- a/dev/src/templates/partials/post.html
+++ b/dev/src/templates/partials/post.html
@@ -1,69 +1,36 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Post excerpt -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<article class="md-post md-post--excerpt">
<header class="md-post__header">
-
- <!-- Post authors -->
{% if post.authors %}
<nav class="md-post__authors md-typeset">
{% for author in post.authors %}
<span class="md-author">
- <img src="{{ author.avatar }}" alt="{{ author.name }}" />
+ <img src="{{ author.avatar }}" alt="{{ author.name }}">
</span>
{% endfor %}
</nav>
{% endif %}
-
- <!-- Post metadata -->
<div class="md-post__meta md-meta">
<ul class="md-meta__list">
-
- <!-- Post date -->
<li class="md-meta__item">
<time datetime="{{ post.config.date.created }}">
{{- post.config.date.created | date -}}
</time>
{#- Collapse whitespace -#}
</li>
-
- <!-- Post categories -->
{% if post.categories %}
<li class="md-meta__item">
{{ lang.t("blog.categories.in") }}
{% for category in post.categories %}
- <a
- href="{{ category.url | url }}"
- class="md-meta__link"
- >
+ <a href="{{ category.url | url }}" class="md-meta__link">
{{- category.title -}}
</a>
{%- if loop.revindex > 1 %}, {% endif -%}
{% endfor -%}
</li>
{% endif %}
-
- <!-- Post readtime -->
{% if post.config.readtime %}
{% set time = post.config.readtime %}
<li class="md-meta__item">
@@ -75,8 +42,6 @@
</li>
{% endif %}
</ul>
-
- <!-- Draft marker -->
{% if post.config.draft %}
<span class="md-draft">
{{ lang.t("blog.draft") }}
@@ -84,12 +49,8 @@
{% endif %}
</div>
</header>
-
- <!-- Post content -->
<div class="md-post__content md-typeset">
{{ post.content }}
-
- <!-- Continue reading link -->
<nav class="md-post__action">
<a href="{{ post.url | url }}">
{{ lang.t("blog.continue") }}
diff --git a/dev/src/templates/partials/progress.html b/dev/src/templates/partials/progress.html
index f5d13d10..457156bb 100644
--- a/dev/src/templates/partials/progress.html
+++ b/dev/src/templates/partials/progress.html
@@ -1,24 +1,4 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Progress indicator -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<div class="md-progress" data-md-component="progress" role="progressbar"></div>
diff --git a/dev/src/templates/partials/search.html b/dev/src/templates/partials/search.html
index 1854a7d3..4ad3b36f 100644
--- a/dev/src/templates/partials/search.html
+++ b/dev/src/templates/partials/search.html
@@ -1,102 +1,35 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Search interface -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
-
- <!-- Search input -->
- <input
- type="text"
- class="md-search__input"
- name="query"
- aria-label="{{ lang.t('search.placeholder') }}"
- placeholder="{{ lang.t('search.placeholder') }}"
- autocapitalize="off"
- autocorrect="off"
- autocomplete="off"
- spellcheck="false"
- data-md-component="search-query"
- required
- />
-
- <!-- Button to open search -->
+ <input type="text" class="md-search__input" name="query" aria-label="{{ lang.t('search.placeholder') }}" placeholder="{{ lang.t('search.placeholder') }}" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
{% set icon = config.theme.icon.search or "material/magnify" %}
{% include ".icons/" ~ icon ~ ".svg" %}
{% set icon = config.theme.icon.previous or "material/arrow-left" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</label>
-
- <!-- Search options -->
- <nav
- class="md-search__options"
- aria-label="{{ lang.t('search') }}"
- >
-
- <!-- Button to share search -->
+ <nav class="md-search__options" aria-label="{{ lang.t('search') }}">
{% if "search.share" in features %}
- <a
- href="javascript:void(0)"
- class="md-search__icon md-icon"
- title="{{ lang.t('search.share') }}"
- aria-label="{{ lang.t('search.share') }}"
- data-clipboard
- data-clipboard-text=""
- data-md-component="search-share"
- tabindex="-1"
- >
+ <a href="javascript:void(0)" class="md-search__icon md-icon" title="{{ lang.t('search.share') }}" aria-label="{{ lang.t('search.share') }}" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
{% set icon = config.theme.icon.share or "material/share-variant" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</a>
{% endif %}
-
- <!-- Button to reset search -->
- <button
- type="reset"
- class="md-search__icon md-icon"
- title="{{ lang.t('search.reset') }}"
- aria-label="{{ lang.t('search.reset') }}"
- tabindex="-1"
- >
+ <button type="reset" class="md-search__icon md-icon" title="{{ lang.t('search.reset') }}" aria-label="{{ lang.t('search.reset') }}" tabindex="-1">
{% set icon = config.theme.icon.close or "material/close" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</button>
</nav>
-
- <!-- Search suggestions -->
{% if "search.suggest" in features %}
- <div
- class="md-search__suggest"
- data-md-component="search-suggest"
- ></div>
+ <div class="md-search__suggest" data-md-component="search-suggest"></div>
{% endif %}
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
-
- <!-- Search results -->
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
{{ lang.t("search.result.initializer") }}
diff --git a/dev/src/templates/partials/social.html b/dev/src/templates/partials/social.html
index 5d2c4017..e59fdae6 100644
--- a/dev/src/templates/partials/social.html
+++ b/dev/src/templates/partials/social.html
@@ -1,47 +1,18 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Social links -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<div class="md-social">
{% for social in config.extra.social %}
-
- <!-- Automatically set rel=me for Mastodon -->
{% set rel = "noopener" %}
{% if "mastodon" in social.icon %}
{% set rel = rel ~ " me" %}
{% endif %}
-
- <!-- Compute title and render link -->
{% set title = social.name %}
{% if not title and "//" in social.link %}
{% set _, url = social.link.split("//") %}
{% set title = url.split("/")[0] %}
{% endif %}
- <a
- href="{{ social.link }}"
- target="_blank" rel="{{ rel }}"
- title="{{ title | e }}"
- class="md-social__link"
- >
+ <a href="{{ social.link }}" target="_blank" rel="{{ rel }}" title="{{ title | e }}" class="md-social__link">
{% include ".icons/" ~ social.icon ~ ".svg" %}
</a>
{% endfor %}
diff --git a/dev/src/templates/partials/source-file.html b/dev/src/templates/partials/source-file.html
index 928e35de..ae5bd084 100644
--- a/dev/src/templates/partials/source-file.html
+++ b/dev/src/templates/partials/source-file.html
@@ -1,41 +1,17 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Source file information -->
-<hr />
+{#-
+ This file was automatically generated - do not edit
+-#}
+<hr>
<div class="md-source-file">
<small>
-
- <!-- mkdocs-git-revision-date-localized-plugin -->
{% if page.meta.git_revision_date_localized %}
{{ lang.t("source.file.date.updated") }}:
{{ page.meta.git_revision_date_localized }}
{% if page.meta.git_creation_date_localized %}
- <br />
+ <br>
{{ lang.t("source.file.date.created") }}:
{{ page.meta.git_creation_date_localized }}
{% endif %}
-
- <!-- mkdocs-git-revision-date-plugin -->
{% elif page.meta.revision_date %}
{{ lang.t("source.file.date.updated") }}:
{{ page.meta.revision_date }}
diff --git a/dev/src/templates/partials/source.html b/dev/src/templates/partials/source.html
index f4aac3e6..711ecaef 100644
--- a/dev/src/templates/partials/source.html
+++ b/dev/src/templates/partials/source.html
@@ -1,32 +1,7 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Repository information -->
-<a
- href="{{ config.repo_url }}"
- title="{{ lang.t('source') }}"
- class="md-source"
- data-md-component="source"
->
+{#-
+ This file was automatically generated - do not edit
+-#}
+<a href="{{ config.repo_url }}" title="{{ lang.t('source') }}" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
{% set icon = config.theme.icon.repo or "fontawesome/brands/git-alt" %}
{% include ".icons/" ~ icon ~ ".svg" %}
diff --git a/dev/src/templates/partials/tabs-item.html b/dev/src/templates/partials/tabs-item.html
index 7a12a742..0e80035c 100644
--- a/dev/src/templates/partials/tabs-item.html
+++ b/dev/src/templates/partials/tabs-item.html
@@ -1,57 +1,23 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Render navigation link content -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% macro render_content(nav_item, ref = nav_item) %}
-
- <!-- Navigation link icon -->
{% if nav_item == ref or "navigation.indexes" in features %}
{% if nav_item.is_index and nav_item.meta.icon %}
{% include ".icons/" ~ nav_item.meta.icon ~ ".svg" %}
{% endif %}
{% endif %}
-
- <!-- Navigation link title -->
{{ ref.title }}
{% endmacro %}
-
-<!-- Render navigation item -->
{% macro render(nav_item, ref = nav_item) %}
-
- <!-- Determine classes -->
{% set class = "md-tabs__item" %}
{% if ref.active %}
{% set class = class ~ " md-tabs__item--active" %}
{% endif %}
-
- <!-- Navigation item with nested items -->
{% if nav_item.children %}
{% set first = nav_item.children | first %}
-
- <!-- Recurse, if the first item has further nested items -->
{% if first.children %}
{{ render(first, ref) }}
-
- <!-- Nested navigation item -->
{% else %}
<li class="{{ class }}">
<a href="{{ first.url | url }}" class="md-tabs__link">
@@ -59,8 +25,6 @@
</a>
</li>
{% endif %}
-
- <!-- Navigation item -->
{% else %}
<li class="{{ class }}">
<a href="{{ nav_item.url | url }}" class="md-tabs__link">
diff --git a/dev/src/templates/partials/tabs.html b/dev/src/templates/partials/tabs.html
index 0ea590cf..04cb0c9c 100644
--- a/dev/src/templates/partials/tabs.html
+++ b/dev/src/templates/partials/tabs.html
@@ -1,33 +1,8 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
{% import "partials/tabs-item.html" as item with context %}
-
-<!-- Navigation tabs -->
-<nav
- class="md-tabs"
- aria-label="{{ lang.t('tabs') }}"
- data-md-component="tabs"
->
+<nav class="md-tabs" aria-label="{{ lang.t('tabs') }}" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
{% for nav_item in nav %}
diff --git a/dev/src/templates/partials/tags.html b/dev/src/templates/partials/tags.html
index b3dea295..128e9595 100644
--- a/dev/src/templates/partials/tags.html
+++ b/dev/src/templates/partials/tags.html
@@ -1,31 +1,9 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Determine whether to show tags -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% if page.meta and page.meta.hide %}
{% set hidden = "hidden" if "tags" in page.meta.hide %}
{% endif %}
-
-<!-- Tags -->
<nav class="md-tags" {{ hidden }}>
{% for tag in tags %}
{% set icon = "" %}
@@ -35,14 +13,10 @@
{% set icon = icon ~ " md-tag--" ~ tag.type %}
{% endif %}
{% endif %}
-
- <!-- Render tag with link -->
{% if tag.url %}
<a href="{{ tag.url | url }}" class="md-tag{{ icon }}">
{{- tag.name -}}
</a>
-
- <!-- Render tag without link -->
{% else %}
<span class="md-tag{{ icon }}">
{{- tag.name -}}
diff --git a/dev/src/templates/partials/toc-item.html b/dev/src/templates/partials/toc-item.html
index 1af82c56..c8397272 100644
--- a/dev/src/templates/partials/toc-item.html
+++ b/dev/src/templates/partials/toc-item.html
@@ -1,32 +1,10 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Table of contents item -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<li class="md-nav__item">
<a href="{{ toc_item.url }}" class="md-nav__link">
{{ toc_item.title }}
</a>
-
- <!-- Table of contents list -->
{% if toc_item.children %}
<nav class="md-nav" aria-label="{{ toc_item.title | striptags }}">
<ul class="md-nav__list">
diff --git a/dev/src/templates/partials/toc.html b/dev/src/templates/partials/toc.html
index cb50b257..aeeb3acb 100644
--- a/dev/src/templates/partials/toc.html
+++ b/dev/src/templates/partials/toc.html
@@ -1,47 +1,16 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Determine title -->
+{#-
+ This file was automatically generated - do not edit
+-#}
{% set title = lang.t("toc") %}
{% if config.mdx_configs.toc and config.mdx_configs.toc.title %}
{% set title = config.mdx_configs.toc.title %}
{% endif %}
-
-<!-- Table of contents -->
<nav class="md-nav md-nav--secondary" aria-label="{{ title }}">
{% set toc = page.toc %}
-
- <!--
- Check whether the content starts with a level 1 headline. If it does, the
- top-level anchor must be skipped, since it would be redundant to the link
- to the current page that is located just above the anchor. Therefore we
- directly continue with the children of the anchor.
- -->
{% set first = toc | first %}
{% if first and first.level == 1 %}
{% set toc = first.children %}
{% endif %}
-
- <!-- Table of contents title and list -->
{% if toc %}
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
diff --git a/dev/src/templates/partials/top.html b/dev/src/templates/partials/top.html
index 737e6248..95da428b 100644
--- a/dev/src/templates/partials/top.html
+++ b/dev/src/templates/partials/top.html
@@ -1,26 +1,6 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
-<!-- Progress indicator -->
+{#-
+ This file was automatically generated - do not edit
+-#}
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
{% set icon = config.theme.icon.top or "material/arrow-up" %}
{% include ".icons/" ~ icon ~ ".svg" %}
diff --git a/dev/src/templates/redirect.html b/dev/src/templates/redirect.html
index 80869c4f..97b6ef00 100644
--- a/dev/src/templates/redirect.html
+++ b/dev/src/templates/redirect.html
@@ -1,41 +1,16 @@
-<!--
- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
--->
-
+{#-
+ This file was automatically generated - do not edit
+-#}
<!doctype html>
<html>
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
<title>{{ config.site_name }}</title>
<noscript>
- <meta http-equiv="refresh" content="0;url={{ page.meta.location }}" />
+ <meta http-equiv="refresh" content="0;url={{ page.meta.location }}">
</noscript>
- <script>
- window.location.replace([
- "{{ page.meta.location }}",
- window.location.search,
- window.location.hash
- ].join(""))
- </script>
+ <script>window.location.replace(["{{ page.meta.location }}",window.location.search,window.location.hash].join(""))</script>
</head>
<body></body>
</html>