From 5c7e3f74d7baaaa767dcfcc343f32ebeabd54d3b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 17 Dec 2023 22:37:29 +0000 Subject: Deployed a8c3d25e to dev with MkDocs 1.5.3 and mike 2.0.0 --- dev/search/search_index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'dev/search') diff --git a/dev/search/search_index.json b/dev/search/search_index.json index 8b92bd06..a82cd827 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":""},{"location":"changelog/#breaking-changes","title":"BREAKING CHANGES","text":""},{"location":"changelog/#features","title":"FEATURES","text":""},{"location":"changelog/#bug-fix","title":"BUG FIX","text":""},{"location":"changelog/#chore","title":"CHORE","text":""},{"location":"changelog/#1.0.4","title":"1.0.4 October 7,2023","text":""},{"location":"changelog/#features_1","title":"FEATURES","text":""},{"location":"changelog/#1.0.3","title":"1.0.3 October 7,2023","text":""},{"location":"changelog/#no-charges","title":"NO CHARGES","text":""},{"location":"changelog/#1.0.2","title":"1.0.2 October 7,2023","text":""},{"location":"changelog/#features_2","title":"FEATURES","text":""},{"location":"changelog/#101-2023-10-07","title":"1.0.1 (2023-10-07)","text":""},{"location":"changelog/#bug-fix_1","title":"BUG FIX","text":""},{"location":"changelog/#012-2023-10-07","title":"0.1.2 (2023-10-07)","text":"

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

"},{"location":"changelog/#011-2023-10-07","title":"0.1.1 (2023-10-07)","text":""},{"location":"changelog/#bug-fix_2","title":"BUG FIX","text":""},{"location":"changelog/#010-rc1-2023-10-07","title":"0.1.0-rc1 (2023-10-07)","text":""},{"location":"changelog/#chore_1","title":"CHORE","text":""},{"location":"changelog/#010-2023-10-07","title":"0.1.0 (2023-10-07)","text":""},{"location":"changelog/#features_3","title":"Features","text":""},{"location":"changelog/#001-2023-07-04","title":"0.0.1 (2023-07-04)","text":""},{"location":"changelog/#features_4","title":"Features","text":""},{"location":"changelog/#breaking-change","title":"BREAKING CHANGE","text":""},{"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/#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 -- cgit v1.2.3-70-g09d2