From 60b3ae45f4cea1429b292137c2d46de58bfe037c Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 17 Dec 2023 22:38:37 +0000 Subject: Deployed 5a95bddd to dev with MkDocs 1.5.3 and mike 2.0.0 --- dev/API/index.html | 2 +- dev/CLI/index.html | 2 +- dev/Core/index.html | 2 +- dev/Help/PythonSkill/index.html | 2 +- dev/Help/TermList/index.html | 2 +- dev/Help/emoji/index.html | 2 +- dev/RulePackage/Write/prepare/index.html | 2 +- dev/RulePackage/Write/python/index.html | 2 +- dev/RulePackage/Write/write/index.html | 2 +- dev/RulePackage/getStart/attribute/index.html | 2 +- dev/RulePackage/getStart/class/index.html | 2 +- dev/RulePackage/getStart/getDeeper/Module/index.html | 2 +- dev/RulePackage/getStart/getDeeper/Package/index.html | 2 +- dev/RulePackage/getStart/getDeeper/object/index.html | 2 +- dev/RulePackage/getStart/method/index.html | 2 +- dev/RulePackage/intro/index.html | 2 +- dev/RulePackage/skill/fstring/index.html | 2 +- dev/RulePackage/skill/index.html | 2 +- dev/Standard/Term/DefaultDice/_counts/index.html | 2 +- dev/Standard/Term/DefaultDice/_sides/index.html | 2 +- dev/Standard/Term/DefaultDice/index.html | 2 +- dev/Standard/Term/PlayerCard/index.html | 2 +- dev/Standard/Term/check/ability/index.html | 2 +- dev/Standard/Term/check/index.html | 2 +- dev/Standard/Term/duration/campaign/index.html | 2 +- dev/Standard/Term/duration/index.html | 2 +- dev/Standard/Term/duration/module/index.html | 2 +- dev/Standard/Term/duration/sene/index.html | 2 +- dev/Standard/Term/scenario/index.html | 2 +- dev/Standard/Term/setting/index.html | 2 +- dev/Standard/what-is-rule-package/index.html | 2 +- dev/Standard/what-is-standard/index.html | 2 +- dev/Standard/why-rule-package/index.html | 2 +- .../index.html" | 2 +- dev/changelog/index.html | 2 +- dev/search/search_index.json | 2 +- dev/sitemap.xml.gz | Bin 127 -> 127 bytes 37 files changed, 36 insertions(+), 36 deletions(-) diff --git a/dev/API/index.html b/dev/API/index.html index 17c398cd..e7a14026 100644 --- a/dev/API/index.html +++ b/dev/API/index.html @@ -1 +1 @@ - API Reference - Infini 核心文档

API Reference

\ No newline at end of file + API Reference - Infini 核心文档

API Reference

\ No newline at end of file diff --git a/dev/CLI/index.html b/dev/CLI/index.html index a31d01a9..4e2d516d 100644 --- a/dev/CLI/index.html +++ b/dev/CLI/index.html @@ -59,4 +59,4 @@ result.append("") return "\n".join(result) -

print(render_parser(parser, "infini")) ```

\ No newline at end of file +

print(render_parser(parser, "infini")) ```

\ No newline at end of file diff --git a/dev/Core/index.html b/dev/Core/index.html index 6263d3e2..dd717669 100644 --- a/dev/Core/index.html +++ b/dev/Core/index.html @@ -19,4 +19,4 @@ class Myrule(Rule): """自设规则包,继承 Rule 基类""" -
  1. 合理修改你的 config.toml 配置文件,完成注册!

📄 License

MIT © 2023-PRESENT 简律纯

\ No newline at end of file +
  1. 合理修改你的 config.toml 配置文件,完成注册!

📄 License

MIT © 2023-PRESENT 简律纯

\ No newline at end of file diff --git a/dev/Help/PythonSkill/index.html b/dev/Help/PythonSkill/index.html index 7c3cab61..e9b9f25d 100644 --- a/dev/Help/PythonSkill/index.html +++ b/dev/Help/PythonSkill/index.html @@ -1 +1 @@ - Python 技巧 - Infini 核心文档

Python 技巧

\ No newline at end of file + Python 技巧 - Infini 核心文档

Python 技巧

\ No newline at end of file diff --git a/dev/Help/TermList/index.html b/dev/Help/TermList/index.html index 46c8736d..f8780043 100644 --- a/dev/Help/TermList/index.html +++ b/dev/Help/TermList/index.html @@ -1 +1 @@ - 术语表一览 - Infini 核心文档
跳转至

术语表一览

移步正式术语

\ No newline at end of file + 术语表一览 - Infini 核心文档
跳转至

术语表一览

移步正式术语

\ No newline at end of file diff --git a/dev/Help/emoji/index.html b/dev/Help/emoji/index.html index 8f217595..cacfc453 100644 --- a/dev/Help/emoji/index.html +++ b/dev/Help/emoji/index.html @@ -1 +1 @@ - 图标、注释说明 - Infini 核心文档
跳转至

图标、图例、注释说明

目录树、侧边栏图标

这些图标将会出现在页面左侧的 navigation 与文章右侧的 toc 当中。

release 版本中 不推荐使用 但是 仍然有效 的功能、特性。并且在 latest 版本中已经完全废弃1

在上一个 release 版本作为实验功能或作为扩展特性但是核心本体并未支持的功能、特性,于 latest 版本被引入。

存在于当前 dev 版本中但是未在 latest 版本中加入的功能、特性。

在支持 latestdev特定 release 版本的插件扩展中存在此特性的可行性方案。

抽象概念

这些图标会出现在文章内容中作为抽象概念的具体表达,用于迁移记忆。

以下是图标应用举例:


  • [人物背景]: 生于银河纪元11988年,卒于银河纪元12069年。他的卒年后来被确定为基地纪元元年。他是一位年轻有为的数学家,中等个子,长相俊朗。他曾经担任川陀大学数学系主任,是第一帝国克里昂一世皇帝的御前首相,川陀大学心理史学系荣誉教授,心理史学研究计划主持人、银河百科全书执行编辑。他是心理史学创始人之一(另一位是雨果·阿玛瑞尔),同时也是基地创始人。他还被认为是第二基地第一任首席发言者,后来也成了基地的传奇英雄。

注释说明


  1. 具体还要看下一个大版本的文档如何编写。 

\ No newline at end of file + 图标、注释说明 - Infini 核心文档
跳转至

图标、图例、注释说明

目录树、侧边栏图标

这些图标将会出现在页面左侧的 navigation 与文章右侧的 toc 当中。

release 版本中 不推荐使用 但是 仍然有效 的功能、特性。并且在 latest 版本中已经完全废弃1

在上一个 release 版本作为实验功能或作为扩展特性但是核心本体并未支持的功能、特性,于 latest 版本被引入。

存在于当前 dev 版本中但是未在 latest 版本中加入的功能、特性。

在支持 latestdev特定 release 版本的插件扩展中存在此特性的可行性方案。

抽象概念

这些图标会出现在文章内容中作为抽象概念的具体表达,用于迁移记忆。

以下是图标应用举例:


  • [人物背景]: 生于银河纪元11988年,卒于银河纪元12069年。他的卒年后来被确定为基地纪元元年。他是一位年轻有为的数学家,中等个子,长相俊朗。他曾经担任川陀大学数学系主任,是第一帝国克里昂一世皇帝的御前首相,川陀大学心理史学系荣誉教授,心理史学研究计划主持人、银河百科全书执行编辑。他是心理史学创始人之一(另一位是雨果·阿玛瑞尔),同时也是基地创始人。他还被认为是第二基地第一任首席发言者,后来也成了基地的传奇英雄。

注释说明


  1. 具体还要看下一个大版本的文档如何编写。 

\ No newline at end of file diff --git a/dev/RulePackage/Write/prepare/index.html b/dev/RulePackage/Write/prepare/index.html index c33b6d36..4dfd9f87 100644 --- a/dev/RulePackage/Write/prepare/index.html +++ b/dev/RulePackage/Write/prepare/index.html @@ -1 +1 @@ - 准备规则书 - Infini 核心文档

准备规则书

\ No newline at end of file + 准备规则书 - Infini 核心文档

准备规则书

\ No newline at end of file diff --git a/dev/RulePackage/Write/python/index.html b/dev/RulePackage/Write/python/index.html index 733dd24c..9cf1b468 100644 --- a/dev/RulePackage/Write/python/index.html +++ b/dev/RulePackage/Write/python/index.html @@ -1 +1 @@ - 了解Python - Infini 核心文档

了解Python

\ No newline at end of file + 了解Python - Infini 核心文档

了解Python

\ No newline at end of file diff --git a/dev/RulePackage/Write/write/index.html b/dev/RulePackage/Write/write/index.html index f6d26c39..d3349045 100644 --- a/dev/RulePackage/Write/write/index.html +++ b/dev/RulePackage/Write/write/index.html @@ -1 +1 @@ - 编写规则包 - Infini 核心文档

编写规则包

\ No newline at end of file + 编写规则包 - Infini 核心文档

编写规则包

\ No newline at end of file diff --git a/dev/RulePackage/getStart/attribute/index.html b/dev/RulePackage/getStart/attribute/index.html index c1ac9627..af3e7292 100644 --- a/dev/RulePackage/getStart/attribute/index.html +++ b/dev/RulePackage/getStart/attribute/index.html @@ -1 +1 @@ - attribute 属性 - Infini 核心文档

属性

Info

关联到一个对象的值,通常使用点号表达式按名称来引用。 举例来说,如果对象 o 具有属性 a 则可以用 o.a 来引用它。

如果对象允许,将未被定义为 标识符和关键字 的非标识名称用作一个对象的属性也是可以的,例如使用 setattr()。 这样的属性将无法使用点号表达式来访问,而是必须通过 getattr() 来获取。

\ No newline at end of file + attribute 属性 - Infini 核心文档

属性

Info

关联到一个对象的值,通常使用点号表达式按名称来引用。 举例来说,如果对象 o 具有属性 a 则可以用 o.a 来引用它。

如果对象允许,将未被定义为 标识符和关键字 的非标识名称用作一个对象的属性也是可以的,例如使用 setattr()。 这样的属性将无法使用点号表达式来访问,而是必须通过 getattr() 来获取。

\ No newline at end of file diff --git a/dev/RulePackage/getStart/class/index.html b/dev/RulePackage/getStart/class/index.html index 9685a85c..adfe6ded 100644 --- a/dev/RulePackage/getStart/class/index.html +++ b/dev/RulePackage/getStart/class/index.html @@ -1 +1 @@ - class 类 - Infini 核心文档

Info

用来创建用户定义对象的模板。类定义通常包含对该类的实例进行操作的方法定义。

\ No newline at end of file + class 类 - Infini 核心文档

Info

用来创建用户定义对象的模板。类定义通常包含对该类的实例进行操作的方法定义。

\ 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 9015dc9a..37a9ba88 100644 --- a/dev/RulePackage/getStart/getDeeper/Module/index.html +++ b/dev/RulePackage/getStart/getDeeper/Module/index.html @@ -1 +1 @@ - Module 模块 - Infini 核心文档

模块

Info

此对象是 Python 代码的一种组织单位。各模块具有独立的命名空间,可包含任意 Python 对象。模块可通过 importing 操作被加载到 Python 中。

另见 package

\ No newline at end of file + Module 模块 - Infini 核心文档

模块

Info

此对象是 Python 代码的一种组织单位。各模块具有独立的命名空间,可包含任意 Python 对象。模块可通过 importing 操作被加载到 Python 中。

另见 package

\ 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 cc8b1cbe..0004adce 100644 --- a/dev/RulePackage/getStart/getDeeper/Package/index.html +++ b/dev/RulePackage/getStart/getDeeper/Package/index.html @@ -1 +1 @@ - Package 包 - Infini 核心文档
\ No newline at end of file + Package 包 - Infini 核心文档
\ 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 8bd3ecb9..14edb2d4 100644 --- a/dev/RulePackage/getStart/getDeeper/object/index.html +++ b/dev/RulePackage/getStart/getDeeper/object/index.html @@ -1 +1 @@ - object 对象 - Infini 核心文档

对象

Info

任何具有状态(属性或值)以及预定义行为(方法)的数据。object 也是任何 new-style class 的最顶层基类名。

\ No newline at end of file + object 对象 - Infini 核心文档

对象

Info

任何具有状态(属性或值)以及预定义行为(方法)的数据。object 也是任何 new-style class 的最顶层基类名。

\ No newline at end of file diff --git a/dev/RulePackage/getStart/method/index.html b/dev/RulePackage/getStart/method/index.html index ed992269..89e71993 100644 --- a/dev/RulePackage/getStart/method/index.html +++ b/dev/RulePackage/getStart/method/index.html @@ -1 +1 @@ - method 方法 - Infini 核心文档

方法

Info

在类内部定义的函数。如果作为该类的实例的一个属性来调用,方法将会获取实例对象作为其第一个 argument (通常命名为 self)。参见 functionnested scope

\ No newline at end of file + method 方法 - Infini 核心文档

方法

Info

在类内部定义的函数。如果作为该类的实例的一个属性来调用,方法将会获取实例对象作为其第一个 argument (通常命名为 self)。参见 functionnested scope

\ No newline at end of file diff --git a/dev/RulePackage/intro/index.html b/dev/RulePackage/intro/index.html index df1a3269..b938a83b 100644 --- a/dev/RulePackage/intro/index.html +++ b/dev/RulePackage/intro/index.html @@ -1,3 +1,3 @@ 概述 - Infini 核心文档
跳转至

概述

Abstract

此章节涉及到真正的 Python 规范问题,因此请认真阅读并多加练习,方能写出漂亮的代码。

安装规则包

水系规则包可以通过 pip Pyhton 包管理工具直接下载,但是为了方便,我们推荐以下两个安装方案。

pdm install MyRule
 

如果你使用pdm管理自己的规则包或开启自己的水系骰子,那么非常推荐使用这种方案来集成形如 infini-Rule-The_Pool这般包名的规则。

hrc install MyRule
-

一般来说推荐使用hrc管理器来安装和调试规则包。 (1)

  1. 这样会无视虚拟环境规则而直接找到当前使用的文件路径,而不需要像pdm那样只能用在pdm本身创建的虚拟环境内了。

HRC管理器的原理是使用pip获取包后cp到当前所指定的目录(或者默认目录)。对于不熟悉命令行的用户来说,一个webui或许是更适合的方案。

编写规则包

要编写规则包,需要懂得Python相关的知识以及一些计算机常识。在接下来的好几个章节里你将会被一步一引导学习如何制作一个规则包。

\ No newline at end of file +

一般来说推荐使用hrc管理器来安装和调试规则包。 (1)

  1. 这样会无视虚拟环境规则而直接找到当前使用的文件路径,而不需要像pdm那样只能用在pdm本身创建的虚拟环境内了。

HRC管理器的原理是使用pip获取包后cp到当前所指定的目录(或者默认目录)。对于不熟悉命令行的用户来说,一个webui或许是更适合的方案。

编写规则包

要编写规则包,需要懂得Python相关的知识以及一些计算机常识。在接下来的好几个章节里你将会被一步一引导学习如何制作一个规则包。

\ No newline at end of file diff --git a/dev/RulePackage/skill/fstring/index.html b/dev/RulePackage/skill/fstring/index.html index 7a44a142..d4f6ac63 100644 --- a/dev/RulePackage/skill/fstring/index.html +++ b/dev/RulePackage/skill/fstring/index.html @@ -1 +1 @@ - 善用语法糖 - Infini 核心文档
\ No newline at end of file + 善用语法糖 - Infini 核心文档
\ No newline at end of file diff --git a/dev/RulePackage/skill/index.html b/dev/RulePackage/skill/index.html index 56251774..47da2509 100644 --- a/dev/RulePackage/skill/index.html +++ b/dev/RulePackage/skill/index.html @@ -1 +1 @@ - Index - Infini 核心文档

Index

\ No newline at end of file + Index - Infini 核心文档

Index

\ 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 ee96c336..0b5d5828 100644 --- a/dev/Standard/Term/DefaultDice/_counts/index.html +++ b/dev/Standard/Term/DefaultDice/_counts/index.html @@ -1 +1 @@ - _counts 骰子个数 - Infini 核心文档
跳转至

_counts 骰子个数

Tip

这是一个必须的值,根据不同规则书的要求设置相对应的值

属性说明

用于规定默认投掷时骰子的个数

\ No newline at end of file + _counts 骰子个数 - Infini 核心文档
跳转至

_counts 骰子个数

Tip

这是一个必须的值,根据不同规则书的要求设置相对应的值

属性说明

用于规定默认投掷时骰子的个数

\ 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 692d28a7..8b69cf62 100644 --- a/dev/Standard/Term/DefaultDice/_sides/index.html +++ b/dev/Standard/Term/DefaultDice/_sides/index.html @@ -1 +1 @@ - _sides 骰子面数 - Infini 核心文档
跳转至

_sides 骰子面数

属性说明

用于规定默认投掷时骰子的面数

\ No newline at end of file + _sides 骰子面数 - Infini 核心文档
跳转至

_sides 骰子面数

属性说明

用于规定默认投掷时骰子的面数

\ No newline at end of file diff --git a/dev/Standard/Term/DefaultDice/index.html b/dev/Standard/Term/DefaultDice/index.html index 1a546eca..a843f180 100644 --- a/dev/Standard/Term/DefaultDice/index.html +++ b/dev/Standard/Term/DefaultDice/index.html @@ -1 +1 @@ - DefaultDice 默认骰子 - Infini 核心文档
跳转至

DefaultDice 默认骰子

Tip

这是一个必须的类,根据不同规则书的要求设置相对应的值

类说明

用于规定默认投掷时骰子的各种属性,例如默认骰子数量,面数

\ No newline at end of file + DefaultDice 默认骰子 - Infini 核心文档
跳转至

DefaultDice 默认骰子

Tip

这是一个必须的类,根据不同规则书的要求设置相对应的值

类说明

用于规定默认投掷时骰子的各种属性,例如默认骰子数量,面数

\ No newline at end of file diff --git a/dev/Standard/Term/PlayerCard/index.html b/dev/Standard/Term/PlayerCard/index.html index 05eabfbc..7120aeb1 100644 --- a/dev/Standard/Term/PlayerCard/index.html +++ b/dev/Standard/Term/PlayerCard/index.html @@ -1 +1 @@ - PlayerCard 人物卡 - Infini 核心文档
跳转至

PlayerCard 人物卡

Tip

这是一个可选实现但是{建议尽量必须实现}的方法,主要表现在规则书正是检定方法不同而有所不同上。

类说明

用于规定人物卡的格式,包括人物属性,属性之间的计算关系等

\ No newline at end of file + PlayerCard 人物卡 - Infini 核心文档
跳转至

PlayerCard 人物卡

Tip

这是一个可选实现但是{建议尽量必须实现}的方法,主要表现在规则书正是检定方法不同而有所不同上。

类说明

用于规定人物卡的格式,包括人物属性,属性之间的计算关系等

\ 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 9d420d91..b6e14f6f 100644 --- a/dev/Standard/Term/check/ability/index.html +++ b/dev/Standard/Term/check/ability/index.html @@ -1 +1 @@ - ability 检定 - Infini 核心文档
\ No newline at end of file + ability 检定 - Infini 核心文档
\ No newline at end of file diff --git a/dev/Standard/Term/check/index.html b/dev/Standard/Term/check/index.html index 73825dd2..5be2d3e9 100644 --- a/dev/Standard/Term/check/index.html +++ b/dev/Standard/Term/check/index.html @@ -1 +1 @@ - check 检定 - Infini 核心文档
跳转至

check 检定

Tip

这是一个可选实现但是{建议尽量必须实现}的方法,主要表现在规则书正是检定方法不同而有所不同上。

方法说明

使用check或者ability方法, 必须对检定结果设定一个完整的输出判定范围。

检定结果表

方法所言,你必须为检定的结果设计一个完整的输出判定范围,因此你需要严格并且合理的分配划分界限,保证所有情况都在允许范围内有一个类似”成功””失败”的输出。

\ No newline at end of file + check 检定 - Infini 核心文档
跳转至

check 检定

Tip

这是一个可选实现但是{建议尽量必须实现}的方法,主要表现在规则书正是检定方法不同而有所不同上。

方法说明

使用check或者ability方法, 必须对检定结果设定一个完整的输出判定范围。

检定结果表

方法所言,你必须为检定的结果设计一个完整的输出判定范围,因此你需要严格并且合理的分配划分界限,保证所有情况都在允许范围内有一个类似”成功””失败”的输出。

\ 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 99a19fdd..5a0d3457 100644 --- a/dev/Standard/Term/duration/campaign/index.html +++ b/dev/Standard/Term/duration/campaign/index.html @@ -1 +1 @@ - campaign 战役 - Infini 核心文档

campaign 战役

\ No newline at end of file + campaign 战役 - Infini 核心文档

campaign 战役

\ No newline at end of file diff --git a/dev/Standard/Term/duration/index.html b/dev/Standard/Term/duration/index.html index 2caf5b6d..5d265214 100644 --- a/dev/Standard/Term/duration/index.html +++ b/dev/Standard/Term/duration/index.html @@ -1 +1 @@ - duration (时长) - Infini 核心文档
跳转至
\ No newline at end of file + duration (时长) - Infini 核心文档
跳转至
\ 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 84f512df..dabb2fe6 100644 --- a/dev/Standard/Term/duration/module/index.html +++ b/dev/Standard/Term/duration/module/index.html @@ -1 +1 @@ - module 模组 - Infini 核心文档

module 模组

\ No newline at end of file + module 模组 - Infini 核心文档

module 模组

\ 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 f7b6838b..3532a9c6 100644 --- a/dev/Standard/Term/duration/sene/index.html +++ b/dev/Standard/Term/duration/sene/index.html @@ -1 +1 @@ - sene 场 - Infini 核心文档

sene 场

\ No newline at end of file + sene 场 - Infini 核心文档

sene 场

\ No newline at end of file diff --git a/dev/Standard/Term/scenario/index.html b/dev/Standard/Term/scenario/index.html index 78638071..bf7d5831 100644 --- a/dev/Standard/Term/scenario/index.html +++ b/dev/Standard/Term/scenario/index.html @@ -1 +1 @@ - scenario 剧本 - Infini 核心文档

scenario 剧本

\ No newline at end of file + scenario 剧本 - Infini 核心文档

scenario 剧本

\ No newline at end of file diff --git a/dev/Standard/Term/setting/index.html b/dev/Standard/Term/setting/index.html index 769185e3..401c51ca 100644 --- a/dev/Standard/Term/setting/index.html +++ b/dev/Standard/Term/setting/index.html @@ -1 +1 @@ - setting 背景 - Infini 核心文档

setting 背景

\ No newline at end of file + setting 背景 - Infini 核心文档

setting 背景

\ 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 fb6fb4de..6264d82c 100644 --- a/dev/Standard/what-is-rule-package/index.html +++ b/dev/Standard/what-is-rule-package/index.html @@ -45,4 +45,4 @@ return self.rule.ability.success # 返回大成功时骰主自定义的大成功文本 else: ... # 其他的检定情况 -

这样就实现了一个水系规则包,当pl使用检定掷骰指令时就会调用check()方法,如果检定结果数值小于5且大于0那么返回大成功。

我们要做的通用规则包标准就是这样一个“到底需要在Rule的子类MyRule里必须实现哪些方法?”的问题。

\ No newline at end of file +

这样就实现了一个水系规则包,当pl使用检定掷骰指令时就会调用check()方法,如果检定结果数值小于5且大于0那么返回大成功。

我们要做的通用规则包标准就是这样一个“到底需要在Rule的子类MyRule里必须实现哪些方法?”的问题。

\ 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 3f5c2a31..3697c152 100644 --- a/dev/Standard/what-is-standard/index.html +++ b/dev/Standard/what-is-standard/index.html @@ -1 +1 @@ - 什么是通用规则包标准? - Infini 核心文档

什么是通用规则包标准?

\ No newline at end of file + 什么是通用规则包标准? - Infini 核心文档

什么是通用规则包标准?

\ 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 71141818..94541e45 100644 --- a/dev/Standard/why-rule-package/index.html +++ b/dev/Standard/why-rule-package/index.html @@ -1 +1 @@ - 为什么要做规则包? - Infini 核心文档

为什么要做规则包?

\ No newline at end of file + 为什么要做规则包? - Infini 核心文档

为什么要做规则包?

\ No newline at end of file diff --git "a/dev/blog/2023/10/07/rule-\345\237\272\347\261\273\345\267\262\347\273\217\346\224\257\346\214\201\346\263\233\345\236\213\344\272\206/index.html" "b/dev/blog/2023/10/07/rule-\345\237\272\347\261\273\345\267\262\347\273\217\346\224\257\346\214\201\346\263\233\345\236\213\344\272\206/index.html" index c390fdfd..74143343 100644 --- "a/dev/blog/2023/10/07/rule-\345\237\272\347\261\273\345\267\262\347\273\217\346\224\257\346\214\201\346\263\233\345\236\213\344\272\206/index.html" +++ "b/dev/blog/2023/10/07/rule-\345\237\272\347\261\273\345\267\262\347\273\217\346\224\257\346\214\201\346\263\233\345\236\213\344\272\206/index.html" @@ -103,4 +103,4 @@ arcu tincidunt pulvinar. Vestibulum laoreet risus scelerisque porta congue. In velit purus, dictum quis neque nec, molestie viverra risus. Nam pellentesque tellus id elit ultricies, vel finibus erat cursus. -
  1. If you mark a post as a draft, a red marker appears next to the post date on index pages. When the site is built, drafts are not included in the output. This behavior can be changed, e.g. for rendering drafts when building deploy previews.

When you spin up the live preview server, you should be greeted by your first post! You'll also realize, that archive and category indexes have been automatically generated for you:

Blog

However, this is just the start. The built-in blog plugin packs a lot of functionality needed in day-to-day blogging. Visit the documentation of the plugin to learn about the following topics:

Additionally, the built-in blog plugin has dozens of configuration options which allow for fine-tuning the output. You can configure post slugs, general behavior and much more.

What's next?

Getting basic blogging support out the door was quite a challenge – the built-in blog plugin 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.

Some ideas already proposed by users:

What's still missing from the brand new built-in blog plugin? Feel free to share your ideas in the comments. Together, we can build one of the best modern engines for technical blogging!

\ No newline at end of file +
  1. If you mark a post as a draft, a red marker appears next to the post date on index pages. When the site is built, drafts are not included in the output. This behavior can be changed, e.g. for rendering drafts when building deploy previews.

When you spin up the live preview server, you should be greeted by your first post! You'll also realize, that archive and category indexes have been automatically generated for you:

Blog

However, this is just the start. The built-in blog plugin packs a lot of functionality needed in day-to-day blogging. Visit the documentation of the plugin to learn about the following topics:

Additionally, the built-in blog plugin has dozens of configuration options which allow for fine-tuning the output. You can configure post slugs, general behavior and much more.

What's next?

Getting basic blogging support out the door was quite a challenge – the built-in blog plugin 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.

Some ideas already proposed by users:

What's still missing from the brand new built-in blog plugin? Feel free to share your ideas in the comments. Together, we can build one of the best modern engines for technical blogging!

\ No newline at end of file diff --git a/dev/changelog/index.html b/dev/changelog/index.html index ee95506c..9cbefe75 100644 --- a/dev/changelog/index.html +++ b/dev/changelog/index.html @@ -1 +1 @@ - 变更日志 - Infini 核心文档
跳转至

变更日志

1.0.5 December 18,2023

BREAKING CHANGES

  • Handler: 使用 Handler 代替 Rule (573a6)。

FEATURES

  • Handler: 实现泛型,实现 self.stop() self.skip() 方法 (573a6)。

BUG FIX

  • templates: 根据最新的 Handler 更新模板中的子类写法 (477c9)。
  • Event: 修订消息事件生成模式 (dd278),修复path不存在的问题 (5d4c7)。

CHORE

  • Exceptions: 重定义三个异常基类 (68ab4a)。

1.0.4 October 7,2023

FEATURES

  • Docs: 美化 style
  • Deps: 添加 reportlab 依赖,用于以后的 pdf 生成。

1.0.3 October 7,2023

NO CHARGES

1.0.2 October 7,2023

FEATURES

  • Docs: 优化 css 细节。

1.0.1 October 7,2023

BUG FIX

  • Docs: 修复 Devlatest 分支的错别字。

0.1.2 October 7,2023

同步版本所做的测试。

0.1.1 October 7,2023

BUG FIX

  • CLI: 添加命令行参数解析。

0.1.0-rc1 (2023-10-07)

CHORE

  • README: 更新主页介绍的安装指南。

0.1.0October 7,2023

Features

  • CLI: 添加两个命令行名称 infiniHRC

0.0.1 July 4,2023

Features

  • init: 添加命令行参数解析。
  • Rule: 添加 Rule 基类,实现读取指定文件夹下的 python 脚本或 python 包

BREAKING CHANGE

  • infini: 添加命令行Path。
\ No newline at end of file + 变更日志 - Infini 核心文档
跳转至

变更日志

1.0.5 December 18,2023

BREAKING CHANGES

  • Handler: 使用 Handler 代替 Rule (573a6)。

FEATURES

  • Handler: 实现泛型,实现 self.stop() self.skip() 方法 (573a6)。

BUG FIX

  • templates: 根据最新的 Handler 更新模板中的子类写法 (477c9)。
  • Event: 修订消息事件生成模式 (dd278),修复path不存在的问题 (5d4c7)。

CHORE

  • Exceptions: 重定义三个异常基类 (68ab4a)。

1.0.4 October 7,2023

FEATURES

  • Docs: 美化 style
  • Deps: 添加 reportlab 依赖,用于以后的 pdf 生成。

1.0.3 October 7,2023

NO CHARGES

1.0.2 October 7,2023

FEATURES

  • Docs: 优化 css 细节。

1.0.1 October 7,2023

BUG FIX

  • Docs: 修复 Devlatest 分支的错别字。

0.1.2 October 7,2023

同步版本所做的测试。

0.1.1 October 7,2023

BUG FIX

  • CLI: 添加命令行参数解析。

0.1.0-rc1 October 7,2023

CHORE

  • README: 更新主页介绍的安装指南。

0.1.0October 7,2023

Features

  • CLI: 添加两个命令行名称 infiniHRC

0.0.1 July 4,2023

Features

  • init: 添加命令行参数解析。
  • Rule: 添加 Rule 基类,实现读取指定文件夹下的 python 脚本或 python 包

BREAKING CHANGE

  • infini: 添加命令行Path。
\ No newline at end of file diff --git a/dev/search/search_index.json b/dev/search/search_index.json index a82cd827..68153b09 100644 --- a/dev/search/search_index.json +++ b/dev/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\u200b\\-_,:!=\\[\\]()\"`/]+|\\.(?!\\d)|&[lg]t;|(?!\\b)(?=[A-Z][a-z])","pipeline":["stemmer"]},"docs":[{"location":"","title":"\u6c34\u7cfb\u6838\u5fc3","text":"

\u4f60\u597d!\u4e16\u754c\u4e3b\u3002

"},{"location":"changelog/","title":"\u53d8\u66f4\u65e5\u5fd7","text":""},{"location":"changelog/#1.0.5","title":"1.0.5 December 18,2023","text":"

BREAKING CHANGES

FEATURES

BUG FIX

CHORE

"},{"location":"changelog/#1.0.4","title":"1.0.4 October 7,2023","text":"

FEATURES

"},{"location":"changelog/#1.0.3","title":"1.0.3 October 7,2023","text":"

NO CHARGES

"},{"location":"changelog/#1.0.2","title":"1.0.2 October 7,2023","text":"

FEATURES

"},{"location":"changelog/#1.0.1","title":"1.0.1 October 7,2023","text":"

BUG FIX

"},{"location":"changelog/#0.1.2","title":"0.1.2 October 7,2023","text":"

\u540c\u6b65\u7248\u672c\u6240\u505a\u7684\u6d4b\u8bd5\u3002

"},{"location":"changelog/#0.1.1","title":"0.1.1 October 7,2023","text":"

BUG FIX

"},{"location":"changelog/#010-rc1-2023-10-07","title":"0.1.0-rc1 (2023-10-07)","text":""},{"location":"changelog/#chore","title":"CHORE","text":""},{"location":"changelog/#0.1.0","title":"0.1.0October 7,2023","text":"

Features

"},{"location":"changelog/#0.0.1","title":"0.0.1 July 4,2023","text":"

Features

BREAKING CHANGE

"},{"location":"CLI/","title":"CLI Reference","text":"

```python exec=\"1\" idprefix=\"\" import argparse import re from infini import Cli

parser = Cli().parser

MONOSPACED = (\"pyproject.toml\", \"pdm.lock\", \".pdm-python\", \":pre\", \":post\", \":all\")

def clean_help(help: str) -> str: # Make dunders monospaced avoiding italic markdown rendering help = re.sub(r\"([\\w\\d_]+)\", r\"__\\1__\", help) # Make env vars monospaced help = re.sub(r\"env var: ([A-Z_]+)\", r\"env var: \\1\", help) for monospaced in MONOSPACED: help = re.sub(rf\"\\s(['\\\"]?{monospaced}['\\\"]?)\", f\"{monospaced}\", help) return help

def render_parser( parser: argparse.ArgumentParser, title: str, heading_level: int = 2 ) -> str: \"\"\"Render the parser help documents as a string.\"\"\" result = [f\"{'#' * heading_level} {title}\\n\"] if parser.description and title != \"infini\": result.append(\"> \" + parser.description + \"\\n\")

for group in sorted(\n    parser._action_groups, key=lambda g: g.title.lower(), reverse=True\n):\n    if not any(\n        bool(action.option_strings or action.dest)\n        or isinstance(action, argparse._SubParsersAction)\n        for action in group._group_actions\n    ):\n        continue\n\n    result.append(f\"{group.title.title()}:\\n\")\n    for action in group._group_actions:\n        if isinstance(action, argparse._SubParsersAction):\n            for name, subparser in action._name_parser_map.items():\n                result.append(render_parser(subparser, name, heading_level + 1))\n            continue\n\n        opts = [f\"`{opt}`\" for opt in action.option_strings]\n        if not opts:\n            line = f\"- `{action.dest}`\"\n        else:\n            line = f\"- {', '.join(opts)}\"\n        if action.metavar:\n            line += f\" `{action.metavar}`\"\n        line += f\": {clean_help(action.help)}\"\n        if action.default and action.default != argparse.SUPPRESS:\n            line += f\" (default: `{action.default}`)\"\n        result.append(line)\n    result.append(\"\")\n\nreturn \"\\n\".join(result)\n

print(render_parser(parser, \"infini\")) ```

"},{"location":"Core/","title":"\u6838\u5fc3\u6982\u89c8","text":"infini'\u6c34\u7cfb\u6838\u5fc3"},{"location":"Core/#getting","title":"\ud83c\udf81 Getting","text":"
  1. \u5b89\u88c5\u5e93

\u5728\u547d\u4ee4\u884c\u8f93\u5165\u3002

git clone https://github.com/HydroRoll-Team/infini.git\ncd infini\npdm install\n# \u6216\u8005\u4f7f\u7528pip\n# pip install infini\n
  1. \u521b\u5efa\u89c4\u5219\u5305\u5b9e\u4f8b
mkdir myrules && cd myrules && mkdir rule1\necho.> config.toml\necho.> __init__.py\n

\u5728 __init__.py \u521b\u5efa\u4e00\u4e2a rule \u5b9e\u4f8b\u5e76\u7ee7\u627f Rule \u57fa\u7c7b, \u901a\u8fc7\u7f16\u5199\u5408\u9002\u7684\u76f8\u5173\u65b9\u6cd5\u4e0e\u7c7b\u6ce8\u518c\u89c4\u5219\u5305\u5b9e\u73b0\u89c4\u5219\u7684\u81ea\u5b9a\u4e49\u3002

from infini import Rule\n\nclass Myrule(Rule):\n  \"\"\"\u81ea\u8bbe\u89c4\u5219\u5305\uff0c\u7ee7\u627f Rule \u57fa\u7c7b\"\"\"\n
  1. \u5408\u7406\u4fee\u6539\u4f60\u7684 config.toml \u914d\u7f6e\u6587\u4ef6\uff0c\u5b8c\u6210\u6ce8\u518c!
"},{"location":"Core/#license","title":"\ud83d\udcc4 License","text":"

MIT \u00a9 2023-PRESENT \u7b80\u5f8b\u7eaf

"},{"location":"Help/TermList/","title":"\u672f\u8bed\u8868\u4e00\u89c8","text":""},{"location":"Help/TermList/#_1","title":"\u79fb\u6b65\u6b63\u5f0f\u672f\u8bed","text":""},{"location":"Help/emoji/","title":"\u56fe\u6807\u3001\u6ce8\u91ca\u8bf4\u660e","text":""},{"location":"Help/emoji/#_1","title":"\u76ee\u5f55\u6811\u3001\u4fa7\u8fb9\u680f\u56fe\u6807","text":"

\u8fd9\u4e9b\u56fe\u6807\u5c06\u4f1a\u51fa\u73b0\u5728\u9875\u9762\u5de6\u4fa7\u7684 navigation \u4e0e\u6587\u7ae0\u53f3\u4fa7\u7684 toc \u5f53\u4e2d\u3002

\u5df2\u88ab\u5e9f\u5f03\u6700\u8fd1\u6dfb\u52a0\u5b9e\u9a8c\u529f\u80fd\u6269\u5c55\u7279\u6027

\u5728 release \u7248\u672c\u4e2d \u4e0d\u63a8\u8350\u4f7f\u7528 \u4f46\u662f \u4ecd\u7136\u6709\u6548 \u7684\u529f\u80fd\u3001\u7279\u6027\u3002\u5e76\u4e14\u5728 latest \u7248\u672c\u4e2d\u5df2\u7ecf\u5b8c\u5168\u5e9f\u5f031\u3002

\u5728\u4e0a\u4e00\u4e2a release \u7248\u672c\u4f5c\u4e3a\u5b9e\u9a8c\u529f\u80fd\u6216\u4f5c\u4e3a\u6269\u5c55\u7279\u6027\u4f46\u662f\u6838\u5fc3\u672c\u4f53\u5e76\u672a\u652f\u6301\u7684\u529f\u80fd\u3001\u7279\u6027\uff0c\u4e8e latest \u7248\u672c\u88ab\u5f15\u5165\u3002

\u5b58\u5728\u4e8e\u5f53\u524d dev \u7248\u672c\u4e2d\u4f46\u662f\u672a\u5728 latest \u7248\u672c\u4e2d\u52a0\u5165\u7684\u529f\u80fd\u3001\u7279\u6027\u3002

\u5728\u652f\u6301 latest \u6216 dev \u6216 \u7279\u5b9a release \u7248\u672c\u7684\u63d2\u4ef6\u6269\u5c55\u4e2d\u5b58\u5728\u6b64\u7279\u6027\u7684\u53ef\u884c\u6027\u65b9\u6848\u3002

"},{"location":"Help/emoji/#_2","title":"\u62bd\u8c61\u6982\u5ff5","text":"

\u8fd9\u4e9b\u56fe\u6807\u4f1a\u51fa\u73b0\u5728\u6587\u7ae0\u5185\u5bb9\u4e2d\u4f5c\u4e3a\u62bd\u8c61\u6982\u5ff5\u7684\u5177\u4f53\u8868\u8fbe\uff0c\u7528\u4e8e\u8fc1\u79fb\u8bb0\u5fc6\u3002

\u4ee5\u4e0b\u662f\u56fe\u6807\u5e94\u7528\u4e3e\u4f8b:

"},{"location":"Help/emoji/#_3","title":"\u6ce8\u91ca\u8bf4\u660e","text":"
  1. \u5177\u4f53\u8fd8\u8981\u770b\u4e0b\u4e00\u4e2a\u5927\u7248\u672c\u7684\u6587\u6863\u5982\u4f55\u7f16\u5199\u3002\u00a0\u21a9

"},{"location":"RulePackage/intro/","title":"\u6982\u8ff0","text":"

Abstract

\u6b64\u7ae0\u8282\u6d89\u53ca\u5230\u771f\u6b63\u7684 Python \u89c4\u8303\u95ee\u9898\uff0c\u56e0\u6b64\u8bf7\u8ba4\u771f\u9605\u8bfb\u5e76\u591a\u52a0\u7ec3\u4e60\uff0c\u65b9\u80fd\u5199\u51fa\u6f02\u4eae\u7684\u4ee3\u7801\u3002

"},{"location":"RulePackage/intro/#_1","title":"\u5b89\u88c5\u89c4\u5219\u5305","text":"

\u6c34\u7cfb\u89c4\u5219\u5305\u53ef\u4ee5\u901a\u8fc7 pip Pyhton \u5305\u7ba1\u7406\u5de5\u5177\u76f4\u63a5\u4e0b\u8f7d\uff0c\u4f46\u662f\u4e3a\u4e86\u65b9\u4fbf\uff0c\u6211\u4eec\u63a8\u8350\u4ee5\u4e0b\u4e24\u4e2a\u5b89\u88c5\u65b9\u6848\u3002

\u4f7f\u7528pdm\u7ba1\u7406\u5668\u4f7f\u7528hrc\u7ba1\u7406\u5668
pdm install MyRule\n

\u5982\u679c\u4f60\u4f7f\u7528pdm\u7ba1\u7406\u81ea\u5df1\u7684\u89c4\u5219\u5305\u6216\u5f00\u542f\u81ea\u5df1\u7684\u6c34\u7cfb\u9ab0\u5b50\uff0c\u90a3\u4e48\u975e\u5e38\u63a8\u8350\u4f7f\u7528\u8fd9\u79cd\u65b9\u6848\u6765\u96c6\u6210\u5f62\u5982 infini-Rule-The_Pool\u8fd9\u822c\u5305\u540d\u7684\u89c4\u5219\u3002

hrc install MyRule\n

\u4e00\u822c\u6765\u8bf4\u63a8\u8350\u4f7f\u7528hrc\u7ba1\u7406\u5668\u6765\u5b89\u88c5\u548c\u8c03\u8bd5\u89c4\u5219\u5305\u3002 (1)

  1. \u8fd9\u6837\u4f1a\u65e0\u89c6\u865a\u62df\u73af\u5883\u89c4\u5219\u800c\u76f4\u63a5\u627e\u5230\u5f53\u524d\u4f7f\u7528\u7684\u6587\u4ef6\u8def\u5f84\uff0c\u800c\u4e0d\u9700\u8981\u50cfpdm\u90a3\u6837\u53ea\u80fd\u7528\u5728pdm\u672c\u8eab\u521b\u5efa\u7684\u865a\u62df\u73af\u5883\u5185\u4e86\u3002

HRC\u7ba1\u7406\u5668\u7684\u539f\u7406\u662f\u4f7f\u7528pip\u83b7\u53d6\u5305\u540ecp\u5230\u5f53\u524d\u6240\u6307\u5b9a\u7684\u76ee\u5f55(\u6216\u8005\u9ed8\u8ba4\u76ee\u5f55)\u3002\u5bf9\u4e8e\u4e0d\u719f\u6089\u547d\u4ee4\u884c\u7684\u7528\u6237\u6765\u8bf4\uff0c\u4e00\u4e2awebui\u6216\u8bb8\u662f\u66f4\u9002\u5408\u7684\u65b9\u6848\u3002

"},{"location":"RulePackage/intro/#_2","title":"\u7f16\u5199\u89c4\u5219\u5305","text":"

\u8981\u7f16\u5199\u89c4\u5219\u5305\uff0c\u9700\u8981\u61c2\u5f97Python\u76f8\u5173\u7684\u77e5\u8bc6\u4ee5\u53ca\u4e00\u4e9b\u8ba1\u7b97\u673a\u5e38\u8bc6\u3002\u5728\u63a5\u4e0b\u6765\u7684\u597d\u51e0\u4e2a\u7ae0\u8282\u91cc\u4f60\u5c06\u4f1a\u88ab\u4e00\u6b65\u4e00\u5f15\u5bfc\u5b66\u4e60\u5982\u4f55\u5236\u4f5c\u4e00\u4e2a\u89c4\u5219\u5305\u3002

"},{"location":"RulePackage/getStart/attribute/","title":"attribute \u5c5e\u6027","text":"

Info

\u5173\u8054\u5230\u4e00\u4e2a\u5bf9\u8c61\u7684\u503c\uff0c\u901a\u5e38\u4f7f\u7528\u70b9\u53f7\u8868\u8fbe\u5f0f\u6309\u540d\u79f0\u6765\u5f15\u7528\u3002 \u4e3e\u4f8b\u6765\u8bf4\uff0c\u5982\u679c\u5bf9\u8c61 o \u5177\u6709\u5c5e\u6027 a \u5219\u53ef\u4ee5\u7528 o.a \u6765\u5f15\u7528\u5b83\u3002

\u5982\u679c\u5bf9\u8c61\u5141\u8bb8\uff0c\u5c06\u672a\u88ab\u5b9a\u4e49\u4e3a \u6807\u8bc6\u7b26\u548c\u5173\u952e\u5b57 \u7684\u975e\u6807\u8bc6\u540d\u79f0\u7528\u4f5c\u4e00\u4e2a\u5bf9\u8c61\u7684\u5c5e\u6027\u4e5f\u662f\u53ef\u4ee5\u7684\uff0c\u4f8b\u5982\u4f7f\u7528 setattr()\u3002 \u8fd9\u6837\u7684\u5c5e\u6027\u5c06\u65e0\u6cd5\u4f7f\u7528\u70b9\u53f7\u8868\u8fbe\u5f0f\u6765\u8bbf\u95ee\uff0c\u800c\u662f\u5fc5\u987b\u901a\u8fc7 getattr() \u6765\u83b7\u53d6\u3002

"},{"location":"RulePackage/getStart/class/","title":"class \u7c7b","text":"

Info

\u7528\u6765\u521b\u5efa\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61\u7684\u6a21\u677f\u3002\u7c7b\u5b9a\u4e49\u901a\u5e38\u5305\u542b\u5bf9\u8be5\u7c7b\u7684\u5b9e\u4f8b\u8fdb\u884c\u64cd\u4f5c\u7684\u65b9\u6cd5\u5b9a\u4e49\u3002

"},{"location":"RulePackage/getStart/method/","title":"method \u65b9\u6cd5","text":"

Info

\u5728\u7c7b\u5185\u90e8\u5b9a\u4e49\u7684\u51fd\u6570\u3002\u5982\u679c\u4f5c\u4e3a\u8be5\u7c7b\u7684\u5b9e\u4f8b\u7684\u4e00\u4e2a\u5c5e\u6027\u6765\u8c03\u7528\uff0c\u65b9\u6cd5\u5c06\u4f1a\u83b7\u53d6\u5b9e\u4f8b\u5bf9\u8c61\u4f5c\u4e3a\u5176\u7b2c\u4e00\u4e2a argument (\u901a\u5e38\u547d\u540d\u4e3a self)\u3002\u53c2\u89c1 function \u548c nested scope\u3002

"},{"location":"RulePackage/getStart/getDeeper/Module/","title":"Module \u6a21\u5757","text":"

Info

\u6b64\u5bf9\u8c61\u662f Python \u4ee3\u7801\u7684\u4e00\u79cd\u7ec4\u7ec7\u5355\u4f4d\u3002\u5404\u6a21\u5757\u5177\u6709\u72ec\u7acb\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u53ef\u5305\u542b\u4efb\u610f Python \u5bf9\u8c61\u3002\u6a21\u5757\u53ef\u901a\u8fc7 importing \u64cd\u4f5c\u88ab\u52a0\u8f7d\u5230 Python \u4e2d\u3002

\u53e6\u89c1 package\u3002

"},{"location":"RulePackage/getStart/getDeeper/Package/","title":"Package \u5305","text":"

Info

\u4e00\u79cd\u53ef\u5305\u542b\u5b50\u6a21\u5757\u6216\u9012\u5f52\u5730\u5305\u542b\u5b50\u5305\u7684 Python module\u3002 \u4ece\u6280\u672f\u4e0a\u8bf4\uff0c\u5305\u662f\u5177\u6709 path \u5c5e\u6027\u7684 Python \u6a21\u5757\u3002

\u53e6\u53c2\u89c1 regular package \u548c namespace package\u3002

"},{"location":"RulePackage/getStart/getDeeper/object/","title":"object \u5bf9\u8c61","text":"

Info

\u4efb\u4f55\u5177\u6709\u72b6\u6001\uff08\u5c5e\u6027\u6216\u503c\uff09\u4ee5\u53ca\u9884\u5b9a\u4e49\u884c\u4e3a\uff08\u65b9\u6cd5\uff09\u7684\u6570\u636e\u3002object \u4e5f\u662f\u4efb\u4f55 new-style class \u7684\u6700\u9876\u5c42\u57fa\u7c7b\u540d\u3002

"},{"location":"Standard/what-is-rule-package/","title":"\u4ec0\u4e48\u662f\u89c4\u5219\u5305\uff1f","text":"

\u89c4\u5219\u5305\u662f\u6c34\u7cfb\u6838\u5fc3\u7528\u6765\u52a0\u8f7d\u7684\u5bf9\u8c61\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u6c34\u7cfb\u6838\u5fc3\u52a0\u8f7d\u7684\u4e00\u4e2a\u4e00\u4e2a\u89c4\u5219\u5b9e\u4f8b\u3002

\u89c4\u5219\u5305\u66f4\u7c7b\u4f3c\u4e8e\u63d2\u4ef6\u7684\u8bbe\u8ba1\uff0c\u6240\u4ee5\u89c4\u5219\u5305\u4e5f\u53ef\u4ee5\u662f\u4e00\u4e2aPython\u6587\u4ef6\u6216\u8005\u4e00\u4e2aPython\u5305\uff0c\u4f46\u5b83\u5fc5\u987b\u50cf\u63d2\u4ef6\u90a3\u6837\u7ee7\u627f\u4e00\u4e2a\u50cfPlugin\u8fd9\u6837\u7684\u7c7b\uff08\u4e0d\u7136\u65e0\u6cd5\u8bfb\u53d6\uff0c\u6211\u4eec\u59d1\u4e14\u53eb\u8fd9\u4e2a\u7c7b\u4e3aRule\uff09\uff0c\u4ee5\u53ca\u5728Rule\u7684\u5b50\u7c7b\u91cc\u5b9e\u73b0\u4e00\u4e9b\u50cfhandle()\u6216\u8005rule()\u8fd9\u6837\u5fc5\u987b\u5b9e\u73b0\u7684\u65b9\u6cd5\uff08\u4e5f\u53eb\u51fd\u6570\uff09\uff0c\u800c\u8fd9\u4e9b\u5fc5\u987b\u5b9e\u73b0\u7684\u65b9\u6cd5\uff0c\u5c31\u662f\u6211\u4eec\u8981\u8ba8\u8bba\u7684\uff0c\u4e00\u4e2a\u901a\u7528\u89c4\u5219\u5305\u6807\u51c6\u5c31\u662f\u660e\u786e\u4e86\u4e00\u4e2a\u7ee7\u627f\u81eaRule\u7c7b\u7684\u5b50\u7c7b\u5b83\u672c\u8eab\u5e94\u8be5\u5b9e\u73b0\u4ec0\u4e48\u65b9\u6cd5\u3002

\u4e3e\u4e2a\u4f8b\u5b50\uff08\u968f\u4fbf\u5199\u7684\uff0c\u5176\u4e2d\u4e00\u4e9b\u5fc5\u987b\u5b9e\u73b0\u7684\u5c5e\u6027\u6216\u8005\u7c7b\u540d\u90fd\u662f\u4e0d\u786e\u5b9a\u7684\uff0c\u4ee5\u540e\u6216\u8bb8\u4f1a\u6539\uff09\uff1a

from HydroRolicore import RuLe\n\nclass MyRule(Rule):\n    \"\"\"\u6211\u7684\u81ea\u5b9a\u4e49\u89c4\u5219\u5305\n\n    check \u51fd\u6570\u662f\u5fc5\u987b\u5b9e\u73b0\u7684\u65b9\u6cd5\u4e4b\u4e00\n    name\u5c5e\u6027\u662f\u5fc5\u987b\u5b9e\u73b0\u7684\u5c5e\u6027\u4e4b\u4e00\uff0c\u7528\u6765\u5b9a\u4e49\u8fd9\u4e2a\u89c4\u5219\u5305\u7684\u540d\u5b57\n    priority\u662f\u53ef\u9009\u5b9e\u73b0\u7684\u5c5e\u6027\u4e4b\u4e00\uff0c\u9ed8\u8ba40\n    \"\"\"\n\n    name = \"\u6211\u7684\u81ea\u5b9a\u4e49\u89c4\u5219\u5305\"\n    priority = 0 # \u4f18\u5148\u7ea7\n\n    def check(self):\n        \"\"\"\u68c0\u5b9a\u65b9\u6cd5\n\n        self.result \u662f\u9700\u8981\u68c0\u5b9a\u65f6\u8ba1\u7b97\u7684\u7ed3\u679c\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\n        self.rule.ability \u662fRule\u7c7b\u91cc\u63d0\u4f9b\u7684\u7528\u4e8e\u5224\u65ad\u68c0\u5b9a\u60c5\u51b5\u7684\u5c5e\u6027\n        \"\"\"\n\n        if self.result < 5 and self.result > 0:\n            return self.rule.ability.success # \u8fd4\u56de\u5927\u6210\u529f\u65f6\u9ab0\u4e3b\u81ea\u5b9a\u4e49\u7684\u5927\u6210\u529f\u6587\u672c\n        else:\n            ... # \u5176\u4ed6\u7684\u68c0\u5b9a\u60c5\u51b5\n

\u8fd9\u6837\u5c31\u5b9e\u73b0\u4e86\u4e00\u4e2a\u6c34\u7cfb\u89c4\u5219\u5305\uff0c\u5f53pl\u4f7f\u7528\u68c0\u5b9a\u63b7\u9ab0\u6307\u4ee4\u65f6\u5c31\u4f1a\u8c03\u7528check()\u65b9\u6cd5\uff0c\u5982\u679c\u68c0\u5b9a\u7ed3\u679c\u6570\u503c\u5c0f\u4e8e5\u4e14\u5927\u4e8e0\u90a3\u4e48\u8fd4\u56de\u5927\u6210\u529f\u3002

\u6211\u4eec\u8981\u505a\u7684\u901a\u7528\u89c4\u5219\u5305\u6807\u51c6\u5c31\u662f\u8fd9\u6837\u4e00\u4e2a\u201c\u5230\u5e95\u9700\u8981\u5728Rule\u7684\u5b50\u7c7bMyRule\u91cc\u5fc5\u987b\u5b9e\u73b0\u54ea\u4e9b\u65b9\u6cd5\uff1f\u201d\u7684\u95ee\u9898\u3002

"},{"location":"Standard/Term/DefaultDice/","title":"DefaultDice \u9ed8\u8ba4\u9ab0\u5b50","text":"

Tip

\u8fd9\u662f\u4e00\u4e2a\u5fc5\u987b\u7684\u7c7b\uff0c\u6839\u636e\u4e0d\u540c\u89c4\u5219\u4e66\u7684\u8981\u6c42\u8bbe\u7f6e\u76f8\u5bf9\u5e94\u7684\u503c

"},{"location":"Standard/Term/DefaultDice/#_1","title":"\u7c7b\u8bf4\u660e","text":"

\u7528\u4e8e\u89c4\u5b9a\u9ed8\u8ba4\u6295\u63b7\u65f6\u9ab0\u5b50\u7684\u5404\u79cd\u5c5e\u6027\uff0c\u4f8b\u5982\u9ed8\u8ba4\u9ab0\u5b50\u6570\u91cf\uff0c\u9762\u6570

"},{"location":"Standard/Term/DefaultDice/_counts/","title":"_counts \u9ab0\u5b50\u4e2a\u6570","text":"

Tip

\u8fd9\u662f\u4e00\u4e2a\u5fc5\u987b\u7684\u503c\uff0c\u6839\u636e\u4e0d\u540c\u89c4\u5219\u4e66\u7684\u8981\u6c42\u8bbe\u7f6e\u76f8\u5bf9\u5e94\u7684\u503c

"},{"location":"Standard/Term/DefaultDice/_counts/#_1","title":"\u5c5e\u6027\u8bf4\u660e","text":"

\u7528\u4e8e\u89c4\u5b9a\u9ed8\u8ba4\u6295\u63b7\u65f6\u9ab0\u5b50\u7684\u4e2a\u6570

"},{"location":"Standard/Term/DefaultDice/_sides/","title":"_sides \u9ab0\u5b50\u9762\u6570","text":""},{"location":"Standard/Term/DefaultDice/_sides/#_1","title":"\u5c5e\u6027\u8bf4\u660e","text":"

\u7528\u4e8e\u89c4\u5b9a\u9ed8\u8ba4\u6295\u63b7\u65f6\u9ab0\u5b50\u7684\u9762\u6570

"},{"location":"Standard/Term/PlayerCard/","title":"PlayerCard \u4eba\u7269\u5361","text":"

Tip

\u8fd9\u662f\u4e00\u4e2a\u53ef\u9009\u5b9e\u73b0\u4f46\u662f{\u5efa\u8bae\u5c3d\u91cf\u5fc5\u987b\u5b9e\u73b0}\u7684\u65b9\u6cd5\uff0c\u4e3b\u8981\u8868\u73b0\u5728\u89c4\u5219\u4e66\u6b63\u662f\u68c0\u5b9a\u65b9\u6cd5\u4e0d\u540c\u800c\u6709\u6240\u4e0d\u540c\u4e0a\u3002

"},{"location":"Standard/Term/PlayerCard/#_1","title":"\u7c7b\u8bf4\u660e","text":"

\u7528\u4e8e\u89c4\u5b9a\u4eba\u7269\u5361\u7684\u683c\u5f0f\uff0c\u5305\u62ec\u4eba\u7269\u5c5e\u6027\uff0c\u5c5e\u6027\u4e4b\u95f4\u7684\u8ba1\u7b97\u5173\u7cfb\u7b49

"},{"location":"Standard/Term/check/","title":"check \u68c0\u5b9a","text":"

Tip

\u8fd9\u662f\u4e00\u4e2a\u53ef\u9009\u5b9e\u73b0\u4f46\u662f{\u5efa\u8bae\u5c3d\u91cf\u5fc5\u987b\u5b9e\u73b0}\u7684\u65b9\u6cd5\uff0c\u4e3b\u8981\u8868\u73b0\u5728\u89c4\u5219\u4e66\u6b63\u662f\u68c0\u5b9a\u65b9\u6cd5\u4e0d\u540c\u800c\u6709\u6240\u4e0d\u540c\u4e0a\u3002

"},{"location":"Standard/Term/check/#_1","title":"\u65b9\u6cd5\u8bf4\u660e","text":"

\u4f7f\u7528check\u6216\u8005ability\u65b9\u6cd5, \u5fc5\u987b\u5bf9\u68c0\u5b9a\u7ed3\u679c\u8bbe\u5b9a\u4e00\u4e2a\u5b8c\u6574\u7684\u8f93\u51fa\u5224\u5b9a\u8303\u56f4\u3002

"},{"location":"Standard/Term/check/#_2","title":"\u68c0\u5b9a\u7ed3\u679c\u8868","text":"

\u5982\u65b9\u6cd5\u6240\u8a00\uff0c\u4f60\u5fc5\u987b\u4e3a\u68c0\u5b9a\u7684\u7ed3\u679c\u8bbe\u8ba1\u4e00\u4e2a\u5b8c\u6574\u7684\u8f93\u51fa\u5224\u5b9a\u8303\u56f4\uff0c\u56e0\u6b64\u4f60\u9700\u8981\u4e25\u683c\u5e76\u4e14\u5408\u7406\u7684\u5206\u914d\u5212\u5206\u754c\u9650\uff0c\u4fdd\u8bc1\u6240\u6709\u60c5\u51b5\u90fd\u5728\u5141\u8bb8\u8303\u56f4\u5185\u6709\u4e00\u4e2a\u7c7b\u4f3c\u201d\u6210\u529f\u201d\u201d\u5931\u8d25\u201d\u7684\u8f93\u51fa\u3002

"},{"location":"Standard/Term/check/ability/","title":"ability \u68c0\u5b9a","text":"

Info

\u5173\u4e8e\u8fd9\u90e8\u5206\u5185\u5bb9\u8bf7\u79fb\u6b65\u6b63\u5f0f\u672f\u8bed: check \u68c0\u5b9a

\u8fd9\u90e8\u5206\u5176\u5b9e\u5df2\u7ecf\u79fb\u9664\u3002

"},{"location":"Standard/Term/duration/","title":"duration (\u65f6\u957f)","text":""},{"location":"blog/","title":"Blog","text":""},{"location":"blog/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/","title":"Rule \u57fa\u7c7b\u5df2\u7ecf\u652f\u6301\u6cdb\u578b\u4e86","text":"

Hey there! You're looking at our new blog, built with the brand new built-in blog plugin. With this plugin, you can easily build a blog alongside your documentation or standalone.

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 Jekyll and friends. The built-in blog plugin 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.

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 the plugin's documentation.

"},{"location":"blog/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/#quick-start","title":"Quick start","text":""},{"location":"blog/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/#creating-a-standalone-blog","title":"Creating a standalone blog","text":"

You can bootstrap a new project using the mkdocs executable:

mkdocs new .\n

This will create the following structure:

.\n\u251c\u2500 docs/\n\u2502  \u2514\u2500 index.md\n\u2514\u2500 mkdocs.yml\n
"},{"location":"blog/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/#configuration","title":"Configuration","text":"

In this article, we're going to build a standalone blog, which means that the blog lives at the root of your project. For this reason, open mkdocs.yml, and replace its contents with:

site_name: My Blog\ntheme:\n  name: material\n  features:\n    - navigation.sections\nplugins:\n  - blog:\n      blog_dir: . # (1)!\n  - search\n  - tags\nnav:\n  - index.md\n
  1. This is the important part \u2013 we're hosting the blog at the root of the project, and not in a subdirectory. For more information, see the blog_dir configuration option.
"},{"location":"blog/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/#blog-setup","title":"Blog setup","text":"

The blog index page lives in docs/index.md. This page was pre-filled by MkDocs with some content, so we're going to replace it with what we need to bootstrap the blog:

# Blog\n

That's it.

"},{"location":"blog/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/#writing-your-first-post","title":"Writing your first post","text":"

Now that we have set up the built-in blog plugin, we can start writing our first post. All blog posts are written with the exact same Markdown flavor as already included with Material for MkDocs. First, create a folder called posts with a file called hello-world.md:

.\n\u251c\u2500 docs/\n\u2502  \u251c\u2500 posts/\n\u2502  \u2502  \u2514\u2500 hello-world.md # (1)!\n\u2502  \u2514\u2500 index.md\n\u2514\u2500 mkdocs.yml\n
  1. If you'd like to arrange posts differently, you're free to do so. The URLs are built from the format specified in post_url_format and the titles and dates of posts, no matter how they are organized inside the posts directory.

Then, open up hello-world.md, and add the following lines:

---\ndraft: true # (1)!\ndate: 2022-01-31\ncategories:\n  - Hello\n  - World\n---\n\n# Hello world!\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque nec\nmaximus ex. Sed consequat, nulla quis malesuada dapibus, elit metus vehicula\nerat, ut egestas tellus eros at risus. In hac habitasse platea dictumst.\nPhasellus id lacus pulvinar erat consequat pretium. Morbi malesuada arcu mauris\nNam vel justo sem. Nam placerat purus non varius luctus. Integer pretium leo in\nsem rhoncus, quis gravida orci mollis. Proin id aliquam est. Vivamus in nunc ac\nmetus tristique pellentesque. Suspendisse viverra urna in accumsan aliquet.\n\n<!-- more -->\n\nDonec volutpat, elit ac volutpat laoreet, turpis dolor semper nibh, et dictum\nmassa ex pulvinar elit. Curabitur commodo sit amet dolor sed mattis. Etiam\ntempor odio eu nisi gravida cursus. Maecenas ante enim, fermentum sit amet\nmolestie nec, mollis ac libero. Vivamus sagittis suscipit eros ut luctus.\n\nNunc vehicula sagittis condimentum. Cras facilisis bibendum lorem et feugiat.\nIn auctor accumsan ligula, at consectetur erat commodo quis. Morbi ac nunc\npharetra, pellentesque risus in, consectetur urna. Nulla id enim facilisis\narcu tincidunt pulvinar. Vestibulum laoreet risus scelerisque porta congue.\nIn velit purus, dictum quis neque nec, molestie viverra risus. Nam pellentesque\ntellus id elit ultricies, vel finibus erat cursus.\n
  1. If you mark a post as a draft, a red marker appears next to the post date on index pages. When the site is built, drafts are not included in the output. This behavior can be changed, e.g. for rendering drafts when building deploy previews.

When you spin up the live preview server, you should be greeted by your first post! You'll also realize, that archive and category indexes have been automatically generated for you:

However, this is just the start. The built-in blog plugin packs a lot of functionality needed in day-to-day blogging. Visit the documentation of the plugin to learn about the following topics:

Additionally, the built-in blog plugin has dozens of configuration options which allow for fine-tuning the output. You can configure post slugs, general behavior and much more.

"},{"location":"blog/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/#whats-next","title":"What's next?","text":"

Getting basic blogging support out the door was quite a challenge \u2013 the built-in blog plugin 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.

Some ideas already proposed by users:

What's still missing from the brand new built-in blog plugin? Feel free to share your ideas in the comments. Together, we can build one of the best modern engines for technical blogging!

"},{"location":"blog/archive/2023/","title":"2023","text":""},{"location":"blog/category/rules/","title":"Rules","text":""}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\u200b\\-_,:!=\\[\\]()\"`/]+|\\.(?!\\d)|&[lg]t;|(?!\\b)(?=[A-Z][a-z])","pipeline":["stemmer"]},"docs":[{"location":"","title":"\u6c34\u7cfb\u6838\u5fc3","text":"

\u4f60\u597d!\u4e16\u754c\u4e3b\u3002

"},{"location":"changelog/","title":"\u53d8\u66f4\u65e5\u5fd7","text":""},{"location":"changelog/#1.0.5","title":"1.0.5 December 18,2023","text":"

BREAKING CHANGES

FEATURES

BUG FIX

CHORE

"},{"location":"changelog/#1.0.4","title":"1.0.4 October 7,2023","text":"

FEATURES

"},{"location":"changelog/#1.0.3","title":"1.0.3 October 7,2023","text":"

NO CHARGES

"},{"location":"changelog/#1.0.2","title":"1.0.2 October 7,2023","text":"

FEATURES

"},{"location":"changelog/#1.0.1","title":"1.0.1 October 7,2023","text":"

BUG FIX

"},{"location":"changelog/#0.1.2","title":"0.1.2 October 7,2023","text":"

\u540c\u6b65\u7248\u672c\u6240\u505a\u7684\u6d4b\u8bd5\u3002

"},{"location":"changelog/#0.1.1","title":"0.1.1 October 7,2023","text":"

BUG FIX

"},{"location":"changelog/#0.1.0-rc1","title":"0.1.0-rc1 October 7,2023","text":"

CHORE

"},{"location":"changelog/#0.1.0","title":"0.1.0October 7,2023","text":"

Features

"},{"location":"changelog/#0.0.1","title":"0.0.1 July 4,2023","text":"

Features

BREAKING CHANGE

"},{"location":"CLI/","title":"CLI Reference","text":"

```python exec=\"1\" idprefix=\"\" import argparse import re from infini import Cli

parser = Cli().parser

MONOSPACED = (\"pyproject.toml\", \"pdm.lock\", \".pdm-python\", \":pre\", \":post\", \":all\")

def clean_help(help: str) -> str: # Make dunders monospaced avoiding italic markdown rendering help = re.sub(r\"([\\w\\d_]+)\", r\"__\\1__\", help) # Make env vars monospaced help = re.sub(r\"env var: ([A-Z_]+)\", r\"env var: \\1\", help) for monospaced in MONOSPACED: help = re.sub(rf\"\\s(['\\\"]?{monospaced}['\\\"]?)\", f\"{monospaced}\", help) return help

def render_parser( parser: argparse.ArgumentParser, title: str, heading_level: int = 2 ) -> str: \"\"\"Render the parser help documents as a string.\"\"\" result = [f\"{'#' * heading_level} {title}\\n\"] if parser.description and title != \"infini\": result.append(\"> \" + parser.description + \"\\n\")

for group in sorted(\n    parser._action_groups, key=lambda g: g.title.lower(), reverse=True\n):\n    if not any(\n        bool(action.option_strings or action.dest)\n        or isinstance(action, argparse._SubParsersAction)\n        for action in group._group_actions\n    ):\n        continue\n\n    result.append(f\"{group.title.title()}:\\n\")\n    for action in group._group_actions:\n        if isinstance(action, argparse._SubParsersAction):\n            for name, subparser in action._name_parser_map.items():\n                result.append(render_parser(subparser, name, heading_level + 1))\n            continue\n\n        opts = [f\"`{opt}`\" for opt in action.option_strings]\n        if not opts:\n            line = f\"- `{action.dest}`\"\n        else:\n            line = f\"- {', '.join(opts)}\"\n        if action.metavar:\n            line += f\" `{action.metavar}`\"\n        line += f\": {clean_help(action.help)}\"\n        if action.default and action.default != argparse.SUPPRESS:\n            line += f\" (default: `{action.default}`)\"\n        result.append(line)\n    result.append(\"\")\n\nreturn \"\\n\".join(result)\n

print(render_parser(parser, \"infini\")) ```

"},{"location":"Core/","title":"\u6838\u5fc3\u6982\u89c8","text":"infini'\u6c34\u7cfb\u6838\u5fc3"},{"location":"Core/#getting","title":"\ud83c\udf81 Getting","text":"
  1. \u5b89\u88c5\u5e93

\u5728\u547d\u4ee4\u884c\u8f93\u5165\u3002

git clone https://github.com/HydroRoll-Team/infini.git\ncd infini\npdm install\n# \u6216\u8005\u4f7f\u7528pip\n# pip install infini\n
  1. \u521b\u5efa\u89c4\u5219\u5305\u5b9e\u4f8b
mkdir myrules && cd myrules && mkdir rule1\necho.> config.toml\necho.> __init__.py\n

\u5728 __init__.py \u521b\u5efa\u4e00\u4e2a rule \u5b9e\u4f8b\u5e76\u7ee7\u627f Rule \u57fa\u7c7b, \u901a\u8fc7\u7f16\u5199\u5408\u9002\u7684\u76f8\u5173\u65b9\u6cd5\u4e0e\u7c7b\u6ce8\u518c\u89c4\u5219\u5305\u5b9e\u73b0\u89c4\u5219\u7684\u81ea\u5b9a\u4e49\u3002

from infini import Rule\n\nclass Myrule(Rule):\n  \"\"\"\u81ea\u8bbe\u89c4\u5219\u5305\uff0c\u7ee7\u627f Rule \u57fa\u7c7b\"\"\"\n
  1. \u5408\u7406\u4fee\u6539\u4f60\u7684 config.toml \u914d\u7f6e\u6587\u4ef6\uff0c\u5b8c\u6210\u6ce8\u518c!
"},{"location":"Core/#license","title":"\ud83d\udcc4 License","text":"

MIT \u00a9 2023-PRESENT \u7b80\u5f8b\u7eaf

"},{"location":"Help/TermList/","title":"\u672f\u8bed\u8868\u4e00\u89c8","text":""},{"location":"Help/TermList/#_1","title":"\u79fb\u6b65\u6b63\u5f0f\u672f\u8bed","text":""},{"location":"Help/emoji/","title":"\u56fe\u6807\u3001\u6ce8\u91ca\u8bf4\u660e","text":""},{"location":"Help/emoji/#_1","title":"\u76ee\u5f55\u6811\u3001\u4fa7\u8fb9\u680f\u56fe\u6807","text":"

\u8fd9\u4e9b\u56fe\u6807\u5c06\u4f1a\u51fa\u73b0\u5728\u9875\u9762\u5de6\u4fa7\u7684 navigation \u4e0e\u6587\u7ae0\u53f3\u4fa7\u7684 toc \u5f53\u4e2d\u3002

\u5df2\u88ab\u5e9f\u5f03\u6700\u8fd1\u6dfb\u52a0\u5b9e\u9a8c\u529f\u80fd\u6269\u5c55\u7279\u6027

\u5728 release \u7248\u672c\u4e2d \u4e0d\u63a8\u8350\u4f7f\u7528 \u4f46\u662f \u4ecd\u7136\u6709\u6548 \u7684\u529f\u80fd\u3001\u7279\u6027\u3002\u5e76\u4e14\u5728 latest \u7248\u672c\u4e2d\u5df2\u7ecf\u5b8c\u5168\u5e9f\u5f031\u3002

\u5728\u4e0a\u4e00\u4e2a release \u7248\u672c\u4f5c\u4e3a\u5b9e\u9a8c\u529f\u80fd\u6216\u4f5c\u4e3a\u6269\u5c55\u7279\u6027\u4f46\u662f\u6838\u5fc3\u672c\u4f53\u5e76\u672a\u652f\u6301\u7684\u529f\u80fd\u3001\u7279\u6027\uff0c\u4e8e latest \u7248\u672c\u88ab\u5f15\u5165\u3002

\u5b58\u5728\u4e8e\u5f53\u524d dev \u7248\u672c\u4e2d\u4f46\u662f\u672a\u5728 latest \u7248\u672c\u4e2d\u52a0\u5165\u7684\u529f\u80fd\u3001\u7279\u6027\u3002

\u5728\u652f\u6301 latest \u6216 dev \u6216 \u7279\u5b9a release \u7248\u672c\u7684\u63d2\u4ef6\u6269\u5c55\u4e2d\u5b58\u5728\u6b64\u7279\u6027\u7684\u53ef\u884c\u6027\u65b9\u6848\u3002

"},{"location":"Help/emoji/#_2","title":"\u62bd\u8c61\u6982\u5ff5","text":"

\u8fd9\u4e9b\u56fe\u6807\u4f1a\u51fa\u73b0\u5728\u6587\u7ae0\u5185\u5bb9\u4e2d\u4f5c\u4e3a\u62bd\u8c61\u6982\u5ff5\u7684\u5177\u4f53\u8868\u8fbe\uff0c\u7528\u4e8e\u8fc1\u79fb\u8bb0\u5fc6\u3002

\u4ee5\u4e0b\u662f\u56fe\u6807\u5e94\u7528\u4e3e\u4f8b:

"},{"location":"Help/emoji/#_3","title":"\u6ce8\u91ca\u8bf4\u660e","text":"
  1. \u5177\u4f53\u8fd8\u8981\u770b\u4e0b\u4e00\u4e2a\u5927\u7248\u672c\u7684\u6587\u6863\u5982\u4f55\u7f16\u5199\u3002\u00a0\u21a9

"},{"location":"RulePackage/intro/","title":"\u6982\u8ff0","text":"

Abstract

\u6b64\u7ae0\u8282\u6d89\u53ca\u5230\u771f\u6b63\u7684 Python \u89c4\u8303\u95ee\u9898\uff0c\u56e0\u6b64\u8bf7\u8ba4\u771f\u9605\u8bfb\u5e76\u591a\u52a0\u7ec3\u4e60\uff0c\u65b9\u80fd\u5199\u51fa\u6f02\u4eae\u7684\u4ee3\u7801\u3002

"},{"location":"RulePackage/intro/#_1","title":"\u5b89\u88c5\u89c4\u5219\u5305","text":"

\u6c34\u7cfb\u89c4\u5219\u5305\u53ef\u4ee5\u901a\u8fc7 pip Pyhton \u5305\u7ba1\u7406\u5de5\u5177\u76f4\u63a5\u4e0b\u8f7d\uff0c\u4f46\u662f\u4e3a\u4e86\u65b9\u4fbf\uff0c\u6211\u4eec\u63a8\u8350\u4ee5\u4e0b\u4e24\u4e2a\u5b89\u88c5\u65b9\u6848\u3002

\u4f7f\u7528pdm\u7ba1\u7406\u5668\u4f7f\u7528hrc\u7ba1\u7406\u5668
pdm install MyRule\n

\u5982\u679c\u4f60\u4f7f\u7528pdm\u7ba1\u7406\u81ea\u5df1\u7684\u89c4\u5219\u5305\u6216\u5f00\u542f\u81ea\u5df1\u7684\u6c34\u7cfb\u9ab0\u5b50\uff0c\u90a3\u4e48\u975e\u5e38\u63a8\u8350\u4f7f\u7528\u8fd9\u79cd\u65b9\u6848\u6765\u96c6\u6210\u5f62\u5982 infini-Rule-The_Pool\u8fd9\u822c\u5305\u540d\u7684\u89c4\u5219\u3002

hrc install MyRule\n

\u4e00\u822c\u6765\u8bf4\u63a8\u8350\u4f7f\u7528hrc\u7ba1\u7406\u5668\u6765\u5b89\u88c5\u548c\u8c03\u8bd5\u89c4\u5219\u5305\u3002 (1)

  1. \u8fd9\u6837\u4f1a\u65e0\u89c6\u865a\u62df\u73af\u5883\u89c4\u5219\u800c\u76f4\u63a5\u627e\u5230\u5f53\u524d\u4f7f\u7528\u7684\u6587\u4ef6\u8def\u5f84\uff0c\u800c\u4e0d\u9700\u8981\u50cfpdm\u90a3\u6837\u53ea\u80fd\u7528\u5728pdm\u672c\u8eab\u521b\u5efa\u7684\u865a\u62df\u73af\u5883\u5185\u4e86\u3002

HRC\u7ba1\u7406\u5668\u7684\u539f\u7406\u662f\u4f7f\u7528pip\u83b7\u53d6\u5305\u540ecp\u5230\u5f53\u524d\u6240\u6307\u5b9a\u7684\u76ee\u5f55(\u6216\u8005\u9ed8\u8ba4\u76ee\u5f55)\u3002\u5bf9\u4e8e\u4e0d\u719f\u6089\u547d\u4ee4\u884c\u7684\u7528\u6237\u6765\u8bf4\uff0c\u4e00\u4e2awebui\u6216\u8bb8\u662f\u66f4\u9002\u5408\u7684\u65b9\u6848\u3002

"},{"location":"RulePackage/intro/#_2","title":"\u7f16\u5199\u89c4\u5219\u5305","text":"

\u8981\u7f16\u5199\u89c4\u5219\u5305\uff0c\u9700\u8981\u61c2\u5f97Python\u76f8\u5173\u7684\u77e5\u8bc6\u4ee5\u53ca\u4e00\u4e9b\u8ba1\u7b97\u673a\u5e38\u8bc6\u3002\u5728\u63a5\u4e0b\u6765\u7684\u597d\u51e0\u4e2a\u7ae0\u8282\u91cc\u4f60\u5c06\u4f1a\u88ab\u4e00\u6b65\u4e00\u5f15\u5bfc\u5b66\u4e60\u5982\u4f55\u5236\u4f5c\u4e00\u4e2a\u89c4\u5219\u5305\u3002

"},{"location":"RulePackage/getStart/attribute/","title":"attribute \u5c5e\u6027","text":"

Info

\u5173\u8054\u5230\u4e00\u4e2a\u5bf9\u8c61\u7684\u503c\uff0c\u901a\u5e38\u4f7f\u7528\u70b9\u53f7\u8868\u8fbe\u5f0f\u6309\u540d\u79f0\u6765\u5f15\u7528\u3002 \u4e3e\u4f8b\u6765\u8bf4\uff0c\u5982\u679c\u5bf9\u8c61 o \u5177\u6709\u5c5e\u6027 a \u5219\u53ef\u4ee5\u7528 o.a \u6765\u5f15\u7528\u5b83\u3002

\u5982\u679c\u5bf9\u8c61\u5141\u8bb8\uff0c\u5c06\u672a\u88ab\u5b9a\u4e49\u4e3a \u6807\u8bc6\u7b26\u548c\u5173\u952e\u5b57 \u7684\u975e\u6807\u8bc6\u540d\u79f0\u7528\u4f5c\u4e00\u4e2a\u5bf9\u8c61\u7684\u5c5e\u6027\u4e5f\u662f\u53ef\u4ee5\u7684\uff0c\u4f8b\u5982\u4f7f\u7528 setattr()\u3002 \u8fd9\u6837\u7684\u5c5e\u6027\u5c06\u65e0\u6cd5\u4f7f\u7528\u70b9\u53f7\u8868\u8fbe\u5f0f\u6765\u8bbf\u95ee\uff0c\u800c\u662f\u5fc5\u987b\u901a\u8fc7 getattr() \u6765\u83b7\u53d6\u3002

"},{"location":"RulePackage/getStart/class/","title":"class \u7c7b","text":"

Info

\u7528\u6765\u521b\u5efa\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61\u7684\u6a21\u677f\u3002\u7c7b\u5b9a\u4e49\u901a\u5e38\u5305\u542b\u5bf9\u8be5\u7c7b\u7684\u5b9e\u4f8b\u8fdb\u884c\u64cd\u4f5c\u7684\u65b9\u6cd5\u5b9a\u4e49\u3002

"},{"location":"RulePackage/getStart/method/","title":"method \u65b9\u6cd5","text":"

Info

\u5728\u7c7b\u5185\u90e8\u5b9a\u4e49\u7684\u51fd\u6570\u3002\u5982\u679c\u4f5c\u4e3a\u8be5\u7c7b\u7684\u5b9e\u4f8b\u7684\u4e00\u4e2a\u5c5e\u6027\u6765\u8c03\u7528\uff0c\u65b9\u6cd5\u5c06\u4f1a\u83b7\u53d6\u5b9e\u4f8b\u5bf9\u8c61\u4f5c\u4e3a\u5176\u7b2c\u4e00\u4e2a argument (\u901a\u5e38\u547d\u540d\u4e3a self)\u3002\u53c2\u89c1 function \u548c nested scope\u3002

"},{"location":"RulePackage/getStart/getDeeper/Module/","title":"Module \u6a21\u5757","text":"

Info

\u6b64\u5bf9\u8c61\u662f Python \u4ee3\u7801\u7684\u4e00\u79cd\u7ec4\u7ec7\u5355\u4f4d\u3002\u5404\u6a21\u5757\u5177\u6709\u72ec\u7acb\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u53ef\u5305\u542b\u4efb\u610f Python \u5bf9\u8c61\u3002\u6a21\u5757\u53ef\u901a\u8fc7 importing \u64cd\u4f5c\u88ab\u52a0\u8f7d\u5230 Python \u4e2d\u3002

\u53e6\u89c1 package\u3002

"},{"location":"RulePackage/getStart/getDeeper/Package/","title":"Package \u5305","text":"

Info

\u4e00\u79cd\u53ef\u5305\u542b\u5b50\u6a21\u5757\u6216\u9012\u5f52\u5730\u5305\u542b\u5b50\u5305\u7684 Python module\u3002 \u4ece\u6280\u672f\u4e0a\u8bf4\uff0c\u5305\u662f\u5177\u6709 path \u5c5e\u6027\u7684 Python \u6a21\u5757\u3002

\u53e6\u53c2\u89c1 regular package \u548c namespace package\u3002

"},{"location":"RulePackage/getStart/getDeeper/object/","title":"object \u5bf9\u8c61","text":"

Info

\u4efb\u4f55\u5177\u6709\u72b6\u6001\uff08\u5c5e\u6027\u6216\u503c\uff09\u4ee5\u53ca\u9884\u5b9a\u4e49\u884c\u4e3a\uff08\u65b9\u6cd5\uff09\u7684\u6570\u636e\u3002object \u4e5f\u662f\u4efb\u4f55 new-style class \u7684\u6700\u9876\u5c42\u57fa\u7c7b\u540d\u3002

"},{"location":"Standard/what-is-rule-package/","title":"\u4ec0\u4e48\u662f\u89c4\u5219\u5305\uff1f","text":"

\u89c4\u5219\u5305\u662f\u6c34\u7cfb\u6838\u5fc3\u7528\u6765\u52a0\u8f7d\u7684\u5bf9\u8c61\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u6c34\u7cfb\u6838\u5fc3\u52a0\u8f7d\u7684\u4e00\u4e2a\u4e00\u4e2a\u89c4\u5219\u5b9e\u4f8b\u3002

\u89c4\u5219\u5305\u66f4\u7c7b\u4f3c\u4e8e\u63d2\u4ef6\u7684\u8bbe\u8ba1\uff0c\u6240\u4ee5\u89c4\u5219\u5305\u4e5f\u53ef\u4ee5\u662f\u4e00\u4e2aPython\u6587\u4ef6\u6216\u8005\u4e00\u4e2aPython\u5305\uff0c\u4f46\u5b83\u5fc5\u987b\u50cf\u63d2\u4ef6\u90a3\u6837\u7ee7\u627f\u4e00\u4e2a\u50cfPlugin\u8fd9\u6837\u7684\u7c7b\uff08\u4e0d\u7136\u65e0\u6cd5\u8bfb\u53d6\uff0c\u6211\u4eec\u59d1\u4e14\u53eb\u8fd9\u4e2a\u7c7b\u4e3aRule\uff09\uff0c\u4ee5\u53ca\u5728Rule\u7684\u5b50\u7c7b\u91cc\u5b9e\u73b0\u4e00\u4e9b\u50cfhandle()\u6216\u8005rule()\u8fd9\u6837\u5fc5\u987b\u5b9e\u73b0\u7684\u65b9\u6cd5\uff08\u4e5f\u53eb\u51fd\u6570\uff09\uff0c\u800c\u8fd9\u4e9b\u5fc5\u987b\u5b9e\u73b0\u7684\u65b9\u6cd5\uff0c\u5c31\u662f\u6211\u4eec\u8981\u8ba8\u8bba\u7684\uff0c\u4e00\u4e2a\u901a\u7528\u89c4\u5219\u5305\u6807\u51c6\u5c31\u662f\u660e\u786e\u4e86\u4e00\u4e2a\u7ee7\u627f\u81eaRule\u7c7b\u7684\u5b50\u7c7b\u5b83\u672c\u8eab\u5e94\u8be5\u5b9e\u73b0\u4ec0\u4e48\u65b9\u6cd5\u3002

\u4e3e\u4e2a\u4f8b\u5b50\uff08\u968f\u4fbf\u5199\u7684\uff0c\u5176\u4e2d\u4e00\u4e9b\u5fc5\u987b\u5b9e\u73b0\u7684\u5c5e\u6027\u6216\u8005\u7c7b\u540d\u90fd\u662f\u4e0d\u786e\u5b9a\u7684\uff0c\u4ee5\u540e\u6216\u8bb8\u4f1a\u6539\uff09\uff1a

from HydroRolicore import RuLe\n\nclass MyRule(Rule):\n    \"\"\"\u6211\u7684\u81ea\u5b9a\u4e49\u89c4\u5219\u5305\n\n    check \u51fd\u6570\u662f\u5fc5\u987b\u5b9e\u73b0\u7684\u65b9\u6cd5\u4e4b\u4e00\n    name\u5c5e\u6027\u662f\u5fc5\u987b\u5b9e\u73b0\u7684\u5c5e\u6027\u4e4b\u4e00\uff0c\u7528\u6765\u5b9a\u4e49\u8fd9\u4e2a\u89c4\u5219\u5305\u7684\u540d\u5b57\n    priority\u662f\u53ef\u9009\u5b9e\u73b0\u7684\u5c5e\u6027\u4e4b\u4e00\uff0c\u9ed8\u8ba40\n    \"\"\"\n\n    name = \"\u6211\u7684\u81ea\u5b9a\u4e49\u89c4\u5219\u5305\"\n    priority = 0 # \u4f18\u5148\u7ea7\n\n    def check(self):\n        \"\"\"\u68c0\u5b9a\u65b9\u6cd5\n\n        self.result \u662f\u9700\u8981\u68c0\u5b9a\u65f6\u8ba1\u7b97\u7684\u7ed3\u679c\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\n        self.rule.ability \u662fRule\u7c7b\u91cc\u63d0\u4f9b\u7684\u7528\u4e8e\u5224\u65ad\u68c0\u5b9a\u60c5\u51b5\u7684\u5c5e\u6027\n        \"\"\"\n\n        if self.result < 5 and self.result > 0:\n            return self.rule.ability.success # \u8fd4\u56de\u5927\u6210\u529f\u65f6\u9ab0\u4e3b\u81ea\u5b9a\u4e49\u7684\u5927\u6210\u529f\u6587\u672c\n        else:\n            ... # \u5176\u4ed6\u7684\u68c0\u5b9a\u60c5\u51b5\n

\u8fd9\u6837\u5c31\u5b9e\u73b0\u4e86\u4e00\u4e2a\u6c34\u7cfb\u89c4\u5219\u5305\uff0c\u5f53pl\u4f7f\u7528\u68c0\u5b9a\u63b7\u9ab0\u6307\u4ee4\u65f6\u5c31\u4f1a\u8c03\u7528check()\u65b9\u6cd5\uff0c\u5982\u679c\u68c0\u5b9a\u7ed3\u679c\u6570\u503c\u5c0f\u4e8e5\u4e14\u5927\u4e8e0\u90a3\u4e48\u8fd4\u56de\u5927\u6210\u529f\u3002

\u6211\u4eec\u8981\u505a\u7684\u901a\u7528\u89c4\u5219\u5305\u6807\u51c6\u5c31\u662f\u8fd9\u6837\u4e00\u4e2a\u201c\u5230\u5e95\u9700\u8981\u5728Rule\u7684\u5b50\u7c7bMyRule\u91cc\u5fc5\u987b\u5b9e\u73b0\u54ea\u4e9b\u65b9\u6cd5\uff1f\u201d\u7684\u95ee\u9898\u3002

"},{"location":"Standard/Term/DefaultDice/","title":"DefaultDice \u9ed8\u8ba4\u9ab0\u5b50","text":"

Tip

\u8fd9\u662f\u4e00\u4e2a\u5fc5\u987b\u7684\u7c7b\uff0c\u6839\u636e\u4e0d\u540c\u89c4\u5219\u4e66\u7684\u8981\u6c42\u8bbe\u7f6e\u76f8\u5bf9\u5e94\u7684\u503c

"},{"location":"Standard/Term/DefaultDice/#_1","title":"\u7c7b\u8bf4\u660e","text":"

\u7528\u4e8e\u89c4\u5b9a\u9ed8\u8ba4\u6295\u63b7\u65f6\u9ab0\u5b50\u7684\u5404\u79cd\u5c5e\u6027\uff0c\u4f8b\u5982\u9ed8\u8ba4\u9ab0\u5b50\u6570\u91cf\uff0c\u9762\u6570

"},{"location":"Standard/Term/DefaultDice/_counts/","title":"_counts \u9ab0\u5b50\u4e2a\u6570","text":"

Tip

\u8fd9\u662f\u4e00\u4e2a\u5fc5\u987b\u7684\u503c\uff0c\u6839\u636e\u4e0d\u540c\u89c4\u5219\u4e66\u7684\u8981\u6c42\u8bbe\u7f6e\u76f8\u5bf9\u5e94\u7684\u503c

"},{"location":"Standard/Term/DefaultDice/_counts/#_1","title":"\u5c5e\u6027\u8bf4\u660e","text":"

\u7528\u4e8e\u89c4\u5b9a\u9ed8\u8ba4\u6295\u63b7\u65f6\u9ab0\u5b50\u7684\u4e2a\u6570

"},{"location":"Standard/Term/DefaultDice/_sides/","title":"_sides \u9ab0\u5b50\u9762\u6570","text":""},{"location":"Standard/Term/DefaultDice/_sides/#_1","title":"\u5c5e\u6027\u8bf4\u660e","text":"

\u7528\u4e8e\u89c4\u5b9a\u9ed8\u8ba4\u6295\u63b7\u65f6\u9ab0\u5b50\u7684\u9762\u6570

"},{"location":"Standard/Term/PlayerCard/","title":"PlayerCard \u4eba\u7269\u5361","text":"

Tip

\u8fd9\u662f\u4e00\u4e2a\u53ef\u9009\u5b9e\u73b0\u4f46\u662f{\u5efa\u8bae\u5c3d\u91cf\u5fc5\u987b\u5b9e\u73b0}\u7684\u65b9\u6cd5\uff0c\u4e3b\u8981\u8868\u73b0\u5728\u89c4\u5219\u4e66\u6b63\u662f\u68c0\u5b9a\u65b9\u6cd5\u4e0d\u540c\u800c\u6709\u6240\u4e0d\u540c\u4e0a\u3002

"},{"location":"Standard/Term/PlayerCard/#_1","title":"\u7c7b\u8bf4\u660e","text":"

\u7528\u4e8e\u89c4\u5b9a\u4eba\u7269\u5361\u7684\u683c\u5f0f\uff0c\u5305\u62ec\u4eba\u7269\u5c5e\u6027\uff0c\u5c5e\u6027\u4e4b\u95f4\u7684\u8ba1\u7b97\u5173\u7cfb\u7b49

"},{"location":"Standard/Term/check/","title":"check \u68c0\u5b9a","text":"

Tip

\u8fd9\u662f\u4e00\u4e2a\u53ef\u9009\u5b9e\u73b0\u4f46\u662f{\u5efa\u8bae\u5c3d\u91cf\u5fc5\u987b\u5b9e\u73b0}\u7684\u65b9\u6cd5\uff0c\u4e3b\u8981\u8868\u73b0\u5728\u89c4\u5219\u4e66\u6b63\u662f\u68c0\u5b9a\u65b9\u6cd5\u4e0d\u540c\u800c\u6709\u6240\u4e0d\u540c\u4e0a\u3002

"},{"location":"Standard/Term/check/#_1","title":"\u65b9\u6cd5\u8bf4\u660e","text":"

\u4f7f\u7528check\u6216\u8005ability\u65b9\u6cd5, \u5fc5\u987b\u5bf9\u68c0\u5b9a\u7ed3\u679c\u8bbe\u5b9a\u4e00\u4e2a\u5b8c\u6574\u7684\u8f93\u51fa\u5224\u5b9a\u8303\u56f4\u3002

"},{"location":"Standard/Term/check/#_2","title":"\u68c0\u5b9a\u7ed3\u679c\u8868","text":"

\u5982\u65b9\u6cd5\u6240\u8a00\uff0c\u4f60\u5fc5\u987b\u4e3a\u68c0\u5b9a\u7684\u7ed3\u679c\u8bbe\u8ba1\u4e00\u4e2a\u5b8c\u6574\u7684\u8f93\u51fa\u5224\u5b9a\u8303\u56f4\uff0c\u56e0\u6b64\u4f60\u9700\u8981\u4e25\u683c\u5e76\u4e14\u5408\u7406\u7684\u5206\u914d\u5212\u5206\u754c\u9650\uff0c\u4fdd\u8bc1\u6240\u6709\u60c5\u51b5\u90fd\u5728\u5141\u8bb8\u8303\u56f4\u5185\u6709\u4e00\u4e2a\u7c7b\u4f3c\u201d\u6210\u529f\u201d\u201d\u5931\u8d25\u201d\u7684\u8f93\u51fa\u3002

"},{"location":"Standard/Term/check/ability/","title":"ability \u68c0\u5b9a","text":"

Info

\u5173\u4e8e\u8fd9\u90e8\u5206\u5185\u5bb9\u8bf7\u79fb\u6b65\u6b63\u5f0f\u672f\u8bed: check \u68c0\u5b9a

\u8fd9\u90e8\u5206\u5176\u5b9e\u5df2\u7ecf\u79fb\u9664\u3002

"},{"location":"Standard/Term/duration/","title":"duration (\u65f6\u957f)","text":""},{"location":"blog/","title":"Blog","text":""},{"location":"blog/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/","title":"Rule \u57fa\u7c7b\u5df2\u7ecf\u652f\u6301\u6cdb\u578b\u4e86","text":"

Hey there! You're looking at our new blog, built with the brand new built-in blog plugin. With this plugin, you can easily build a blog alongside your documentation or standalone.

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 Jekyll and friends. The built-in blog plugin 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.

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 the plugin's documentation.

"},{"location":"blog/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/#quick-start","title":"Quick start","text":""},{"location":"blog/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/#creating-a-standalone-blog","title":"Creating a standalone blog","text":"

You can bootstrap a new project using the mkdocs executable:

mkdocs new .\n

This will create the following structure:

.\n\u251c\u2500 docs/\n\u2502  \u2514\u2500 index.md\n\u2514\u2500 mkdocs.yml\n
"},{"location":"blog/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/#configuration","title":"Configuration","text":"

In this article, we're going to build a standalone blog, which means that the blog lives at the root of your project. For this reason, open mkdocs.yml, and replace its contents with:

site_name: My Blog\ntheme:\n  name: material\n  features:\n    - navigation.sections\nplugins:\n  - blog:\n      blog_dir: . # (1)!\n  - search\n  - tags\nnav:\n  - index.md\n
  1. This is the important part \u2013 we're hosting the blog at the root of the project, and not in a subdirectory. For more information, see the blog_dir configuration option.
"},{"location":"blog/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/#blog-setup","title":"Blog setup","text":"

The blog index page lives in docs/index.md. This page was pre-filled by MkDocs with some content, so we're going to replace it with what we need to bootstrap the blog:

# Blog\n

That's it.

"},{"location":"blog/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/#writing-your-first-post","title":"Writing your first post","text":"

Now that we have set up the built-in blog plugin, we can start writing our first post. All blog posts are written with the exact same Markdown flavor as already included with Material for MkDocs. First, create a folder called posts with a file called hello-world.md:

.\n\u251c\u2500 docs/\n\u2502  \u251c\u2500 posts/\n\u2502  \u2502  \u2514\u2500 hello-world.md # (1)!\n\u2502  \u2514\u2500 index.md\n\u2514\u2500 mkdocs.yml\n
  1. If you'd like to arrange posts differently, you're free to do so. The URLs are built from the format specified in post_url_format and the titles and dates of posts, no matter how they are organized inside the posts directory.

Then, open up hello-world.md, and add the following lines:

---\ndraft: true # (1)!\ndate: 2022-01-31\ncategories:\n  - Hello\n  - World\n---\n\n# Hello world!\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque nec\nmaximus ex. Sed consequat, nulla quis malesuada dapibus, elit metus vehicula\nerat, ut egestas tellus eros at risus. In hac habitasse platea dictumst.\nPhasellus id lacus pulvinar erat consequat pretium. Morbi malesuada arcu mauris\nNam vel justo sem. Nam placerat purus non varius luctus. Integer pretium leo in\nsem rhoncus, quis gravida orci mollis. Proin id aliquam est. Vivamus in nunc ac\nmetus tristique pellentesque. Suspendisse viverra urna in accumsan aliquet.\n\n<!-- more -->\n\nDonec volutpat, elit ac volutpat laoreet, turpis dolor semper nibh, et dictum\nmassa ex pulvinar elit. Curabitur commodo sit amet dolor sed mattis. Etiam\ntempor odio eu nisi gravida cursus. Maecenas ante enim, fermentum sit amet\nmolestie nec, mollis ac libero. Vivamus sagittis suscipit eros ut luctus.\n\nNunc vehicula sagittis condimentum. Cras facilisis bibendum lorem et feugiat.\nIn auctor accumsan ligula, at consectetur erat commodo quis. Morbi ac nunc\npharetra, pellentesque risus in, consectetur urna. Nulla id enim facilisis\narcu tincidunt pulvinar. Vestibulum laoreet risus scelerisque porta congue.\nIn velit purus, dictum quis neque nec, molestie viverra risus. Nam pellentesque\ntellus id elit ultricies, vel finibus erat cursus.\n
  1. If you mark a post as a draft, a red marker appears next to the post date on index pages. When the site is built, drafts are not included in the output. This behavior can be changed, e.g. for rendering drafts when building deploy previews.

When you spin up the live preview server, you should be greeted by your first post! You'll also realize, that archive and category indexes have been automatically generated for you:

However, this is just the start. The built-in blog plugin packs a lot of functionality needed in day-to-day blogging. Visit the documentation of the plugin to learn about the following topics:

Additionally, the built-in blog plugin has dozens of configuration options which allow for fine-tuning the output. You can configure post slugs, general behavior and much more.

"},{"location":"blog/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/#whats-next","title":"What's next?","text":"

Getting basic blogging support out the door was quite a challenge \u2013 the built-in blog plugin 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.

Some ideas already proposed by users:

What's still missing from the brand new built-in blog plugin? Feel free to share your ideas in the comments. Together, we can build one of the best modern engines for technical blogging!

"},{"location":"blog/archive/2023/","title":"2023","text":""},{"location":"blog/category/rules/","title":"Rules","text":""}]} \ No newline at end of file diff --git a/dev/sitemap.xml.gz b/dev/sitemap.xml.gz index 47e9337d..be77e63b 100644 Binary files a/dev/sitemap.xml.gz and b/dev/sitemap.xml.gz differ -- cgit v1.2.3-70-g09d2