feat: 更新了一些文件结构

This commit is contained in:
shenjack 2023-01-05 21:36:47 +08:00
parent d5d007a2d9
commit 384408c439
99 changed files with 11459 additions and 23 deletions

View File

@ -18,5 +18,6 @@ __all__ = [
'Nope418ImATeapot',
'ThinkError',
'BrainError',
'BigBrainError'
'BigBrainError',
'GrammarError'
]

View File

@ -10,14 +10,15 @@ mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
from Difficult_Rocket.exception import BaseError
from Difficult_Rocket.exception import BaseError, BaseRuntimeError
__all__ = [
'NoMoreJson5',
'Nope418ImATeapot',
'ThinkError',
'BrainError',
'BigBrainError'
'BigBrainError',
'GrammarError'
]
@ -43,3 +44,7 @@ class BigBrainError(BrainError):
class BrainTimeoutError(BrainError, ThinkError):
"""脑子····超时·······················啦!"""
class GrammarError(BaseRuntimeError):
"""嘿NMD语法"""

View File

@ -55,19 +55,16 @@ class Translates:
def __init__(self,
value: Union[Dict[str, Any], list, tuple, str],
config: Optional[TranslateConfig] = None,
get_list: List[Tuple[int, str]] = None,
error_get_list: List[Tuple[int, str]] = None):
get_list: List[Tuple[bool, str]] = None):
"""
一个用于翻译的东西
:param value: 翻译键节点
:param config: 配置
:param get_list: 获取列表
:param error_get_list:
"""
self.value: Union[Dict[str, Any], list, tuple] = value
self.config = config or TranslateConfig()
self.get_list = get_list or []
self.error_get_list = error_get_list or []
def set_option(self, option: Union[str, TranslateConfig],
value: Optional[Union[bool, List[str]]] = None) -> 'Translates':
@ -77,21 +74,15 @@ class Translates:
return self
self.config.set(option, value)
def __getitem__(self, item: Union[str, int, Hashable]) -> Union["Translates", str, int]:
def __getitem__(self, item: Union[str, int, Hashable]) -> Union["Translates"]:
"""
一坨答辩
:param item: 取用的内容/小天才
:return:
"""
cache_get_list = self.get_list.copy()
cache_error_get_list = self.error_get_list.copy()
cache_get_list.append(item)
try:
if not self.final:
if item not in self.value and (type(item) is int and len(self.value) < item):
raise KeyError
cache = self.value[item]
cache_get_list.append(item)
cache_get_list.append((True, item))
except (KeyError, TypeError):
# 出现问题
if DR_option.report_translate_no_found:
@ -99,15 +90,14 @@ class Translates:
last_frame = frame.f_back
if last_frame.f_code == self.__getattr__.__code__:
last_frame = last_frame.f_back
call_info = f'Translate Not Found at {last_frame.f_code.co_name} by {".".join(cache_get_list)} at:' \
call_info = f'Translate Not Found at {last_frame.f_code.co_name} by {".".join([x[1] for x in cache_get_list])} at:' \
f'{last_frame.f_code.co_filename}:{last_frame.f_lineno}'
print(call_info)
# 如果不抛出错误
if self.config.raise_error:
raise TranslateKeyNotFound(item_names=cache_get_list) from None
cache_error_get_list.append(item)
if self.final: # 如果已经是翻译结果
return Translates(value='.'.join(cache_get_list), error_get_list=cache_error_get_list)
return Translates(value='.'.join(cache_get_list))
else:
if self.final:
return self
@ -115,8 +105,7 @@ class Translates:
return Translates(value=cache, get_list=cache_get_list)
def __getattr__(self, item: Union[str, Hashable]) -> Union["Translates"]:
if hasattr(object, item):
return getattr(object, item)
# 实际上我这里完全不需要处理正常需求,因为 __getattribute__ 已经帮我处理过了
return self.__getitem__(item)
def __str__(self):
@ -146,9 +135,11 @@ class Tr:
# def __call__(self, ):
# ...
def __getitem__(self, item):
if item in self.translates:
return getattr(self.translates_cache, item)
def __getattr__(self, item) -> Translates:
...
def __getitem__(self, item: Union[str, int]):
return self.__getattr__(item)
class Lang:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

793
docs/index.html Normal file
View File

@ -0,0 +1,793 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>update logs - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="update_logs.html" class="active"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="difficult-rocket-update-logs"><a class="header" href="#difficult-rocket-update-logs">Difficult Rocket Update Logs</a></h1>
<ul>
<li>感谢 <code>Github copilot</code> 的翻译(甚至这句话也是<code>copilot</code>翻译的)
<ul>
<li>也就意味着以后的更新日志是中文记录+<code>copilot</code>翻译的(当然,也有可能是<code>Easy Translate</code>翻译的)</li>
</ul>
</li>
<li>Thanks <code>Github copilot</code> for translate (lazy yes!)
<ul>
<li>Means the update logs will lodge in Chinese and translated by <code>copilot</code></li>
</ul>
</li>
</ul>
<h2 id="readme-first"><a class="header" href="#readme-first">Readme First!</a></h2>
<h5 id="most-badge-can-be-clicked-and-jump"><a class="header" href="#most-badge-can-be-clicked-and-jump">most badge can be clicked and jump</a></h5>
<p><a href="https://Semver.org/"><img src="https://img.shields.io/badge/SemVer-2.0.0-blue.svg" alt="Generic badge" /></a>
<img src="https://img.shields.io/badge/Version-0.6.4.1-yellow.svg" alt="Generic badge" /></p>
<ul>
<li><a href="https://github.com/shenjackyuanjie/Difficult-Rocket"><img src="https://img.shields.io/badge/Readme-Github-blue.svg?style=flat-square&amp;logo=Github" alt="Readme-github" /></a></li>
<li><a href="https://gitee.com/shenjackyuanjie/Difficult-Rocket"><img src="https://img.shields.io/badge/Readme-Gitee-blue.svg?style=flat-square&amp;logo=Gitee" alt="Readme-gitee" /></a></li>
<li><a href="../README.html"><img src="https://img.shields.io/badge/Readme-%E4%B8%AD%E6%96%87(%E7%82%B9%E6%88%91!)-blue.svg?style=flat-square" alt="Readme-gitee" /></a></li>
<li>Using <a href="https://semver.org/">SemVer 2.0.0</a> to manage version</li>
</ul>
<h2 id="20221124-v-064"><a class="header" href="#20221124-v-064">20221124 V 0.6.4</a></h2>
<h3 id="最后的-06-呢"><a class="header" href="#最后的-06-呢">最后的 0.6 呢</a></h3>
<h3 id="add"><a class="header" href="#add">Add</a></h3>
<ul>
<li><code>Logger!</code></li>
<li>nuitka 文档</li>
<li>准备给我的 5600x 的散热器洗一洗(</li>
<li>一些 client</li>
<li><code>Github Action</code> 的自动 build</li>
</ul>
<h3 id="changes"><a class="header" href="#changes">Changes</a></h3>
<ul>
<li><code>utils.translates</code> 中的字体名称常量移动至 <code>api.types.Fonts</code></li>
<li>删除了 <code>README-cn.md</code> ( 合并到 <code>README.md</code> 中 )</li>
<li><code>README.md</code><code>README-en.md</code> 的内容统一</li>
<li>重新调整 <code>requirement.txt</code> 的内容 ( 使内容更加有条理性 )</li>
<li>删除了一些无用的代码 ( For second-dev )</li>
<li>更新了 <code>Toml</code> 文件 ( 使其更加规范 )</li>
<li>更新了 <code>screen api</code></li>
<li>更新了 <code>pyglet</code> 版本</li>
<li>删除了 <code>main.config</code></li>
<li>更新了 <code>logger</code></li>
<li>更新了 <code>nuitka.yml</code></li>
<li>尝试加载 <code>icon</code></li>
<li>更新了主项目</li>
</ul>
<h2 id="20220627"><a class="header" href="#20220627">20220627</a></h2>
<h2 id="20220511-v-063"><a class="header" href="#20220511-v-063">20220511 V 0.6.3</a></h2>
<ul>
<li>咕了好久的 update log 了</li>
<li>github copilot 卒了,所以没有英文
<ul>
<li>GitHub copy alot break , so no more English</li>
</ul>
</li>
</ul>
<h3 id="change"><a class="header" href="#change">Change</a></h3>
<ul>
<li><code>api/Exp</code> 改为文件夹 <code>api/Exp/__init__.py</code></li>
<li>再次重写了 <code>client.load_fonts()</code> 现在改为直接加载单独的 <code>pyglet_load_fonts_folder()</code></li>
<li>更新了 <code>command/</code> 里的一大堆东西</li>
<li>退钱!开摆!</li>
</ul>
<h2 id="202202xx-v-062"><a class="header" href="#202202xx-v-062">202202xx V 0.6.2</a></h2>
<h3 id="add-1"><a class="header" href="#add-1">Add</a></h3>
<ul>
<li>添加了 <code>libs.MCDR</code> 文件夹 (<code>new_thread</code>没有包含在内)
<ul>
<li>Add <code>libs.MCDR</code> folder (<code>new_thread</code> not included)</li>
</ul>
</li>
<li>添加对 mod 的支持(还在写啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊)</li>
<li>计划写个设计文档
<ul>
<li>Plan to write a design document</li>
</ul>
</li>
</ul>
<h2 id="202111-202112xx-20220119-20220207-v-061"><a class="header" href="#202111-202112xx-20220119-20220207-v-061"><del>202111 202112xx 20220119</del> 20220207 V 0.6.1</a></h2>
<p><del>争取12月内发一个release</del></p>
<p><del>行了这都2022年了我接着摸等我考完试(20220110)再发</del></p>
<p>20220207 可算是发了ruaaaa</p>
<h3 id="change-1"><a class="header" href="#change-1">Change</a></h3>
<ul>
<li>修改了 readme 文件的语言切换格式
<ul>
<li>Change the language switch format in readme</li>
</ul>
</li>
<li>更新了所有文件的版权信息 (2021-2022)
<ul>
<li>Update all files copyright information (2021-2022)</li>
</ul>
</li>
<li>重命名 <code>Difficult_Rocket.py</code> -&gt; <code>DR.py</code>
<ul>
<li>用于修复 <code>Pycharm</code> 检测模块时总是会把主文件检测成主程序,导致一些模块总是检测不到的问题
<ul>
<li>Rename <code>Difficult_Rocket.py</code> -&gt; <code>DR.py</code></li>
<li>Use it to fix <code>Pycharm</code> module detection problem
<ul>
<li>When the main file is detected as the main program, some modules will always be detected as the main program</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><code>api/translate</code>移动到根目录下
<ul>
<li>move <code>api/translate</code> to root directory</li>
</ul>
</li>
<li>现在命令会慢慢消失,而不是立即消失
<ul>
<li>Now the command will disappear slowly, not immediately</li>
</ul>
</li>
<li>重写了一遍<code> client.load_fonts()</code>
<ul>
<li>rewrite <code>client.load_fonts()</code></li>
</ul>
</li>
<li>重写了 <code>tools.load_file()</code> 的错误处理和 <code>.config</code> 文件的解析方式
<ul>
<li>现在 <code>.config</code> 文件解析后会直接返回一个 <code>ConfigParser</code> 对象</li>
<li>也就意味着不能再直接遍历 <code>.config</code> 文件返回的解析 <del>谁遍历.config文件啊</del></li>
<li>同时也意味着可以直接用解析好的 <code>.config</code> 文件来修改 <code>.config</code> 文件
<ul>
<li>rewrite <code>tools.load_file()</code> error handling and <code>.config</code> file parsing method
<ul>
<li>now <code>.config</code> file parsing after return <code>ConfigParser</code> object</li>
<li>that means you can not directly traverse <code>.config</code> file return parsing <del>who traverse .config file</del></li>
<li>also means you can directly use parsed <code>.config</code> file to modify <code>.config</code> file</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><code>pyglet</code> 添加 <code>Ctrl+C</code><code>Ctrl+V</code> 的快捷键解析
<ul>
<li>add <code>Ctrl+C</code> and <code>Ctrl+V</code> shortcut for <code>pyglet</code></li>
</ul>
</li>
<li>更新 <code>pyglet</code><code>2.0dev13</code>
<ul>
<li>update <code>pyglet</code> to <code>2.0dev13</code></li>
</ul>
</li>
</ul>
<h3 id="command"><a class="header" href="#command">Command</a></h3>
<ul>
<li>
<p><code>log_tick</code> 指令改为 <code>fps log</code></p>
<ul>
<li>command <code>log_tick</code> change to <code>fps log</code></li>
</ul>
</li>
<li>
<p><code>maxfps</code> 指令改为 <code>fps max</code></p>
<ul>
<li>command <code>maxfps</code> change to <code>fps max</code></li>
</ul>
</li>
<li>
<p><code>minfps</code> 指令改为 <code>fps min</code></p>
<ul>
<li>command <code>minfps</code> change to <code>fps min</code></li>
</ul>
</li>
<li>
<p>命令内容输出使用<code>CommandText</code>而不是<code>str</code></p>
<ul>
<li>也就是说可以使用<code>CommandText.match</code>来匹配命令内容</li>
<li>command output use <code>CommandText</code> instead of <code>str</code>
<ul>
<li>means you can use <code>CommandText.match</code> to match command content</li>
</ul>
</li>
</ul>
</li>
<li>
<p>命令解析现在使用新的<code>CommandText.match</code></p>
<ul>
<li>command parse now use new <code>CommandText.match</code></li>
</ul>
</li>
</ul>
<h3 id="add-2"><a class="header" href="#add-2">Add</a></h3>
<ul>
<li>添加内置字体<code>Cascadia_Code</code>
<ul>
<li>add built-in font <code>Cascadia_Code</code></li>
</ul>
</li>
<li>添加模块 <code>xmltodict</code> <code>pyperclip</code>
<ul>
<li>add modules <code>xmltodict</code> <code>pyperclip</code></li>
</ul>
</li>
<li>添加了<code>json5</code> <code>pyglet</code> <code>pyperclip</code> <code>xmltodict</code> 的协议
<ul>
<li>非常感谢上述模块的作者和维护者们</li>
<li>added <code>json5</code> <code>pyglet</code> <code>pyperclip</code> <code>xmltodict</code> LICENSE
<ul>
<li>thanks a lot to above module's author and maintainer</li>
</ul>
</li>
</ul>
</li>
<li>继续~~重~~新写了一个基于 <code>HTMLLabel</code><code>HTMLformatedLabel</code>
<ul>
<li>同时为他写了一个 <code>decode_text2HTML</code> 工具(这也是咕咕咕的一大部分原因)</li>
<li>add a <code>HTMLformatedLabel</code> Label based on <code>HTMLLabel</code>
<ul>
<li>also write a <code>decode_text2HTML</code> tool (also a big reason why lazy)</li>
</ul>
</li>
</ul>
</li>
<li>增加内置模块 <code>toml</code> 和对应的 <code>LICENSE.txt</code>
<ul>
<li>Added built-in module <code>toml</code> and corresponding <code>LICENSE.txt</code></li>
</ul>
</li>
</ul>
<h2 id="20211025-v-060"><a class="header" href="#20211025-v-060">20211025 V 0.6.0</a></h2>
<h4 id="command-line-update"><a class="header" href="#command-line-update">Command Line Update!</a></h4>
<h3 id="change-2"><a class="header" href="#change-2">Change</a></h3>
<ul>
<li>现在 <code>Difficult Rocket</code> 只适用于 python3.8+
<ul>
<li>因为 <code>:=</code> 的使用</li>
<li>now <code>Difficult Rocket</code> will only fit python3.8+
<ul>
<li>because <code>:=</code></li>
</ul>
</li>
</ul>
</li>
<li>现在主程序崩溃时的报告处理方式有了新的方式
<ul>
<li>now main crash report handler have new way to handler crash</li>
</ul>
</li>
<li>现在字体文件夹的名字改为 <code>HarmonyOS_Sans</code>
<ul>
<li>now fonts' folder's name is <code>HarmonyOS_Sans</code></li>
</ul>
</li>
</ul>
<h3 id="add-3"><a class="header" href="#add-3">Add</a></h3>
<ul>
<li><code>Difficult_Rocket.graphics.widgets.Parts</code>
<ul>
<li>have many costume value</li>
</ul>
</li>
<li>now <code>libs/fonts</code> have <code>HarmonyOS_Sans</code> font</li>
<li>handler of <code>on_key_press</code> and <code>on_key_release</code> and <code>on_text</code>
<ul>
<li><code>on_key_press</code><code>on_key_release</code><code>on_text</code> 的处理方式</li>
</ul>
</li>
<li><code>game.config</code> config file</li>
<li><code>lang/en-us.json5</code> now up to date with <code>lang/zh-CN.json5</code></li>
<li><code>translate/Lang.翻译</code> same as <code>Lang.lang</code></li>
<li><code>command/CommandLine</code> to render command line</li>
<li><code>@new_thread</code> now can option if log this thread to <code>crash</code> or not</li>
<li><code>start.cmd</code> witch could debug easier</li>
</ul>
<h3 id="translate"><a class="header" href="#translate">Translate</a></h3>
<ul>
<li>Add
<ul>
<li><code>window</code>
<ul>
<li><code>message.text</code></li>
<li><code>command.text</code></li>
<li><code>text.motion</code></li>
<li><code>text.motion_select</code></li>
<li><code>setup.use_time_ns</code></li>
<li><code>fonts.found</code></li>
<li><code>game.input_stop</code></li>
<li><code>game.command_stop</code></li>
<li><code>game.window_stop</code></li>
<li><code>game.stop_get</code></li>
<li><code>game.stop</code></li>
<li><code>game.end</code></li>
</ul>
</li>
<li><code>client</code>
<ul>
<li><code>setup.use_time_ns</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="command-1"><a class="header" href="#command-1">Command</a></h3>
<ul>
<li>now you can press <code>t</code> to call out a message window
<ul>
<li>or press <code>/</code> to open command line</li>
<li>not done</li>
<li><del>useless until now</del></li>
</ul>
</li>
<li>new command
<ul>
<li><code>/min_fps</code>
<ul>
<li>get min fps in 5 second</li>
</ul>
</li>
<li><code>/max_fps</code>
<ul>
<li>get max fps in 5 second</li>
</ul>
</li>
<li><code>/stop</code>
<ul>
<li>stop the game</li>
</ul>
</li>
<li><code>/default</code>
<ul>
<li>switch window size to default size</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="20210928-v-052"><a class="header" href="#20210928-v-052">20210928 V 0.5.2</a></h2>
<h3 id="change-3"><a class="header" href="#change-3">Change</a></h3>
<ul>
<li>now bin folder use the name <code>Difficult_Rocket</code></li>
<li>now test files no longer have <code>_test_</code> prefix</li>
<li>now will always use local <code>pyglet</code>
<ul>
<li>may change later</li>
</ul>
</li>
<li>fitting <code>pypy3.10</code> (well······ not success (because OpenGL, blame it))</li>
<li>now <code>crash-report</code> have more information</li>
<li>now when pressed, the sprite will rotate randomly</li>
<li>now <code>pyglet.app.run()</code> use multiprocess</li>
<li>now will always use <code>libs/</code> lib when using <code>pyglet</code> or <code>json5</code></li>
<li>now <code>tools.config()</code> is <code>tools.load_file()</code></li>
<li>now <code>lang</code> file have <code>server``client</code> and <code>window</code></li>
</ul>
<h3 id="add-4"><a class="header" href="#add-4">Add</a></h3>
<ul>
<li><del>mods support will be done in 1.0.0</del>
<ul>
<li>just maybe</li>
</ul>
</li>
<li>now you can use <code>DEBUGGING</code> to test or check game run stats
<ul>
<li>when <code>True</code> it will always make a crash report</li>
</ul>
</li>
<li>now <code>Difficult_Rocket.api.translate.Lang</code> can be used to auto translate text in <code>configs/lang/xxx.json5</code>
<ul>
<li>you can use <code>translate.tr[xxx]</code> to use translated info</li>
<li>and use <code>.format</code> to format info's <code>{}</code></li>
<li>if translate is not found, <code>Lang</code> will try to find translate in default language translate</li>
<li>(witch was <code>zh-CN</code>)</li>
</ul>
</li>
<li><code>crash</code> now have more information about multiprocess</li>
<li>add some unused read_input in <code>client</code></li>
<li>now when <code>logs/</code> is not found logger will info <code>logger.mkdir</code></li>
</ul>
<h3 id="debug"><a class="header" href="#debug">DEBUG</a></h3>
<ul>
<li>now version on the window will be <code>0.5.2</code></li>
</ul>
<h3 id="delete"><a class="header" href="#delete">Delete</a></h3>
<ul>
<li>now <code>client.Client</code> and <code>server.Server</code> only use <code>net_mode</code> option</li>
<li><code>api.new_thread</code> have no more extra line of testing</li>
<li><code>configs/view.json5</code> now removed</li>
</ul>
<h3 id="translate-1"><a class="header" href="#translate-1">Translate</a></h3>
<ul>
<li>add <code>mouse.release</code> and <code>language</code> to en-us</li>
<li>add <code>language</code> to <code>zh-CN</code></li>
<li>add <code>tr.lang(xx, xx)</code> that can solve error on getting item from lang file
<ul>
<li><code>tr[xxx]</code> can also use but won't solve error when item not found</li>
<li>so best use <code>tr.lang(xx, xx)</code></li>
</ul>
</li>
</ul>
<h2 id="20210902-v-051"><a class="header" href="#20210902-v-051">20210902 V 0.5.1</a></h2>
<h3 id="change-4"><a class="header" href="#change-4">Change</a></h3>
<ul>
<li>crash report's format</li>
<li>crash report now use multithreading!</li>
<li>some info in <code>client</code></li>
<li><code>tools/format_bool</code> now use more clever way to format</li>
</ul>
<h3 id="add-5"><a class="header" href="#add-5">Add</a></h3>
<ul>
<li><code>on_resize(self, width, height):</code> in <code>client</code></li>
<li>auto crash report in <code>bin/crash/create_crash_report</code></li>
<li><code>bin/api/Exp.py</code> some Exception</li>
<li><code>bin/api/translate</code> to create a <code>translate</code> class that can reload language</li>
</ul>
<h2 id="20210823-v-050"><a class="header" href="#20210823-v-050">20210823 V 0.5.0</a></h2>
<h3 id="change-5"><a class="header" href="#change-5">Change</a></h3>
<ul>
<li>many <code>sys.path.append()</code> and</li>
<li><code>try: import xxx except: from bin import xxx</code> has been removed</li>
<li>and now IDE won't blame you when you open the file anymore!(LOL)</li>
<li><code>Server</code> now use Dev to delivery message between thread(will be done in 0.6.0)</li>
<li>test files now use <code>_test_*.py</code> for names</li>
</ul>
<h3 id="add-6"><a class="header" href="#add-6">Add</a></h3>
<ul>
<li><code>crash.py</code> to handle and create crash report (not done)</li>
<li><code>DragSprite</code> (maybe will add in future pyglet update PR has been published)</li>
</ul>
<h3 id="delete-1"><a class="header" href="#delete-1">Delete</a></h3>
<ul>
<li><code>name_hanlder</code> in <code>configs.py</code></li>
</ul>
<h2 id="20210811-v-046"><a class="header" href="#20210811-v-046">20210811 V 0.4.6</a></h2>
<h3 id="debug-1"><a class="header" href="#debug-1">DEBUG</a></h3>
<ul>
<li>game window doesn't use input <code>(*args, **kwargs)</code> to set up</li>
</ul>
<h3 id="change-6"><a class="header" href="#change-6">Change</a></h3>
<ul>
<li>language type <code>zh-cn</code> -&gt; <code>zh-CN</code></li>
<li>game window config now use <code>configs/main.config</code> to config</li>
<li><code>on_mouse_click</code> function's debug message now use <code>self.lang</code> to debug message (witch is multi-language)</li>
<li>server client and main now use <code>logging.getLogger()</code></li>
</ul>
<h3 id="add-7"><a class="header" href="#add-7">Add</a></h3>
<ul>
<li><code>[window_default]</code> in <code>configs/main.config</code></li>
<li>server and client now will output <code>PID</code> and <code>PPID</code> info as <code>INFO</code></li>
<li><code>client</code> now change to <code>ClientWindow</code></li>
</ul>
<h3 id="delete-2"><a class="header" href="#delete-2">Delete</a></h3>
<ul>
<li>all game window render has been deleted
<ul>
<li>will be rewritten in 0.5.0</li>
</ul>
</li>
<li>delete some useless code</li>
<li>delete some useless file</li>
</ul>
<h2 id="20210723-v-045"><a class="header" href="#20210723-v-045">20210723 V 0.4.5</a></h2>
<h3 id="debug-2"><a class="header" href="#debug-2">DEBUG</a></h3>
<ul>
<li><code>new_thread.py</code> link of stackoverflow have an extra 'find' in the middle REMOVED</li>
</ul>
<h3 id="add-8"><a class="header" href="#add-8">Add</a></h3>
<ul>
<li><code>new_thread.py</code> now can use @new_thread to get a threaded fun</li>
</ul>
<h3 id="change-7"><a class="header" href="#change-7">Change</a></h3>
<ul>
<li><code>README.md</code> and <code>README-cn.md</code> change URL to file path</li>
<li><code>README.md</code> and <code>README-cn.md</code> some label style change</li>
<li>Pre-installed <code>pyglet</code> upgrade from <code>1.5.16</code> -&gt; <code>1.5.18</code></li>
<li>Pre-installed <code>json5</code> upgrade from <code>0.9.5</code> -&gt; <code>0.9.6</code></li>
</ul>
<h2 id="20210708-v-044"><a class="header" href="#20210708-v-044">20210708 V 0.4.4</a></h2>
<h3 id="ps"><a class="header" href="#ps">PS</a></h3>
<ul>
<li>Nice day everyone!</li>
<li>I have finish my final exam on grade 8.</li>
<li>Will soon reach grade 9, so update will be late very much.</li>
</ul>
<h3 id="change-8"><a class="header" href="#change-8">Change</a></h3>
<ul>
<li>function <code>tools.config()</code> way of raise error change <code>tools.report_file_error()</code></li>
<li>function <code>tools.cb()</code> change name to <code>tools.format_bool()</code></li>
<li>config.py clear some useless import class</li>
<li>changing configfile to main.config *doing</li>
</ul>
<h3 id="test-change"><a class="header" href="#test-change">Test change</a></h3>
<ul>
<li><code>test_config_file.py</code></li>
<li><code>test_for_speed.py</code></li>
<li><code>test_logging_conf.py</code></li>
<li><code>test_speed_of_sprite.py</code></li>
</ul>
<h2 id="20210626-v-043"><a class="header" href="#20210626-v-043">2021/06/26 V 0.4.3</a></h2>
<h3 id="debug-3"><a class="header" href="#debug-3">DEBUG</a></h3>
<ul>
<li>some name_format bug</li>
</ul>
<h3 id="change-9"><a class="header" href="#change-9">Change</a></h3>
<ul>
<li>doing: change render pip line ('m really doing)</li>
<li>default FPS from 120 -&gt; 60</li>
</ul>
<h3 id="add-9"><a class="header" href="#add-9">Add</a></h3>
<ul>
<li>add performance_test folder</li>
<li>add some performances test</li>
</ul>
<h2 id="20210524-v-042"><a class="header" href="#20210524-v-042">2021/05/24 V 0.4.2</a></h2>
<h3 id="debug-4"><a class="header" href="#debug-4">DEBUG</a></h3>
<ul>
<li>using python version 3.8.9 still report <code>best3.8+</code>(lang name)(actually is debugging)</li>
</ul>
<h3 id="change-10"><a class="header" href="#change-10">Change</a></h3>
<ul>
<li>change back how configs.py/name_format work(replace str) fix some issue</li>
<li>doing remake for config sys (lazy yes!)</li>
<li>clear bin/pyglet (already exits in bin/lib)</li>
</ul>
<h3 id="need-do"><a class="header" href="#need-do">Need Do</a></h3>
<ul>
<li>debug name_format</li>
</ul>
<h2 id="20210417-v-041"><a class="header" href="#20210417-v-041">2021/04/17 V 0.4.1</a></h2>
<p>PS:</p>
<ul>
<li>
<p><code>Va.b.c</code></p>
</li>
<li>
<p>a : Big Version (Big rewrite times) (now at DEMO making)</p>
</li>
<li>
<p>b : Middle Rewrite Times (Yes I've rewritten for 4 times)</p>
</li>
<li>
<p>c : normal updates</p>
</li>
</ul>
<h3 id="debug-5"><a class="header" href="#debug-5">DEBUG</a></h3>
<ul>
<li>solve pre-installed lib can't use</li>
<li>solve pre-installed lib's bug</li>
<li>some other bugs</li>
</ul>
<h3 id="change-11"><a class="header" href="#change-11">Change</a></h3>
<ul>
<li>plan to change config file format to .config (plan to)</li>
<li>reformat all files (including libs)</li>
</ul>
<h2 id="20210409-v-0234"><a class="header" href="#20210409-v-0234">2021/04/09 V 0.2.3/4</a></h2>
<h3 id="add-10"><a class="header" href="#add-10">Add</a></h3>
<ul>
<li>support many things(also forget)</li>
</ul>
<h3 id="change-12"><a class="header" href="#change-12">Change</a></h3>
<ul>
<li><code>tools.name_handler()</code> now use <code>str.format</code> to handler str</li>
<li><code>DR/sys_value</code> folder now move to <code>DR/configs/sys_value</code></li>
</ul>
<h3 id="debug-6"><a class="header" href="#debug-6">DEBUG</a></h3>
<ul>
<li>many <code>tools.name_handler()</code> use bug(cause crashes)</li>
<li><code>{date}</code> can be successful use in <code>tools.name_handler()</code> (if you define the format of date)</li>
<li>log file's filename incorrect (should be <code>xxxx-xx-xx xx-xx-xx DR.log</code> but be <code>{date} DR.log</code>)</li>
</ul>
<h2 id="20210327-v-0221"><a class="header" href="#20210327-v-0221">2021/03/27 V 0.2.2/1</a></h2>
<h3 id="add-11"><a class="header" href="#add-11">Add</a></h3>
<ul>
<li>add local libs
<ul>
<li><code>pyglet 1.5.15</code></li>
<li><code>json5 0.9.5</code></li>
</ul>
</li>
</ul>
<p>PS: now I'm not sure witch lib will be import first</p>
<p>the local lib or the pip libs</p>
<p>So I'll add some other code to make sure that DR will first try to import pip libs</p>
<p>not the local libs (todo)</p>
<h3 id="debug-7"><a class="header" href="#debug-7">DEBUG</a></h3>
<ul>
<li>some bugs(I forget them)</li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="next" href="contributors.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="next" href="contributors.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 402 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 KiB

30
docs/page/book.toml Normal file
View File

@ -0,0 +1,30 @@
[book]
authors = ["shenjack"]
language = "zh-cn"
multilingual = false
src = "src"
title = "Difficult-Rocket-docs"
[build]
build-dir = './docs'
create-missing = false
use-default-preprocessors = true # use the default preprocessors
extra-watch-dirs = [] # directories to watch for triggering builds
[output.html]
input-404 = "404.md"
[output.html.search]
limit-results = 15
[output.html.print]
enable = true # include support for printable output
page-break = true # insert page-break after each chapter
[output.copy-resources]
optional = true
command = 'python output.py'
[rust]
edition = "2021" # the default edition for code blocks

1
docs/page/docs/.nojekyll Normal file
View File

@ -0,0 +1 @@
This file makes sure that Github Pages doesn't process mdBook's output.

208
docs/page/docs/404.html Normal file
View File

@ -0,0 +1,208 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Page not found - Difficult-Rocket-docs</title>
<base href="/">
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="update_logs.html"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="嘿-看啥呢"><a class="header" href="#嘿-看啥呢">嘿 看啥呢</a></h1>
<ul>
<li>
<p>很明显,这里没有你想要的东西</p>
</li>
<li>
<p>404啦</p>
</li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

View File

@ -0,0 +1,78 @@
/*
Based off of the Ayu theme
Original by Dempfi (https://github.com/dempfi/ayu)
*/
.hljs {
display: block;
overflow-x: auto;
background: #191f26;
color: #e6e1cf;
}
.hljs-comment,
.hljs-quote {
color: #5c6773;
font-style: italic;
}
.hljs-variable,
.hljs-template-variable,
.hljs-attribute,
.hljs-attr,
.hljs-regexp,
.hljs-link,
.hljs-selector-id,
.hljs-selector-class {
color: #ff7733;
}
.hljs-number,
.hljs-meta,
.hljs-builtin-name,
.hljs-literal,
.hljs-type,
.hljs-params {
color: #ffee99;
}
.hljs-string,
.hljs-bullet {
color: #b8cc52;
}
.hljs-title,
.hljs-built_in,
.hljs-section {
color: #ffb454;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-symbol {
color: #ff7733;
}
.hljs-name {
color: #36a3d9;
}
.hljs-tag {
color: #00568d;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-addition {
color: #91b362;
}
.hljs-deletion {
color: #d96c75;
}

688
docs/page/docs/book.js Normal file
View File

@ -0,0 +1,688 @@
"use strict";
// Fix back button cache problem
window.onunload = function () { };
// Global variable, shared between modules
function playground_text(playground, hidden = true) {
let code_block = playground.querySelector("code");
if (window.ace && code_block.classList.contains("editable")) {
let editor = window.ace.edit(code_block);
return editor.getValue();
} else if (hidden) {
return code_block.textContent;
} else {
return code_block.innerText;
}
}
(function codeSnippets() {
function fetch_with_timeout(url, options, timeout = 6000) {
return Promise.race([
fetch(url, options),
new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout))
]);
}
var playgrounds = Array.from(document.querySelectorAll(".playground"));
if (playgrounds.length > 0) {
fetch_with_timeout("https://play.rust-lang.org/meta/crates", {
headers: {
'Content-Type': "application/json",
},
method: 'POST',
mode: 'cors',
})
.then(response => response.json())
.then(response => {
// get list of crates available in the rust playground
let playground_crates = response.crates.map(item => item["id"]);
playgrounds.forEach(block => handle_crate_list_update(block, playground_crates));
});
}
function handle_crate_list_update(playground_block, playground_crates) {
// update the play buttons after receiving the response
update_play_button(playground_block, playground_crates);
// and install on change listener to dynamically update ACE editors
if (window.ace) {
let code_block = playground_block.querySelector("code");
if (code_block.classList.contains("editable")) {
let editor = window.ace.edit(code_block);
editor.addEventListener("change", function (e) {
update_play_button(playground_block, playground_crates);
});
// add Ctrl-Enter command to execute rust code
editor.commands.addCommand({
name: "run",
bindKey: {
win: "Ctrl-Enter",
mac: "Ctrl-Enter"
},
exec: _editor => run_rust_code(playground_block)
});
}
}
}
// updates the visibility of play button based on `no_run` class and
// used crates vs ones available on http://play.rust-lang.org
function update_play_button(pre_block, playground_crates) {
var play_button = pre_block.querySelector(".play-button");
// skip if code is `no_run`
if (pre_block.querySelector('code').classList.contains("no_run")) {
play_button.classList.add("hidden");
return;
}
// get list of `extern crate`'s from snippet
var txt = playground_text(pre_block);
var re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g;
var snippet_crates = [];
var item;
while (item = re.exec(txt)) {
snippet_crates.push(item[1]);
}
// check if all used crates are available on play.rust-lang.org
var all_available = snippet_crates.every(function (elem) {
return playground_crates.indexOf(elem) > -1;
});
if (all_available) {
play_button.classList.remove("hidden");
} else {
play_button.classList.add("hidden");
}
}
function run_rust_code(code_block) {
var result_block = code_block.querySelector(".result");
if (!result_block) {
result_block = document.createElement('code');
result_block.className = 'result hljs language-bash';
code_block.append(result_block);
}
let text = playground_text(code_block);
let classes = code_block.querySelector('code').classList;
let edition = "2015";
if(classes.contains("edition2018")) {
edition = "2018";
} else if(classes.contains("edition2021")) {
edition = "2021";
}
var params = {
version: "stable",
optimize: "0",
code: text,
edition: edition
};
if (text.indexOf("#![feature") !== -1) {
params.version = "nightly";
}
result_block.innerText = "Running...";
fetch_with_timeout("https://play.rust-lang.org/evaluate.json", {
headers: {
'Content-Type': "application/json",
},
method: 'POST',
mode: 'cors',
body: JSON.stringify(params)
})
.then(response => response.json())
.then(response => {
if (response.result.trim() === '') {
result_block.innerText = "No output";
result_block.classList.add("result-no-output");
} else {
result_block.innerText = response.result;
result_block.classList.remove("result-no-output");
}
})
.catch(error => result_block.innerText = "Playground Communication: " + error.message);
}
// Syntax highlighting Configuration
hljs.configure({
tabReplace: ' ', // 4 spaces
languages: [], // Languages used for auto-detection
});
let code_nodes = Array
.from(document.querySelectorAll('code'))
// Don't highlight `inline code` blocks in headers.
.filter(function (node) {return !node.parentElement.classList.contains("header"); });
if (window.ace) {
// language-rust class needs to be removed for editable
// blocks or highlightjs will capture events
code_nodes
.filter(function (node) {return node.classList.contains("editable"); })
.forEach(function (block) { block.classList.remove('language-rust'); });
code_nodes
.filter(function (node) {return !node.classList.contains("editable"); })
.forEach(function (block) { hljs.highlightBlock(block); });
} else {
code_nodes.forEach(function (block) { hljs.highlightBlock(block); });
}
// Adding the hljs class gives code blocks the color css
// even if highlighting doesn't apply
code_nodes.forEach(function (block) { block.classList.add('hljs'); });
Array.from(document.querySelectorAll("code.language-rust")).forEach(function (block) {
var lines = Array.from(block.querySelectorAll('.boring'));
// If no lines were hidden, return
if (!lines.length) { return; }
block.classList.add("hide-boring");
var buttons = document.createElement('div');
buttons.className = 'buttons';
buttons.innerHTML = "<button class=\"fa fa-eye\" title=\"Show hidden lines\" aria-label=\"Show hidden lines\"></button>";
// add expand button
var pre_block = block.parentNode;
pre_block.insertBefore(buttons, pre_block.firstChild);
pre_block.querySelector('.buttons').addEventListener('click', function (e) {
if (e.target.classList.contains('fa-eye')) {
e.target.classList.remove('fa-eye');
e.target.classList.add('fa-eye-slash');
e.target.title = 'Hide lines';
e.target.setAttribute('aria-label', e.target.title);
block.classList.remove('hide-boring');
} else if (e.target.classList.contains('fa-eye-slash')) {
e.target.classList.remove('fa-eye-slash');
e.target.classList.add('fa-eye');
e.target.title = 'Show hidden lines';
e.target.setAttribute('aria-label', e.target.title);
block.classList.add('hide-boring');
}
});
});
if (window.playground_copyable) {
Array.from(document.querySelectorAll('pre code')).forEach(function (block) {
var pre_block = block.parentNode;
if (!pre_block.classList.contains('playground')) {
var buttons = pre_block.querySelector(".buttons");
if (!buttons) {
buttons = document.createElement('div');
buttons.className = 'buttons';
pre_block.insertBefore(buttons, pre_block.firstChild);
}
var clipButton = document.createElement('button');
clipButton.className = 'fa fa-copy clip-button';
clipButton.title = 'Copy to clipboard';
clipButton.setAttribute('aria-label', clipButton.title);
clipButton.innerHTML = '<i class=\"tooltiptext\"></i>';
buttons.insertBefore(clipButton, buttons.firstChild);
}
});
}
// Process playground code blocks
Array.from(document.querySelectorAll(".playground")).forEach(function (pre_block) {
// Add play button
var buttons = pre_block.querySelector(".buttons");
if (!buttons) {
buttons = document.createElement('div');
buttons.className = 'buttons';
pre_block.insertBefore(buttons, pre_block.firstChild);
}
var runCodeButton = document.createElement('button');
runCodeButton.className = 'fa fa-play play-button';
runCodeButton.hidden = true;
runCodeButton.title = 'Run this code';
runCodeButton.setAttribute('aria-label', runCodeButton.title);
buttons.insertBefore(runCodeButton, buttons.firstChild);
runCodeButton.addEventListener('click', function (e) {
run_rust_code(pre_block);
});
if (window.playground_copyable) {
var copyCodeClipboardButton = document.createElement('button');
copyCodeClipboardButton.className = 'fa fa-copy clip-button';
copyCodeClipboardButton.innerHTML = '<i class="tooltiptext"></i>';
copyCodeClipboardButton.title = 'Copy to clipboard';
copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title);
buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild);
}
let code_block = pre_block.querySelector("code");
if (window.ace && code_block.classList.contains("editable")) {
var undoChangesButton = document.createElement('button');
undoChangesButton.className = 'fa fa-history reset-button';
undoChangesButton.title = 'Undo changes';
undoChangesButton.setAttribute('aria-label', undoChangesButton.title);
buttons.insertBefore(undoChangesButton, buttons.firstChild);
undoChangesButton.addEventListener('click', function () {
let editor = window.ace.edit(code_block);
editor.setValue(editor.originalCode);
editor.clearSelection();
});
}
});
})();
(function themes() {
var html = document.querySelector('html');
var themeToggleButton = document.getElementById('theme-toggle');
var themePopup = document.getElementById('theme-list');
var themeColorMetaTag = document.querySelector('meta[name="theme-color"]');
var stylesheets = {
ayuHighlight: document.querySelector("[href$='ayu-highlight.css']"),
tomorrowNight: document.querySelector("[href$='tomorrow-night.css']"),
highlight: document.querySelector("[href$='highlight.css']"),
};
function showThemes() {
themePopup.style.display = 'block';
themeToggleButton.setAttribute('aria-expanded', true);
themePopup.querySelector("button#" + get_theme()).focus();
}
function updateThemeSelected() {
themePopup.querySelectorAll('.theme-selected').forEach(function (el) {
el.classList.remove('theme-selected');
});
themePopup.querySelector("button#" + get_theme()).classList.add('theme-selected');
}
function hideThemes() {
themePopup.style.display = 'none';
themeToggleButton.setAttribute('aria-expanded', false);
themeToggleButton.focus();
}
function get_theme() {
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch (e) { }
if (theme === null || theme === undefined) {
return default_theme;
} else {
return theme;
}
}
function set_theme(theme, store = true) {
let ace_theme;
if (theme == 'coal' || theme == 'navy') {
stylesheets.ayuHighlight.disabled = true;
stylesheets.tomorrowNight.disabled = false;
stylesheets.highlight.disabled = true;
ace_theme = "ace/theme/tomorrow_night";
} else if (theme == 'ayu') {
stylesheets.ayuHighlight.disabled = false;
stylesheets.tomorrowNight.disabled = true;
stylesheets.highlight.disabled = true;
ace_theme = "ace/theme/tomorrow_night";
} else {
stylesheets.ayuHighlight.disabled = true;
stylesheets.tomorrowNight.disabled = true;
stylesheets.highlight.disabled = false;
ace_theme = "ace/theme/dawn";
}
setTimeout(function () {
themeColorMetaTag.content = getComputedStyle(document.body).backgroundColor;
}, 1);
if (window.ace && window.editors) {
window.editors.forEach(function (editor) {
editor.setTheme(ace_theme);
});
}
var previousTheme = get_theme();
if (store) {
try { localStorage.setItem('mdbook-theme', theme); } catch (e) { }
}
html.classList.remove(previousTheme);
html.classList.add(theme);
updateThemeSelected();
}
// Set theme
var theme = get_theme();
set_theme(theme, false);
themeToggleButton.addEventListener('click', function () {
if (themePopup.style.display === 'block') {
hideThemes();
} else {
showThemes();
}
});
themePopup.addEventListener('click', function (e) {
var theme;
if (e.target.className === "theme") {
theme = e.target.id;
} else if (e.target.parentElement.className === "theme") {
theme = e.target.parentElement.id;
} else {
return;
}
set_theme(theme);
});
themePopup.addEventListener('focusout', function(e) {
// e.relatedTarget is null in Safari and Firefox on macOS (see workaround below)
if (!!e.relatedTarget && !themeToggleButton.contains(e.relatedTarget) && !themePopup.contains(e.relatedTarget)) {
hideThemes();
}
});
// Should not be needed, but it works around an issue on macOS & iOS: https://github.com/rust-lang/mdBook/issues/628
document.addEventListener('click', function(e) {
if (themePopup.style.display === 'block' && !themeToggleButton.contains(e.target) && !themePopup.contains(e.target)) {
hideThemes();
}
});
document.addEventListener('keydown', function (e) {
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; }
if (!themePopup.contains(e.target)) { return; }
switch (e.key) {
case 'Escape':
e.preventDefault();
hideThemes();
break;
case 'ArrowUp':
e.preventDefault();
var li = document.activeElement.parentElement;
if (li && li.previousElementSibling) {
li.previousElementSibling.querySelector('button').focus();
}
break;
case 'ArrowDown':
e.preventDefault();
var li = document.activeElement.parentElement;
if (li && li.nextElementSibling) {
li.nextElementSibling.querySelector('button').focus();
}
break;
case 'Home':
e.preventDefault();
themePopup.querySelector('li:first-child button').focus();
break;
case 'End':
e.preventDefault();
themePopup.querySelector('li:last-child button').focus();
break;
}
});
})();
(function sidebar() {
var html = document.querySelector("html");
var sidebar = document.getElementById("sidebar");
var sidebarLinks = document.querySelectorAll('#sidebar a');
var sidebarToggleButton = document.getElementById("sidebar-toggle");
var sidebarResizeHandle = document.getElementById("sidebar-resize-handle");
var firstContact = null;
function showSidebar() {
html.classList.remove('sidebar-hidden')
html.classList.add('sidebar-visible');
Array.from(sidebarLinks).forEach(function (link) {
link.setAttribute('tabIndex', 0);
});
sidebarToggleButton.setAttribute('aria-expanded', true);
sidebar.setAttribute('aria-hidden', false);
try { localStorage.setItem('mdbook-sidebar', 'visible'); } catch (e) { }
}
var sidebarAnchorToggles = document.querySelectorAll('#sidebar a.toggle');
function toggleSection(ev) {
ev.currentTarget.parentElement.classList.toggle('expanded');
}
Array.from(sidebarAnchorToggles).forEach(function (el) {
el.addEventListener('click', toggleSection);
});
function hideSidebar() {
html.classList.remove('sidebar-visible')
html.classList.add('sidebar-hidden');
Array.from(sidebarLinks).forEach(function (link) {
link.setAttribute('tabIndex', -1);
});
sidebarToggleButton.setAttribute('aria-expanded', false);
sidebar.setAttribute('aria-hidden', true);
try { localStorage.setItem('mdbook-sidebar', 'hidden'); } catch (e) { }
}
// Toggle sidebar
sidebarToggleButton.addEventListener('click', function sidebarToggle() {
if (html.classList.contains("sidebar-hidden")) {
var current_width = parseInt(
document.documentElement.style.getPropertyValue('--sidebar-width'), 10);
if (current_width < 150) {
document.documentElement.style.setProperty('--sidebar-width', '150px');
}
showSidebar();
} else if (html.classList.contains("sidebar-visible")) {
hideSidebar();
} else {
if (getComputedStyle(sidebar)['transform'] === 'none') {
hideSidebar();
} else {
showSidebar();
}
}
});
sidebarResizeHandle.addEventListener('mousedown', initResize, false);
function initResize(e) {
window.addEventListener('mousemove', resize, false);
window.addEventListener('mouseup', stopResize, false);
html.classList.add('sidebar-resizing');
}
function resize(e) {
var pos = (e.clientX - sidebar.offsetLeft);
if (pos < 20) {
hideSidebar();
} else {
if (html.classList.contains("sidebar-hidden")) {
showSidebar();
}
pos = Math.min(pos, window.innerWidth - 100);
document.documentElement.style.setProperty('--sidebar-width', pos + 'px');
}
}
//on mouseup remove windows functions mousemove & mouseup
function stopResize(e) {
html.classList.remove('sidebar-resizing');
window.removeEventListener('mousemove', resize, false);
window.removeEventListener('mouseup', stopResize, false);
}
document.addEventListener('touchstart', function (e) {
firstContact = {
x: e.touches[0].clientX,
time: Date.now()
};
}, { passive: true });
document.addEventListener('touchmove', function (e) {
if (!firstContact)
return;
var curX = e.touches[0].clientX;
var xDiff = curX - firstContact.x,
tDiff = Date.now() - firstContact.time;
if (tDiff < 250 && Math.abs(xDiff) >= 150) {
if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300))
showSidebar();
else if (xDiff < 0 && curX < 300)
hideSidebar();
firstContact = null;
}
}, { passive: true });
// Scroll sidebar to current active section
var activeSection = document.getElementById("sidebar").querySelector(".active");
if (activeSection) {
// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
activeSection.scrollIntoView({ block: 'center' });
}
})();
(function chapterNavigation() {
document.addEventListener('keydown', function (e) {
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; }
if (window.search && window.search.hasFocus()) { return; }
switch (e.key) {
case 'ArrowRight':
e.preventDefault();
var nextButton = document.querySelector('.nav-chapters.next');
if (nextButton) {
window.location.href = nextButton.href;
}
break;
case 'ArrowLeft':
e.preventDefault();
var previousButton = document.querySelector('.nav-chapters.previous');
if (previousButton) {
window.location.href = previousButton.href;
}
break;
}
});
})();
(function clipboard() {
var clipButtons = document.querySelectorAll('.clip-button');
function hideTooltip(elem) {
elem.firstChild.innerText = "";
elem.className = 'fa fa-copy clip-button';
}
function showTooltip(elem, msg) {
elem.firstChild.innerText = msg;
elem.className = 'fa fa-copy tooltipped';
}
var clipboardSnippets = new ClipboardJS('.clip-button', {
text: function (trigger) {
hideTooltip(trigger);
let playground = trigger.closest("pre");
return playground_text(playground, false);
}
});
Array.from(clipButtons).forEach(function (clipButton) {
clipButton.addEventListener('mouseout', function (e) {
hideTooltip(e.currentTarget);
});
});
clipboardSnippets.on('success', function (e) {
e.clearSelection();
showTooltip(e.trigger, "Copied!");
});
clipboardSnippets.on('error', function (e) {
showTooltip(e.trigger, "Clipboard error!");
});
})();
(function scrollToTop () {
var menuTitle = document.querySelector('.menu-title');
menuTitle.addEventListener('click', function () {
document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' });
});
})();
(function controllMenu() {
var menu = document.getElementById('menu-bar');
(function controllPosition() {
var scrollTop = document.scrollingElement.scrollTop;
var prevScrollTop = scrollTop;
var minMenuY = -menu.clientHeight - 50;
// When the script loads, the page can be at any scroll (e.g. if you reforesh it).
menu.style.top = scrollTop + 'px';
// Same as parseInt(menu.style.top.slice(0, -2), but faster
var topCache = menu.style.top.slice(0, -2);
menu.classList.remove('sticky');
var stickyCache = false; // Same as menu.classList.contains('sticky'), but faster
document.addEventListener('scroll', function () {
scrollTop = Math.max(document.scrollingElement.scrollTop, 0);
// `null` means that it doesn't need to be updated
var nextSticky = null;
var nextTop = null;
var scrollDown = scrollTop > prevScrollTop;
var menuPosAbsoluteY = topCache - scrollTop;
if (scrollDown) {
nextSticky = false;
if (menuPosAbsoluteY > 0) {
nextTop = prevScrollTop;
}
} else {
if (menuPosAbsoluteY > 0) {
nextSticky = true;
} else if (menuPosAbsoluteY < minMenuY) {
nextTop = prevScrollTop + minMenuY;
}
}
if (nextSticky === true && stickyCache === false) {
menu.classList.add('sticky');
stickyCache = true;
} else if (nextSticky === false && stickyCache === true) {
menu.classList.remove('sticky');
stickyCache = false;
}
if (nextTop !== null) {
menu.style.top = nextTop + 'px';
topCache = nextTop;
}
prevScrollTop = scrollTop;
}, { passive: true });
})();
(function controllBorder() {
menu.classList.remove('bordered');
document.addEventListener('scroll', function () {
if (menu.offsetTop === 0) {
menu.classList.remove('bordered');
} else {
menu.classList.add('bordered');
}
}, { passive: true });
})();
})();

7
docs/page/docs/clipboard.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,212 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>contributors - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="update_logs.html"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="contributors.html" class="active"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="如何帮助-dr-开发"><a class="header" href="#如何帮助-dr-开发">如何帮助 DR 开发</a></h1>
<p>aaaa</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="update_logs.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="rua!.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="update_logs.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="rua!.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

View File

@ -0,0 +1,538 @@
/* CSS for UI elements (a.k.a. chrome) */
@import 'variables.css';
::-webkit-scrollbar {
background: var(--bg);
}
::-webkit-scrollbar-thumb {
background: var(--scrollbar);
}
html {
scrollbar-color: var(--scrollbar) var(--bg);
}
#searchresults a,
.content a:link,
a:visited,
a > .hljs {
color: var(--links);
}
/* Menu Bar */
#menu-bar,
#menu-bar-hover-placeholder {
z-index: 101;
margin: auto calc(0px - var(--page-padding));
}
#menu-bar {
position: relative;
display: flex;
flex-wrap: wrap;
background-color: var(--bg);
border-bottom-color: var(--bg);
border-bottom-width: 1px;
border-bottom-style: solid;
}
#menu-bar.sticky,
.js #menu-bar-hover-placeholder:hover + #menu-bar,
.js #menu-bar:hover,
.js.sidebar-visible #menu-bar {
position: -webkit-sticky;
position: sticky;
top: 0 !important;
}
#menu-bar-hover-placeholder {
position: sticky;
position: -webkit-sticky;
top: 0;
height: var(--menu-bar-height);
}
#menu-bar.bordered {
border-bottom-color: var(--table-border-color);
}
#menu-bar i, #menu-bar .icon-button {
position: relative;
padding: 0 8px;
z-index: 10;
line-height: var(--menu-bar-height);
cursor: pointer;
transition: color 0.5s;
}
@media only screen and (max-width: 420px) {
#menu-bar i, #menu-bar .icon-button {
padding: 0 5px;
}
}
.icon-button {
border: none;
background: none;
padding: 0;
color: inherit;
}
.icon-button i {
margin: 0;
}
.right-buttons {
margin: 0 15px;
}
.right-buttons a {
text-decoration: none;
}
.left-buttons {
display: flex;
margin: 0 5px;
}
.no-js .left-buttons {
display: none;
}
.menu-title {
display: inline-block;
font-weight: 200;
font-size: 2.4rem;
line-height: var(--menu-bar-height);
text-align: center;
margin: 0;
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.js .menu-title {
cursor: pointer;
}
.menu-bar,
.menu-bar:visited,
.nav-chapters,
.nav-chapters:visited,
.mobile-nav-chapters,
.mobile-nav-chapters:visited,
.menu-bar .icon-button,
.menu-bar a i {
color: var(--icons);
}
.menu-bar i:hover,
.menu-bar .icon-button:hover,
.nav-chapters:hover,
.mobile-nav-chapters i:hover {
color: var(--icons-hover);
}
/* Nav Icons */
.nav-chapters {
font-size: 2.5em;
text-align: center;
text-decoration: none;
position: fixed;
top: 0;
bottom: 0;
margin: 0;
max-width: 150px;
min-width: 90px;
display: flex;
justify-content: center;
align-content: center;
flex-direction: column;
transition: color 0.5s, background-color 0.5s;
}
.nav-chapters:hover {
text-decoration: none;
background-color: var(--theme-hover);
transition: background-color 0.15s, color 0.15s;
}
.nav-wrapper {
margin-top: 50px;
display: none;
}
.mobile-nav-chapters {
font-size: 2.5em;
text-align: center;
text-decoration: none;
width: 90px;
border-radius: 5px;
background-color: var(--sidebar-bg);
}
.previous {
float: left;
}
.next {
float: right;
right: var(--page-padding);
}
@media only screen and (max-width: 1080px) {
.nav-wide-wrapper { display: none; }
.nav-wrapper { display: block; }
}
@media only screen and (max-width: 1380px) {
.sidebar-visible .nav-wide-wrapper { display: none; }
.sidebar-visible .nav-wrapper { display: block; }
}
/* Inline code */
:not(pre) > .hljs {
display: inline;
padding: 0.1em 0.3em;
border-radius: 3px;
}
:not(pre):not(a) > .hljs {
color: var(--inline-code-color);
overflow-x: initial;
}
a:hover > .hljs {
text-decoration: underline;
}
pre {
position: relative;
}
pre > .buttons {
position: absolute;
z-index: 100;
right: 0px;
top: 2px;
margin: 0px;
padding: 2px 0px;
color: var(--sidebar-fg);
cursor: pointer;
visibility: hidden;
opacity: 0;
transition: visibility 0.1s linear, opacity 0.1s linear;
}
pre:hover > .buttons {
visibility: visible;
opacity: 1
}
pre > .buttons :hover {
color: var(--sidebar-active);
border-color: var(--icons-hover);
background-color: var(--theme-hover);
}
pre > .buttons i {
margin-left: 8px;
}
pre > .buttons button {
cursor: inherit;
margin: 0px 5px;
padding: 3px 5px;
font-size: 14px;
border-style: solid;
border-width: 1px;
border-radius: 4px;
border-color: var(--icons);
background-color: var(--theme-popup-bg);
transition: 100ms;
transition-property: color,border-color,background-color;
color: var(--icons);
}
@media (pointer: coarse) {
pre > .buttons button {
/* On mobile, make it easier to tap buttons. */
padding: 0.3rem 1rem;
}
}
pre > code {
padding: 1rem;
}
/* FIXME: ACE editors overlap their buttons because ACE does absolute
positioning within the code block which breaks padding. The only solution I
can think of is to move the padding to the outer pre tag (or insert a div
wrapper), but that would require fixing a whole bunch of CSS rules.
*/
.hljs.ace_editor {
padding: 0rem 0rem;
}
pre > .result {
margin-top: 10px;
}
/* Search */
#searchresults a {
text-decoration: none;
}
mark {
border-radius: 2px;
padding: 0 3px 1px 3px;
margin: 0 -3px -1px -3px;
background-color: var(--search-mark-bg);
transition: background-color 300ms linear;
cursor: pointer;
}
mark.fade-out {
background-color: rgba(0,0,0,0) !important;
cursor: auto;
}
.searchbar-outer {
margin-left: auto;
margin-right: auto;
max-width: var(--content-max-width);
}
#searchbar {
width: 100%;
margin: 5px auto 0px auto;
padding: 10px 16px;
transition: box-shadow 300ms ease-in-out;
border: 1px solid var(--searchbar-border-color);
border-radius: 3px;
background-color: var(--searchbar-bg);
color: var(--searchbar-fg);
}
#searchbar:focus,
#searchbar.active {
box-shadow: 0 0 3px var(--searchbar-shadow-color);
}
.searchresults-header {
font-weight: bold;
font-size: 1em;
padding: 18px 0 0 5px;
color: var(--searchresults-header-fg);
}
.searchresults-outer {
margin-left: auto;
margin-right: auto;
max-width: var(--content-max-width);
border-bottom: 1px dashed var(--searchresults-border-color);
}
ul#searchresults {
list-style: none;
padding-left: 20px;
}
ul#searchresults li {
margin: 10px 0px;
padding: 2px;
border-radius: 2px;
}
ul#searchresults li.focus {
background-color: var(--searchresults-li-bg);
}
ul#searchresults span.teaser {
display: block;
clear: both;
margin: 5px 0 0 20px;
font-size: 0.8em;
}
ul#searchresults span.teaser em {
font-weight: bold;
font-style: normal;
}
/* Sidebar */
.sidebar {
position: fixed;
left: 0;
top: 0;
bottom: 0;
width: var(--sidebar-width);
font-size: 0.875em;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
overscroll-behavior-y: contain;
background-color: var(--sidebar-bg);
color: var(--sidebar-fg);
}
.sidebar-resizing {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
.js:not(.sidebar-resizing) .sidebar {
transition: transform 0.3s; /* Animation: slide away */
}
.sidebar code {
line-height: 2em;
}
.sidebar .sidebar-scrollbox {
overflow-y: auto;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 10px 10px;
}
.sidebar .sidebar-resize-handle {
position: absolute;
cursor: col-resize;
width: 0;
right: 0;
top: 0;
bottom: 0;
}
.js .sidebar .sidebar-resize-handle {
cursor: col-resize;
width: 5px;
}
.sidebar-hidden .sidebar {
transform: translateX(calc(0px - var(--sidebar-width)));
}
.sidebar::-webkit-scrollbar {
background: var(--sidebar-bg);
}
.sidebar::-webkit-scrollbar-thumb {
background: var(--scrollbar);
}
.sidebar-visible .page-wrapper {
transform: translateX(var(--sidebar-width));
}
@media only screen and (min-width: 620px) {
.sidebar-visible .page-wrapper {
transform: none;
margin-left: var(--sidebar-width);
}
}
.chapter {
list-style: none outside none;
padding-left: 0;
line-height: 2.2em;
}
.chapter ol {
width: 100%;
}
.chapter li {
display: flex;
color: var(--sidebar-non-existant);
}
.chapter li a {
display: block;
padding: 0;
text-decoration: none;
color: var(--sidebar-fg);
}
.chapter li a:hover {
color: var(--sidebar-active);
}
.chapter li a.active {
color: var(--sidebar-active);
}
.chapter li > a.toggle {
cursor: pointer;
display: block;
margin-left: auto;
padding: 0 10px;
user-select: none;
opacity: 0.68;
}
.chapter li > a.toggle div {
transition: transform 0.5s;
}
/* collapse the section */
.chapter li:not(.expanded) + li > ol {
display: none;
}
.chapter li.chapter-item {
line-height: 1.5em;
margin-top: 0.6em;
}
.chapter li.expanded > a.toggle div {
transform: rotate(90deg);
}
.spacer {
width: 100%;
height: 3px;
margin: 5px 0px;
}
.chapter .spacer {
background-color: var(--sidebar-spacer);
}
@media (-moz-touch-enabled: 1), (pointer: coarse) {
.chapter li a { padding: 5px 0; }
.spacer { margin: 10px 0; }
}
.section {
list-style: none outside none;
padding-left: 20px;
line-height: 1.9em;
}
/* Theme Menu Popup */
.theme-popup {
position: absolute;
left: 10px;
top: var(--menu-bar-height);
z-index: 1000;
border-radius: 4px;
font-size: 0.7em;
color: var(--fg);
background: var(--theme-popup-bg);
border: 1px solid var(--theme-popup-border);
margin: 0;
padding: 0;
list-style: none;
display: none;
/* Don't let the children's background extend past the rounded corners. */
overflow: hidden;
}
.theme-popup .default {
color: var(--icons);
}
.theme-popup .theme {
width: 100%;
border: 0;
margin: 0;
padding: 2px 20px;
line-height: 25px;
white-space: nowrap;
text-align: left;
cursor: pointer;
color: inherit;
background: inherit;
font-size: inherit;
}
.theme-popup .theme:hover {
background-color: var(--theme-hover);
}
.theme-selected::before {
display: inline-block;
content: "✓";
margin-left: -14px;
width: 14px;
}

View File

@ -0,0 +1,203 @@
/* Base styles and content styles */
@import 'variables.css';
:root {
/* Browser default font-size is 16px, this way 1 rem = 10px */
font-size: 62.5%;
}
html {
font-family: "Open Sans", sans-serif;
color: var(--fg);
background-color: var(--bg);
text-size-adjust: none;
-webkit-text-size-adjust: none;
}
body {
margin: 0;
font-size: 1.6rem;
overflow-x: hidden;
}
code {
font-family: var(--mono-font) !important;
font-size: var(--code-font-size);
}
/* make long words/inline code not x overflow */
main {
overflow-wrap: break-word;
}
/* make wide tables scroll if they overflow */
.table-wrapper {
overflow-x: auto;
}
/* Don't change font size in headers. */
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
font-size: unset;
}
.left { float: left; }
.right { float: right; }
.boring { opacity: 0.6; }
.hide-boring .boring { display: none; }
.hidden { display: none !important; }
h2, h3 { margin-top: 2.5em; }
h4, h5 { margin-top: 2em; }
.header + .header h3,
.header + .header h4,
.header + .header h5 {
margin-top: 1em;
}
h1:target::before,
h2:target::before,
h3:target::before,
h4:target::before,
h5:target::before,
h6:target::before {
display: inline-block;
content: "»";
margin-left: -30px;
width: 30px;
}
/* This is broken on Safari as of version 14, but is fixed
in Safari Technology Preview 117 which I think will be Safari 14.2.
https://bugs.webkit.org/show_bug.cgi?id=218076
*/
:target {
scroll-margin-top: calc(var(--menu-bar-height) + 0.5em);
}
.page {
outline: 0;
padding: 0 var(--page-padding);
margin-top: calc(0px - var(--menu-bar-height)); /* Compensate for the #menu-bar-hover-placeholder */
}
.page-wrapper {
box-sizing: border-box;
}
.js:not(.sidebar-resizing) .page-wrapper {
transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */
}
.content {
overflow-y: auto;
padding: 0 5px 50px 5px;
}
.content main {
margin-left: auto;
margin-right: auto;
max-width: var(--content-max-width);
}
.content p { line-height: 1.45em; }
.content ol { line-height: 1.45em; }
.content ul { line-height: 1.45em; }
.content a { text-decoration: none; }
.content a:hover { text-decoration: underline; }
.content img, .content video { max-width: 100%; }
.content .header:link,
.content .header:visited {
color: var(--fg);
}
.content .header:link,
.content .header:visited:hover {
text-decoration: none;
}
table {
margin: 0 auto;
border-collapse: collapse;
}
table td {
padding: 3px 20px;
border: 1px var(--table-border-color) solid;
}
table thead {
background: var(--table-header-bg);
}
table thead td {
font-weight: 700;
border: none;
}
table thead th {
padding: 3px 20px;
}
table thead tr {
border: 1px var(--table-header-bg) solid;
}
/* Alternate background colors for rows */
table tbody tr:nth-child(2n) {
background: var(--table-alternate-bg);
}
blockquote {
margin: 20px 0;
padding: 0 20px;
color: var(--fg);
background-color: var(--quote-bg);
border-top: .1em solid var(--quote-border);
border-bottom: .1em solid var(--quote-border);
}
kbd {
background-color: var(--table-border-color);
border-radius: 4px;
border: solid 1px var(--theme-popup-border);
box-shadow: inset 0 -1px 0 var(--theme-hover);
display: inline-block;
font-size: var(--code-font-size);
font-family: var(--mono-font);
line-height: 10px;
padding: 4px 5px;
vertical-align: middle;
}
:not(.footnote-definition) + .footnote-definition,
.footnote-definition + :not(.footnote-definition) {
margin-top: 2em;
}
.footnote-definition {
font-size: 0.9em;
margin: 0.5em 0;
}
.footnote-definition p {
display: inline;
}
.tooltiptext {
position: absolute;
visibility: hidden;
color: #fff;
background-color: #333;
transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */
left: -8px; /* Half of the width of the icon */
top: -35px;
font-size: 0.8em;
text-align: center;
border-radius: 6px;
padding: 5px 8px;
margin: 5px;
z-index: 1000;
}
.tooltipped .tooltiptext {
visibility: visible;
}
.chapter li.part-title {
color: var(--sidebar-fg);
margin: 5px 0px;
font-weight: bold;
}
.result-no-output {
font-style: italic;
}

View File

@ -0,0 +1,54 @@
#sidebar,
#menu-bar,
.nav-chapters,
.mobile-nav-chapters {
display: none;
}
#page-wrapper.page-wrapper {
transform: none;
margin-left: 0px;
overflow-y: initial;
}
#content {
max-width: none;
margin: 0;
padding: 0;
}
.page {
overflow-y: initial;
}
code {
background-color: #666666;
border-radius: 5px;
/* Force background to be printed in Chrome */
-webkit-print-color-adjust: exact;
}
pre > .buttons {
z-index: 2;
}
a, a:visited, a:active, a:hover {
color: #4183c4;
text-decoration: none;
}
h1, h2, h3, h4, h5, h6 {
page-break-inside: avoid;
page-break-after: avoid;
}
pre, code {
page-break-inside: avoid;
white-space: pre-wrap;
}
.fa {
display: none !important;
}

View File

@ -0,0 +1,255 @@
/* Globals */
:root {
--sidebar-width: 300px;
--page-padding: 15px;
--content-max-width: 750px;
--menu-bar-height: 50px;
--mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace;
--code-font-size: 0.875em /* please adjust the ace font size accordingly in editor.js */
}
/* Themes */
.ayu {
--bg: hsl(210, 25%, 8%);
--fg: #c5c5c5;
--sidebar-bg: #14191f;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #5c6773;
--sidebar-active: #ffb454;
--sidebar-spacer: #2d334f;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #b7b9cc;
--links: #0096cf;
--inline-code-color: #ffb454;
--theme-popup-bg: #14191f;
--theme-popup-border: #5c6773;
--theme-hover: #191f26;
--quote-bg: hsl(226, 15%, 17%);
--quote-border: hsl(226, 15%, 22%);
--table-border-color: hsl(210, 25%, 13%);
--table-header-bg: hsl(210, 25%, 28%);
--table-alternate-bg: hsl(210, 25%, 11%);
--searchbar-border-color: #848484;
--searchbar-bg: #424242;
--searchbar-fg: #fff;
--searchbar-shadow-color: #d4c89f;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #252932;
--search-mark-bg: #e3b171;
}
.coal {
--bg: hsl(200, 7%, 8%);
--fg: #98a3ad;
--sidebar-bg: #292c2f;
--sidebar-fg: #a1adb8;
--sidebar-non-existant: #505254;
--sidebar-active: #3473ad;
--sidebar-spacer: #393939;
--scrollbar: var(--sidebar-fg);
--icons: #43484d;
--icons-hover: #b3c0cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #141617;
--theme-popup-border: #43484d;
--theme-hover: #1f2124;
--quote-bg: hsl(234, 21%, 18%);
--quote-border: hsl(234, 21%, 23%);
--table-border-color: hsl(200, 7%, 13%);
--table-header-bg: hsl(200, 7%, 28%);
--table-alternate-bg: hsl(200, 7%, 11%);
--searchbar-border-color: #aaa;
--searchbar-bg: #b7b7b7;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #98a3ad;
--searchresults-li-bg: #2b2b2f;
--search-mark-bg: #355c7d;
}
.light {
--bg: hsl(0, 0%, 100%);
--fg: hsl(0, 0%, 0%);
--sidebar-bg: #fafafa;
--sidebar-fg: hsl(0, 0%, 0%);
--sidebar-non-existant: #aaaaaa;
--sidebar-active: #1f1fff;
--sidebar-spacer: #f4f4f4;
--scrollbar: #8F8F8F;
--icons: #747474;
--icons-hover: #000000;
--links: #20609f;
--inline-code-color: #301900;
--theme-popup-bg: #fafafa;
--theme-popup-border: #cccccc;
--theme-hover: #e6e6e6;
--quote-bg: hsl(197, 37%, 96%);
--quote-border: hsl(197, 37%, 91%);
--table-border-color: hsl(0, 0%, 95%);
--table-header-bg: hsl(0, 0%, 80%);
--table-alternate-bg: hsl(0, 0%, 97%);
--searchbar-border-color: #aaa;
--searchbar-bg: #fafafa;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #e4f2fe;
--search-mark-bg: #a2cff5;
}
.navy {
--bg: hsl(226, 23%, 11%);
--fg: #bcbdd0;
--sidebar-bg: #282d3f;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #505274;
--sidebar-active: #2b79a2;
--sidebar-spacer: #2d334f;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #b7b9cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #161923;
--theme-popup-border: #737480;
--theme-hover: #282e40;
--quote-bg: hsl(226, 15%, 17%);
--quote-border: hsl(226, 15%, 22%);
--table-border-color: hsl(226, 23%, 16%);
--table-header-bg: hsl(226, 23%, 31%);
--table-alternate-bg: hsl(226, 23%, 14%);
--searchbar-border-color: #aaa;
--searchbar-bg: #aeaec6;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #5f5f71;
--searchresults-border-color: #5c5c68;
--searchresults-li-bg: #242430;
--search-mark-bg: #a2cff5;
}
.rust {
--bg: hsl(60, 9%, 87%);
--fg: #262625;
--sidebar-bg: #3b2e2a;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #505254;
--sidebar-active: #e69f67;
--sidebar-spacer: #45373a;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #262625;
--links: #2b79a2;
--inline-code-color: #6e6b5e;
--theme-popup-bg: #e1e1db;
--theme-popup-border: #b38f6b;
--theme-hover: #99908a;
--quote-bg: hsl(60, 5%, 75%);
--quote-border: hsl(60, 5%, 70%);
--table-border-color: hsl(60, 9%, 82%);
--table-header-bg: #b3a497;
--table-alternate-bg: hsl(60, 9%, 84%);
--searchbar-border-color: #aaa;
--searchbar-bg: #fafafa;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #dec2a2;
--search-mark-bg: #e69f67;
}
@media (prefers-color-scheme: dark) {
.light.no-js {
--bg: hsl(200, 7%, 8%);
--fg: #98a3ad;
--sidebar-bg: #292c2f;
--sidebar-fg: #a1adb8;
--sidebar-non-existant: #505254;
--sidebar-active: #3473ad;
--sidebar-spacer: #393939;
--scrollbar: var(--sidebar-fg);
--icons: #43484d;
--icons-hover: #b3c0cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #141617;
--theme-popup-border: #43484d;
--theme-hover: #1f2124;
--quote-bg: hsl(234, 21%, 18%);
--quote-border: hsl(234, 21%, 23%);
--table-border-color: hsl(200, 7%, 13%);
--table-header-bg: hsl(200, 7%, 28%);
--table-alternate-bg: hsl(200, 7%, 11%);
--searchbar-border-color: #aaa;
--searchbar-bg: #b7b7b7;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #98a3ad;
--searchresults-li-bg: #2b2b2f;
--search-mark-bg: #355c7d;
}
}

10
docs/page/docs/elasticlunr.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
docs/page/docs/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -0,0 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 199.7 184.2">
<style>
@media (prefers-color-scheme: dark) {
svg { fill: white; }
}
</style>
<path d="M189.5,36.8c0.2,2.8,0,5.1-0.6,6.8L153,162c-0.6,2.1-2,3.7-4.2,5c-2.2,1.2-4.4,1.9-6.7,1.9H31.4c-9.6,0-15.3-2.8-17.3-8.4
c-0.8-2.2-0.8-3.9,0.1-5.2c0.9-1.2,2.4-1.8,4.6-1.8H123c7.4,0,12.6-1.4,15.4-4.1s5.7-8.9,8.6-18.4l32.9-108.6
c1.8-5.9,1-11.1-2.2-15.6S169.9,0,164,0H72.7c-1,0-3.1,0.4-6.1,1.1l0.1-0.4C64.5,0.2,62.6,0,61,0.1s-3,0.5-4.3,1.4
c-1.3,0.9-2.4,1.8-3.2,2.8S52,6.5,51.2,8.1c-0.8,1.6-1.4,3-1.9,4.3s-1.1,2.7-1.8,4.2c-0.7,1.5-1.3,2.7-2,3.7c-0.5,0.6-1.2,1.5-2,2.5
s-1.6,2-2.2,2.8s-0.9,1.5-1.1,2.2c-0.2,0.7-0.1,1.8,0.2,3.2c0.3,1.4,0.4,2.4,0.4,3.1c-0.3,3-1.4,6.9-3.3,11.6
c-1.9,4.7-3.6,8.1-5.1,10.1c-0.3,0.4-1.2,1.3-2.6,2.7c-1.4,1.4-2.3,2.6-2.6,3.7c-0.3,0.4-0.3,1.5-0.1,3.4c0.3,1.8,0.4,3.1,0.3,3.8
c-0.3,2.7-1.3,6.3-3,10.8c-1.7,4.5-3.4,8.2-5,11c-0.2,0.5-0.9,1.4-2,2.8c-1.1,1.4-1.8,2.5-2,3.4c-0.2,0.6-0.1,1.8,0.1,3.4
c0.2,1.6,0.2,2.8-0.1,3.6c-0.6,3-1.8,6.7-3.6,11c-1.8,4.3-3.6,7.9-5.4,11c-0.5,0.8-1.1,1.7-2,2.8c-0.8,1.1-1.5,2-2,2.8
s-0.8,1.6-1,2.5c-0.1,0.5,0,1.3,0.4,2.3c0.3,1.1,0.4,1.9,0.4,2.6c-0.1,1.1-0.2,2.6-0.5,4.4c-0.2,1.8-0.4,2.9-0.4,3.2
c-1.8,4.8-1.7,9.9,0.2,15.2c2.2,6.2,6.2,11.5,11.9,15.8c5.7,4.3,11.7,6.4,17.8,6.4h110.7c5.2,0,10.1-1.7,14.7-5.2s7.7-7.8,9.2-12.9
l33-108.6c1.8-5.8,1-10.9-2.2-15.5C194.9,39.7,192.6,38,189.5,36.8z M59.6,122.8L73.8,80c0,0,7,0,10.8,0s28.8-1.7,25.4,17.5
c-3.4,19.2-18.8,25.2-36.8,25.4S59.6,122.8,59.6,122.8z M78.6,116.8c4.7-0.1,18.9-2.9,22.1-17.1S89.2,86.3,89.2,86.3l-8.9,0
l-10.2,30.5C70.2,116.9,74,116.9,78.6,116.8z M75.3,68.7L89,26.2h9.8l0.8,34l23.6-34h9.9l-13.6,42.5h-7.1l12.5-35.4l-24.5,35.4h-6.8
l-0.8-35L82,68.7H75.3z"/>
</svg>
<!-- Original image Copyright Dave Gandy — CC BY 4.0 License -->

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -0,0 +1,93 @@
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@ -0,0 +1,100 @@
/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */
/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */
/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 300;
src: local('Open Sans Light'), local('OpenSans-Light'),
url('open-sans-v17-all-charsets-300.woff2') format('woff2');
}
/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 300;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'),
url('open-sans-v17-all-charsets-300italic.woff2') format('woff2');
}
/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'),
url('open-sans-v17-all-charsets-regular.woff2') format('woff2');
}
/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 400;
src: local('Open Sans Italic'), local('OpenSans-Italic'),
url('open-sans-v17-all-charsets-italic.woff2') format('woff2');
}
/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 600;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'),
url('open-sans-v17-all-charsets-600.woff2') format('woff2');
}
/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 600;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'),
url('open-sans-v17-all-charsets-600italic.woff2') format('woff2');
}
/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 700;
src: local('Open Sans Bold'), local('OpenSans-Bold'),
url('open-sans-v17-all-charsets-700.woff2') format('woff2');
}
/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 700;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'),
url('open-sans-v17-all-charsets-700italic.woff2') format('woff2');
}
/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 800;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'),
url('open-sans-v17-all-charsets-800.woff2') format('woff2');
}
/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 800;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'),
url('open-sans-v17-all-charsets-800italic.woff2') format('woff2');
}
/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Source Code Pro';
font-style: normal;
font-weight: 500;
src: url('source-code-pro-v11-all-charsets-500.woff2') format('woff2');
}

View File

@ -0,0 +1,82 @@
/*
* An increased contrast highlighting scheme loosely based on the
* "Base16 Atelier Dune Light" theme by Bram de Haan
* (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)
* Original Base16 color scheme by Chris Kempson
* (https://github.com/chriskempson/base16)
*/
/* Comment */
.hljs-comment,
.hljs-quote {
color: #575757;
}
/* Red */
.hljs-variable,
.hljs-template-variable,
.hljs-attribute,
.hljs-tag,
.hljs-name,
.hljs-regexp,
.hljs-link,
.hljs-name,
.hljs-selector-id,
.hljs-selector-class {
color: #d70025;
}
/* Orange */
.hljs-number,
.hljs-meta,
.hljs-built_in,
.hljs-builtin-name,
.hljs-literal,
.hljs-type,
.hljs-params {
color: #b21e00;
}
/* Green */
.hljs-string,
.hljs-symbol,
.hljs-bullet {
color: #008200;
}
/* Blue */
.hljs-title,
.hljs-section {
color: #0030f2;
}
/* Purple */
.hljs-keyword,
.hljs-selector-tag {
color: #9d00ec;
}
.hljs {
display: block;
overflow-x: auto;
background: #f6f7f6;
color: #000;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-addition {
color: #22863a;
background-color: #f0fff4;
}
.hljs-deletion {
color: #b31d28;
background-color: #ffeef0;
}

File diff suppressed because one or more lines are too long

793
docs/page/docs/index.html Normal file
View File

@ -0,0 +1,793 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>update logs - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="update_logs.html" class="active"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="difficult-rocket-update-logs"><a class="header" href="#difficult-rocket-update-logs">Difficult Rocket Update Logs</a></h1>
<ul>
<li>感谢 <code>Github copilot</code> 的翻译(甚至这句话也是<code>copilot</code>翻译的)
<ul>
<li>也就意味着以后的更新日志是中文记录+<code>copilot</code>翻译的(当然,也有可能是<code>Easy Translate</code>翻译的)</li>
</ul>
</li>
<li>Thanks <code>Github copilot</code> for translate (lazy yes!)
<ul>
<li>Means the update logs will lodge in Chinese and translated by <code>copilot</code></li>
</ul>
</li>
</ul>
<h2 id="readme-first"><a class="header" href="#readme-first">Readme First!</a></h2>
<h5 id="most-badge-can-be-clicked-and-jump"><a class="header" href="#most-badge-can-be-clicked-and-jump">most badge can be clicked and jump</a></h5>
<p><a href="https://Semver.org/"><img src="https://img.shields.io/badge/SemVer-2.0.0-blue.svg" alt="Generic badge" /></a>
<img src="https://img.shields.io/badge/Version-0.6.4.1-yellow.svg" alt="Generic badge" /></p>
<ul>
<li><a href="https://github.com/shenjackyuanjie/Difficult-Rocket"><img src="https://img.shields.io/badge/Readme-Github-blue.svg?style=flat-square&amp;logo=Github" alt="Readme-github" /></a></li>
<li><a href="https://gitee.com/shenjackyuanjie/Difficult-Rocket"><img src="https://img.shields.io/badge/Readme-Gitee-blue.svg?style=flat-square&amp;logo=Gitee" alt="Readme-gitee" /></a></li>
<li><a href="../README.html"><img src="https://img.shields.io/badge/Readme-%E4%B8%AD%E6%96%87(%E7%82%B9%E6%88%91!)-blue.svg?style=flat-square" alt="Readme-gitee" /></a></li>
<li>Using <a href="https://semver.org/">SemVer 2.0.0</a> to manage version</li>
</ul>
<h2 id="20221124-v-064"><a class="header" href="#20221124-v-064">20221124 V 0.6.4</a></h2>
<h3 id="最后的-06-呢"><a class="header" href="#最后的-06-呢">最后的 0.6 呢</a></h3>
<h3 id="add"><a class="header" href="#add">Add</a></h3>
<ul>
<li><code>Logger!</code></li>
<li>nuitka 文档</li>
<li>准备给我的 5600x 的散热器洗一洗(</li>
<li>一些 client</li>
<li><code>Github Action</code> 的自动 build</li>
</ul>
<h3 id="changes"><a class="header" href="#changes">Changes</a></h3>
<ul>
<li><code>utils.translates</code> 中的字体名称常量移动至 <code>api.types.Fonts</code></li>
<li>删除了 <code>README-cn.md</code> ( 合并到 <code>README.md</code> 中 )</li>
<li><code>README.md</code><code>README-en.md</code> 的内容统一</li>
<li>重新调整 <code>requirement.txt</code> 的内容 ( 使内容更加有条理性 )</li>
<li>删除了一些无用的代码 ( For second-dev )</li>
<li>更新了 <code>Toml</code> 文件 ( 使其更加规范 )</li>
<li>更新了 <code>screen api</code></li>
<li>更新了 <code>pyglet</code> 版本</li>
<li>删除了 <code>main.config</code></li>
<li>更新了 <code>logger</code></li>
<li>更新了 <code>nuitka.yml</code></li>
<li>尝试加载 <code>icon</code></li>
<li>更新了主项目</li>
</ul>
<h2 id="20220627"><a class="header" href="#20220627">20220627</a></h2>
<h2 id="20220511-v-063"><a class="header" href="#20220511-v-063">20220511 V 0.6.3</a></h2>
<ul>
<li>咕了好久的 update log 了</li>
<li>github copilot 卒了,所以没有英文
<ul>
<li>GitHub copy alot break , so no more English</li>
</ul>
</li>
</ul>
<h3 id="change"><a class="header" href="#change">Change</a></h3>
<ul>
<li><code>api/Exp</code> 改为文件夹 <code>api/Exp/__init__.py</code></li>
<li>再次重写了 <code>client.load_fonts()</code> 现在改为直接加载单独的 <code>pyglet_load_fonts_folder()</code></li>
<li>更新了 <code>command/</code> 里的一大堆东西</li>
<li>退钱!开摆!</li>
</ul>
<h2 id="202202xx-v-062"><a class="header" href="#202202xx-v-062">202202xx V 0.6.2</a></h2>
<h3 id="add-1"><a class="header" href="#add-1">Add</a></h3>
<ul>
<li>添加了 <code>libs.MCDR</code> 文件夹 (<code>new_thread</code>没有包含在内)
<ul>
<li>Add <code>libs.MCDR</code> folder (<code>new_thread</code> not included)</li>
</ul>
</li>
<li>添加对 mod 的支持(还在写啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊)</li>
<li>计划写个设计文档
<ul>
<li>Plan to write a design document</li>
</ul>
</li>
</ul>
<h2 id="202111-202112xx-20220119-20220207-v-061"><a class="header" href="#202111-202112xx-20220119-20220207-v-061"><del>202111 202112xx 20220119</del> 20220207 V 0.6.1</a></h2>
<p><del>争取12月内发一个release</del></p>
<p><del>行了这都2022年了我接着摸等我考完试(20220110)再发</del></p>
<p>20220207 可算是发了ruaaaa</p>
<h3 id="change-1"><a class="header" href="#change-1">Change</a></h3>
<ul>
<li>修改了 readme 文件的语言切换格式
<ul>
<li>Change the language switch format in readme</li>
</ul>
</li>
<li>更新了所有文件的版权信息 (2021-2022)
<ul>
<li>Update all files copyright information (2021-2022)</li>
</ul>
</li>
<li>重命名 <code>Difficult_Rocket.py</code> -&gt; <code>DR.py</code>
<ul>
<li>用于修复 <code>Pycharm</code> 检测模块时总是会把主文件检测成主程序,导致一些模块总是检测不到的问题
<ul>
<li>Rename <code>Difficult_Rocket.py</code> -&gt; <code>DR.py</code></li>
<li>Use it to fix <code>Pycharm</code> module detection problem
<ul>
<li>When the main file is detected as the main program, some modules will always be detected as the main program</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><code>api/translate</code>移动到根目录下
<ul>
<li>move <code>api/translate</code> to root directory</li>
</ul>
</li>
<li>现在命令会慢慢消失,而不是立即消失
<ul>
<li>Now the command will disappear slowly, not immediately</li>
</ul>
</li>
<li>重写了一遍<code> client.load_fonts()</code>
<ul>
<li>rewrite <code>client.load_fonts()</code></li>
</ul>
</li>
<li>重写了 <code>tools.load_file()</code> 的错误处理和 <code>.config</code> 文件的解析方式
<ul>
<li>现在 <code>.config</code> 文件解析后会直接返回一个 <code>ConfigParser</code> 对象</li>
<li>也就意味着不能再直接遍历 <code>.config</code> 文件返回的解析 <del>谁遍历.config文件啊</del></li>
<li>同时也意味着可以直接用解析好的 <code>.config</code> 文件来修改 <code>.config</code> 文件
<ul>
<li>rewrite <code>tools.load_file()</code> error handling and <code>.config</code> file parsing method
<ul>
<li>now <code>.config</code> file parsing after return <code>ConfigParser</code> object</li>
<li>that means you can not directly traverse <code>.config</code> file return parsing <del>who traverse .config file</del></li>
<li>also means you can directly use parsed <code>.config</code> file to modify <code>.config</code> file</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><code>pyglet</code> 添加 <code>Ctrl+C</code><code>Ctrl+V</code> 的快捷键解析
<ul>
<li>add <code>Ctrl+C</code> and <code>Ctrl+V</code> shortcut for <code>pyglet</code></li>
</ul>
</li>
<li>更新 <code>pyglet</code><code>2.0dev13</code>
<ul>
<li>update <code>pyglet</code> to <code>2.0dev13</code></li>
</ul>
</li>
</ul>
<h3 id="command"><a class="header" href="#command">Command</a></h3>
<ul>
<li>
<p><code>log_tick</code> 指令改为 <code>fps log</code></p>
<ul>
<li>command <code>log_tick</code> change to <code>fps log</code></li>
</ul>
</li>
<li>
<p><code>maxfps</code> 指令改为 <code>fps max</code></p>
<ul>
<li>command <code>maxfps</code> change to <code>fps max</code></li>
</ul>
</li>
<li>
<p><code>minfps</code> 指令改为 <code>fps min</code></p>
<ul>
<li>command <code>minfps</code> change to <code>fps min</code></li>
</ul>
</li>
<li>
<p>命令内容输出使用<code>CommandText</code>而不是<code>str</code></p>
<ul>
<li>也就是说可以使用<code>CommandText.match</code>来匹配命令内容</li>
<li>command output use <code>CommandText</code> instead of <code>str</code>
<ul>
<li>means you can use <code>CommandText.match</code> to match command content</li>
</ul>
</li>
</ul>
</li>
<li>
<p>命令解析现在使用新的<code>CommandText.match</code></p>
<ul>
<li>command parse now use new <code>CommandText.match</code></li>
</ul>
</li>
</ul>
<h3 id="add-2"><a class="header" href="#add-2">Add</a></h3>
<ul>
<li>添加内置字体<code>Cascadia_Code</code>
<ul>
<li>add built-in font <code>Cascadia_Code</code></li>
</ul>
</li>
<li>添加模块 <code>xmltodict</code> <code>pyperclip</code>
<ul>
<li>add modules <code>xmltodict</code> <code>pyperclip</code></li>
</ul>
</li>
<li>添加了<code>json5</code> <code>pyglet</code> <code>pyperclip</code> <code>xmltodict</code> 的协议
<ul>
<li>非常感谢上述模块的作者和维护者们</li>
<li>added <code>json5</code> <code>pyglet</code> <code>pyperclip</code> <code>xmltodict</code> LICENSE
<ul>
<li>thanks a lot to above module's author and maintainer</li>
</ul>
</li>
</ul>
</li>
<li>继续~~重~~新写了一个基于 <code>HTMLLabel</code><code>HTMLformatedLabel</code>
<ul>
<li>同时为他写了一个 <code>decode_text2HTML</code> 工具(这也是咕咕咕的一大部分原因)</li>
<li>add a <code>HTMLformatedLabel</code> Label based on <code>HTMLLabel</code>
<ul>
<li>also write a <code>decode_text2HTML</code> tool (also a big reason why lazy)</li>
</ul>
</li>
</ul>
</li>
<li>增加内置模块 <code>toml</code> 和对应的 <code>LICENSE.txt</code>
<ul>
<li>Added built-in module <code>toml</code> and corresponding <code>LICENSE.txt</code></li>
</ul>
</li>
</ul>
<h2 id="20211025-v-060"><a class="header" href="#20211025-v-060">20211025 V 0.6.0</a></h2>
<h4 id="command-line-update"><a class="header" href="#command-line-update">Command Line Update!</a></h4>
<h3 id="change-2"><a class="header" href="#change-2">Change</a></h3>
<ul>
<li>现在 <code>Difficult Rocket</code> 只适用于 python3.8+
<ul>
<li>因为 <code>:=</code> 的使用</li>
<li>now <code>Difficult Rocket</code> will only fit python3.8+
<ul>
<li>because <code>:=</code></li>
</ul>
</li>
</ul>
</li>
<li>现在主程序崩溃时的报告处理方式有了新的方式
<ul>
<li>now main crash report handler have new way to handler crash</li>
</ul>
</li>
<li>现在字体文件夹的名字改为 <code>HarmonyOS_Sans</code>
<ul>
<li>now fonts' folder's name is <code>HarmonyOS_Sans</code></li>
</ul>
</li>
</ul>
<h3 id="add-3"><a class="header" href="#add-3">Add</a></h3>
<ul>
<li><code>Difficult_Rocket.graphics.widgets.Parts</code>
<ul>
<li>have many costume value</li>
</ul>
</li>
<li>now <code>libs/fonts</code> have <code>HarmonyOS_Sans</code> font</li>
<li>handler of <code>on_key_press</code> and <code>on_key_release</code> and <code>on_text</code>
<ul>
<li><code>on_key_press</code><code>on_key_release</code><code>on_text</code> 的处理方式</li>
</ul>
</li>
<li><code>game.config</code> config file</li>
<li><code>lang/en-us.json5</code> now up to date with <code>lang/zh-CN.json5</code></li>
<li><code>translate/Lang.翻译</code> same as <code>Lang.lang</code></li>
<li><code>command/CommandLine</code> to render command line</li>
<li><code>@new_thread</code> now can option if log this thread to <code>crash</code> or not</li>
<li><code>start.cmd</code> witch could debug easier</li>
</ul>
<h3 id="translate"><a class="header" href="#translate">Translate</a></h3>
<ul>
<li>Add
<ul>
<li><code>window</code>
<ul>
<li><code>message.text</code></li>
<li><code>command.text</code></li>
<li><code>text.motion</code></li>
<li><code>text.motion_select</code></li>
<li><code>setup.use_time_ns</code></li>
<li><code>fonts.found</code></li>
<li><code>game.input_stop</code></li>
<li><code>game.command_stop</code></li>
<li><code>game.window_stop</code></li>
<li><code>game.stop_get</code></li>
<li><code>game.stop</code></li>
<li><code>game.end</code></li>
</ul>
</li>
<li><code>client</code>
<ul>
<li><code>setup.use_time_ns</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="command-1"><a class="header" href="#command-1">Command</a></h3>
<ul>
<li>now you can press <code>t</code> to call out a message window
<ul>
<li>or press <code>/</code> to open command line</li>
<li>not done</li>
<li><del>useless until now</del></li>
</ul>
</li>
<li>new command
<ul>
<li><code>/min_fps</code>
<ul>
<li>get min fps in 5 second</li>
</ul>
</li>
<li><code>/max_fps</code>
<ul>
<li>get max fps in 5 second</li>
</ul>
</li>
<li><code>/stop</code>
<ul>
<li>stop the game</li>
</ul>
</li>
<li><code>/default</code>
<ul>
<li>switch window size to default size</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="20210928-v-052"><a class="header" href="#20210928-v-052">20210928 V 0.5.2</a></h2>
<h3 id="change-3"><a class="header" href="#change-3">Change</a></h3>
<ul>
<li>now bin folder use the name <code>Difficult_Rocket</code></li>
<li>now test files no longer have <code>_test_</code> prefix</li>
<li>now will always use local <code>pyglet</code>
<ul>
<li>may change later</li>
</ul>
</li>
<li>fitting <code>pypy3.10</code> (well······ not success (because OpenGL, blame it))</li>
<li>now <code>crash-report</code> have more information</li>
<li>now when pressed, the sprite will rotate randomly</li>
<li>now <code>pyglet.app.run()</code> use multiprocess</li>
<li>now will always use <code>libs/</code> lib when using <code>pyglet</code> or <code>json5</code></li>
<li>now <code>tools.config()</code> is <code>tools.load_file()</code></li>
<li>now <code>lang</code> file have <code>server``client</code> and <code>window</code></li>
</ul>
<h3 id="add-4"><a class="header" href="#add-4">Add</a></h3>
<ul>
<li><del>mods support will be done in 1.0.0</del>
<ul>
<li>just maybe</li>
</ul>
</li>
<li>now you can use <code>DEBUGGING</code> to test or check game run stats
<ul>
<li>when <code>True</code> it will always make a crash report</li>
</ul>
</li>
<li>now <code>Difficult_Rocket.api.translate.Lang</code> can be used to auto translate text in <code>configs/lang/xxx.json5</code>
<ul>
<li>you can use <code>translate.tr[xxx]</code> to use translated info</li>
<li>and use <code>.format</code> to format info's <code>{}</code></li>
<li>if translate is not found, <code>Lang</code> will try to find translate in default language translate</li>
<li>(witch was <code>zh-CN</code>)</li>
</ul>
</li>
<li><code>crash</code> now have more information about multiprocess</li>
<li>add some unused read_input in <code>client</code></li>
<li>now when <code>logs/</code> is not found logger will info <code>logger.mkdir</code></li>
</ul>
<h3 id="debug"><a class="header" href="#debug">DEBUG</a></h3>
<ul>
<li>now version on the window will be <code>0.5.2</code></li>
</ul>
<h3 id="delete"><a class="header" href="#delete">Delete</a></h3>
<ul>
<li>now <code>client.Client</code> and <code>server.Server</code> only use <code>net_mode</code> option</li>
<li><code>api.new_thread</code> have no more extra line of testing</li>
<li><code>configs/view.json5</code> now removed</li>
</ul>
<h3 id="translate-1"><a class="header" href="#translate-1">Translate</a></h3>
<ul>
<li>add <code>mouse.release</code> and <code>language</code> to en-us</li>
<li>add <code>language</code> to <code>zh-CN</code></li>
<li>add <code>tr.lang(xx, xx)</code> that can solve error on getting item from lang file
<ul>
<li><code>tr[xxx]</code> can also use but won't solve error when item not found</li>
<li>so best use <code>tr.lang(xx, xx)</code></li>
</ul>
</li>
</ul>
<h2 id="20210902-v-051"><a class="header" href="#20210902-v-051">20210902 V 0.5.1</a></h2>
<h3 id="change-4"><a class="header" href="#change-4">Change</a></h3>
<ul>
<li>crash report's format</li>
<li>crash report now use multithreading!</li>
<li>some info in <code>client</code></li>
<li><code>tools/format_bool</code> now use more clever way to format</li>
</ul>
<h3 id="add-5"><a class="header" href="#add-5">Add</a></h3>
<ul>
<li><code>on_resize(self, width, height):</code> in <code>client</code></li>
<li>auto crash report in <code>bin/crash/create_crash_report</code></li>
<li><code>bin/api/Exp.py</code> some Exception</li>
<li><code>bin/api/translate</code> to create a <code>translate</code> class that can reload language</li>
</ul>
<h2 id="20210823-v-050"><a class="header" href="#20210823-v-050">20210823 V 0.5.0</a></h2>
<h3 id="change-5"><a class="header" href="#change-5">Change</a></h3>
<ul>
<li>many <code>sys.path.append()</code> and</li>
<li><code>try: import xxx except: from bin import xxx</code> has been removed</li>
<li>and now IDE won't blame you when you open the file anymore!(LOL)</li>
<li><code>Server</code> now use Dev to delivery message between thread(will be done in 0.6.0)</li>
<li>test files now use <code>_test_*.py</code> for names</li>
</ul>
<h3 id="add-6"><a class="header" href="#add-6">Add</a></h3>
<ul>
<li><code>crash.py</code> to handle and create crash report (not done)</li>
<li><code>DragSprite</code> (maybe will add in future pyglet update PR has been published)</li>
</ul>
<h3 id="delete-1"><a class="header" href="#delete-1">Delete</a></h3>
<ul>
<li><code>name_hanlder</code> in <code>configs.py</code></li>
</ul>
<h2 id="20210811-v-046"><a class="header" href="#20210811-v-046">20210811 V 0.4.6</a></h2>
<h3 id="debug-1"><a class="header" href="#debug-1">DEBUG</a></h3>
<ul>
<li>game window doesn't use input <code>(*args, **kwargs)</code> to set up</li>
</ul>
<h3 id="change-6"><a class="header" href="#change-6">Change</a></h3>
<ul>
<li>language type <code>zh-cn</code> -&gt; <code>zh-CN</code></li>
<li>game window config now use <code>configs/main.config</code> to config</li>
<li><code>on_mouse_click</code> function's debug message now use <code>self.lang</code> to debug message (witch is multi-language)</li>
<li>server client and main now use <code>logging.getLogger()</code></li>
</ul>
<h3 id="add-7"><a class="header" href="#add-7">Add</a></h3>
<ul>
<li><code>[window_default]</code> in <code>configs/main.config</code></li>
<li>server and client now will output <code>PID</code> and <code>PPID</code> info as <code>INFO</code></li>
<li><code>client</code> now change to <code>ClientWindow</code></li>
</ul>
<h3 id="delete-2"><a class="header" href="#delete-2">Delete</a></h3>
<ul>
<li>all game window render has been deleted
<ul>
<li>will be rewritten in 0.5.0</li>
</ul>
</li>
<li>delete some useless code</li>
<li>delete some useless file</li>
</ul>
<h2 id="20210723-v-045"><a class="header" href="#20210723-v-045">20210723 V 0.4.5</a></h2>
<h3 id="debug-2"><a class="header" href="#debug-2">DEBUG</a></h3>
<ul>
<li><code>new_thread.py</code> link of stackoverflow have an extra 'find' in the middle REMOVED</li>
</ul>
<h3 id="add-8"><a class="header" href="#add-8">Add</a></h3>
<ul>
<li><code>new_thread.py</code> now can use @new_thread to get a threaded fun</li>
</ul>
<h3 id="change-7"><a class="header" href="#change-7">Change</a></h3>
<ul>
<li><code>README.md</code> and <code>README-cn.md</code> change URL to file path</li>
<li><code>README.md</code> and <code>README-cn.md</code> some label style change</li>
<li>Pre-installed <code>pyglet</code> upgrade from <code>1.5.16</code> -&gt; <code>1.5.18</code></li>
<li>Pre-installed <code>json5</code> upgrade from <code>0.9.5</code> -&gt; <code>0.9.6</code></li>
</ul>
<h2 id="20210708-v-044"><a class="header" href="#20210708-v-044">20210708 V 0.4.4</a></h2>
<h3 id="ps"><a class="header" href="#ps">PS</a></h3>
<ul>
<li>Nice day everyone!</li>
<li>I have finish my final exam on grade 8.</li>
<li>Will soon reach grade 9, so update will be late very much.</li>
</ul>
<h3 id="change-8"><a class="header" href="#change-8">Change</a></h3>
<ul>
<li>function <code>tools.config()</code> way of raise error change <code>tools.report_file_error()</code></li>
<li>function <code>tools.cb()</code> change name to <code>tools.format_bool()</code></li>
<li>config.py clear some useless import class</li>
<li>changing configfile to main.config *doing</li>
</ul>
<h3 id="test-change"><a class="header" href="#test-change">Test change</a></h3>
<ul>
<li><code>test_config_file.py</code></li>
<li><code>test_for_speed.py</code></li>
<li><code>test_logging_conf.py</code></li>
<li><code>test_speed_of_sprite.py</code></li>
</ul>
<h2 id="20210626-v-043"><a class="header" href="#20210626-v-043">2021/06/26 V 0.4.3</a></h2>
<h3 id="debug-3"><a class="header" href="#debug-3">DEBUG</a></h3>
<ul>
<li>some name_format bug</li>
</ul>
<h3 id="change-9"><a class="header" href="#change-9">Change</a></h3>
<ul>
<li>doing: change render pip line ('m really doing)</li>
<li>default FPS from 120 -&gt; 60</li>
</ul>
<h3 id="add-9"><a class="header" href="#add-9">Add</a></h3>
<ul>
<li>add performance_test folder</li>
<li>add some performances test</li>
</ul>
<h2 id="20210524-v-042"><a class="header" href="#20210524-v-042">2021/05/24 V 0.4.2</a></h2>
<h3 id="debug-4"><a class="header" href="#debug-4">DEBUG</a></h3>
<ul>
<li>using python version 3.8.9 still report <code>best3.8+</code>(lang name)(actually is debugging)</li>
</ul>
<h3 id="change-10"><a class="header" href="#change-10">Change</a></h3>
<ul>
<li>change back how configs.py/name_format work(replace str) fix some issue</li>
<li>doing remake for config sys (lazy yes!)</li>
<li>clear bin/pyglet (already exits in bin/lib)</li>
</ul>
<h3 id="need-do"><a class="header" href="#need-do">Need Do</a></h3>
<ul>
<li>debug name_format</li>
</ul>
<h2 id="20210417-v-041"><a class="header" href="#20210417-v-041">2021/04/17 V 0.4.1</a></h2>
<p>PS:</p>
<ul>
<li>
<p><code>Va.b.c</code></p>
</li>
<li>
<p>a : Big Version (Big rewrite times) (now at DEMO making)</p>
</li>
<li>
<p>b : Middle Rewrite Times (Yes I've rewritten for 4 times)</p>
</li>
<li>
<p>c : normal updates</p>
</li>
</ul>
<h3 id="debug-5"><a class="header" href="#debug-5">DEBUG</a></h3>
<ul>
<li>solve pre-installed lib can't use</li>
<li>solve pre-installed lib's bug</li>
<li>some other bugs</li>
</ul>
<h3 id="change-11"><a class="header" href="#change-11">Change</a></h3>
<ul>
<li>plan to change config file format to .config (plan to)</li>
<li>reformat all files (including libs)</li>
</ul>
<h2 id="20210409-v-0234"><a class="header" href="#20210409-v-0234">2021/04/09 V 0.2.3/4</a></h2>
<h3 id="add-10"><a class="header" href="#add-10">Add</a></h3>
<ul>
<li>support many things(also forget)</li>
</ul>
<h3 id="change-12"><a class="header" href="#change-12">Change</a></h3>
<ul>
<li><code>tools.name_handler()</code> now use <code>str.format</code> to handler str</li>
<li><code>DR/sys_value</code> folder now move to <code>DR/configs/sys_value</code></li>
</ul>
<h3 id="debug-6"><a class="header" href="#debug-6">DEBUG</a></h3>
<ul>
<li>many <code>tools.name_handler()</code> use bug(cause crashes)</li>
<li><code>{date}</code> can be successful use in <code>tools.name_handler()</code> (if you define the format of date)</li>
<li>log file's filename incorrect (should be <code>xxxx-xx-xx xx-xx-xx DR.log</code> but be <code>{date} DR.log</code>)</li>
</ul>
<h2 id="20210327-v-0221"><a class="header" href="#20210327-v-0221">2021/03/27 V 0.2.2/1</a></h2>
<h3 id="add-11"><a class="header" href="#add-11">Add</a></h3>
<ul>
<li>add local libs
<ul>
<li><code>pyglet 1.5.15</code></li>
<li><code>json5 0.9.5</code></li>
</ul>
</li>
</ul>
<p>PS: now I'm not sure witch lib will be import first</p>
<p>the local lib or the pip libs</p>
<p>So I'll add some other code to make sure that DR will first try to import pip libs</p>
<p>not the local libs (todo)</p>
<h3 id="debug-7"><a class="header" href="#debug-7">DEBUG</a></h3>
<ul>
<li>some bugs(I forget them)</li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="next" href="contributors.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="next" href="contributors.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

7
docs/page/docs/mark.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,474 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>nuitka test - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="../tomorrow-night.css">
<link rel="stylesheet" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="../update_logs.html"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="../contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="../rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="../nuitka/20221121_nuitka_performs.html" class="active"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="../plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="../plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="nuitka-121-的性能测试"><a class="header" href="#nuitka-121-的性能测试">nuitka 1.2.1 的性能测试</a></h1>
<p>大家好! 这里是shenjack
这篇文章就是 <a href="%E8%BF%98%E6%B2%A1%E5%8F%91%E5%87%BA%E6%9D%A5%E5%91%A2">B站</a> 专栏的原文!</p>
<h1 id="综述"><a class="header" href="#综述">综述</a></h1>
<h2 id="环境"><a class="header" href="#环境">环境</a></h2>
<ul>
<li>
<p>硬件</p>
<ul>
<li>CPU: <code>AMD R5 5600X</code></li>
<li>内存: <code>64G DDR4 3200 (32×2)</code></li>
</ul>
</li>
<li>
<p>软件</p>
<ul>
<li><img src="gcc_clang_version.png" alt="gcc clang" /></li>
<li><img src="python_nuitka_version.png" alt="python nuitka" /></li>
<li><img src="DR_git_commit.png" alt="DR" /></li>
<li><code>gcc 12.2.0</code></li>
<li><code>clang 14.0.6</code></li>
<li><code>nuitka v1.2.1</code></li>
<li><code>Python 3.8.10</code></li>
<li><a href="https://github.com/shenjackyuanjie/Difficult-Rocket">DR</a> commit <code>e6a2b7b36cc98e508efbc61c4646181f5817fc7c</code></li>
</ul>
</li>
</ul>
<h2 id="编译选项"><a class="header" href="#编译选项">编译选项</a></h2>
<ul>
<li>核心编译选项
<ul>
<li>
<p>环境</p>
<ul>
<li><code>--standalone</code>
<ul>
<li>将环境一并打包进完成的文件夹中</li>
<li>
<pre><code>--standalone Enable standalone mode for output. This allows you to
transfer the created binary to other machines without
it using an existing Python installation. This also
means it will become big. It implies these option: &quot;--
follow-imports&quot; and &quot;--python-flag=no_site&quot;. Defaults
to off.```
</code></pre>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>编译器</p>
<ul>
<li><code>--clang</code>
<ul>
<li>强制使用 <code>clang</code> 编译器</li>
<li>
<pre><code>--clang Enforce the use of clang. On Windows this requires a
working Visual Studio version to piggy back on.
Defaults to off.```
</code></pre>
</li>
</ul>
</li>
<li><code>--mingw64</code> (常量)
<ul>
<li>强制使用 <code>mingw64</code> 编译器</li>
<li>
<pre><code>--mingw64 Enforce the use of MinGW64 on Windows. Defaults to
off.```
</code></pre>
</li>
</ul>
</li>
<li><code>--jobs=24</code> (常量)
<ul>
<li>最多同时运行的 C 编译器 <code>(clang|mingw64)</code> 数量</li>
<li>
<pre><code> -j N, --jobs=N Specify the allowed number of parallel C compiler
jobs. Defaults to the system CPU count.```
</code></pre>
</li>
</ul>
</li>
<li><code>--lto=</code> <code>yes|no|auto(None)</code>
<ul>
<li>是否启用 链接</li>
<li>
<pre><code>--lto=choice Use link time optimizations (MSVC, gcc, clang).
Allowed values are &quot;yes&quot;, &quot;no&quot;, and &quot;auto&quot; (when it's
known to work). Defaults to &quot;auto&quot;.```
</code></pre>
</li>
</ul>
</li>
<li><code>--disable-ccache</code>
<ul>
<li>不使用 <code>ccache</code> 或者 <code>clcache</code> 的缓存</li>
<li>
<pre><code>--disable-ccache Do not attempt to use ccache (gcc, clang, etc.) or
clcache (MSVC, clangcl).```
</code></pre>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="结论综述"><a class="header" href="#结论综述">结论综述</a></h2>
<p>补充:<code>lto=yes</code> 的情况下经常有报错</p>
<h3 id="有-ccache-全-hit-无实际编译"><a class="header" href="#有-ccache-全-hit-无实际编译"><code>Ccache</code> (全 hit 无实际编译)</a></h3>
<p><code>clang lto=no</code> 效率最高</p>
<p><code>mingw lto=no</code> 效率低于 <code>lto=yes</code>,但是更加稳定(不会报错)</p>
<h3 id="无-ccache-测试编译器实际效率"><a class="header" href="#无-ccache-测试编译器实际效率"><code>Ccache</code> (测试编译器实际效率)</a></h3>
<p><code>clang lto=no</code> 效率最高</p>
<p><code>mingw lto=no</code> 同样效率相对高</p>
<h3 id="总结"><a class="header" href="#总结">总结</a></h3>
<p>尽量使用 <code>lto=no</code> 配合 <code>ccache</code> 以及 <code>clang</code></p>
<h1 id="原始数据"><a class="header" href="#原始数据">原始数据</a></h1>
<h2 id="因为视频使用cpu编码所以很多数据没法看到这里使用的是后面再次测试微信群内存档的数据"><a class="header" href="#因为视频使用cpu编码所以很多数据没法看到这里使用的是后面再次测试微信群内存档的数据">因为视频使用CPU编码所以很多数据没法看到这里使用的是后面再次测试/微信群内存档的数据</a></h2>
<h2 id="视频应该会再次测试数据可能不同请谅解obs更新完没注意编码啊啊啊啊"><a class="header" href="#视频应该会再次测试数据可能不同请谅解obs更新完没注意编码啊啊啊啊">视频应该会再次测试,数据可能不同,请谅解(obs更新完没注意编码啊啊啊啊)</a></h2>
<table>
<tr>
<th>编译器</th> <th colspan="2">有ccache</th> <th colspan="2">无ccache</th>
</tr>
<tr>
<th>编译器</th> <th>lto=no</th> <th>lto=yes</th> <th>lto=no</th> <th>lto=yes</th>
</tr>
<tr>
<td>clang</td> <td>50s</td> <td>86s</td> <td>83s</td> <td>67s</td>
</tr>
<tr>
<td>gcc</td> <td>59s</td> <td>641s</td> <td>227s</td> <td>630s</td>
</tr>
</table>
<ul>
<li>
<p><code>clang</code></p>
<ul>
<li>
<p><code>with ccache</code></p>
<ul>
<li>
<p><code>lto=no</code></p>
<ul>
<li><code>视频内数据</code></li>
<li><code>--clang</code> </li>
<li><code>--mingw64</code></li>
<li><code>--lto=no</code></li>
<li>耗时: 50000ms (50s)</li>
<li><img src="clang_mingw_lto_no_ccache.png" alt="clang mingw lto no ccache" /></li>
</ul>
</li>
<li>
<p><code>lto=yes</code></p>
<ul>
<li><code>后期测试数据</code></li>
<li><code>--clang</code> </li>
<li><code>--mingw64</code></li>
<li><code>--lto=yes</code></li>
<li>耗时 86000ms (86s)</li>
<li><img src="clang_mingw_lto_yes_ccache.png" alt="clang mingw lto yes ccache" /></li>
</ul>
</li>
</ul>
</li>
<li>
<p><code>no ccache</code></p>
<ul>
<li>
<p><code>lto=no</code></p>
<ul>
<li><code>视频内数据</code></li>
<li><code>--clang</code></li>
<li><code>--mingw64</code></li>
<li><code>--lto=no</code></li>
<li><code>--disable-ccache</code></li>
<li>耗时 83000ms (83s)</li>
<li><img src="clang_mingw_lto_no.png" alt="clang mingw lto no" /></li>
</ul>
</li>
<li>
<p><code>lto=yes</code></p>
<ul>
<li><code>后期测试数据</code></li>
<li><code>--clang</code></li>
<li><code>--mingw64</code></li>
<li><code>--lto=yes</code></li>
<li><code>--disable-ccache</code></li>
<li>耗时 67000ms (67s)</li>
<li><img src="clang_mingw_lto_yes.png" alt="clang mingw lto yes" /></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p><code>mingw64</code></p>
<ul>
<li>
<p><code>with ccache</code></p>
<ul>
<li>
<p><code>lto=no</code></p>
<ul>
<li><code>后期测试数据</code></li>
<li><code>--mingw64</code></li>
<li><code>--lto=no</code></li>
<li>耗时 59000ms (59s)</li>
<li><img src="mingw_lto_no_ccache.png" alt="mingw lto no ccache" /></li>
</ul>
</li>
<li>
<p><code>lto=yes</code></p>
<ul>
<li><code>后期测试数据</code></li>
<li><code>--mingw64</code></li>
<li><code>--lto=yes</code></li>
<li>耗时 641000ms (641s) (10.68min)</li>
<li><img src="mingw_lto_yes_ccache.png" alt="mingw lto yes ccache" /></li>
</ul>
</li>
</ul>
</li>
<li>
<p><code>no ccache</code></p>
<ul>
<li>
<p><code>lto=no</code></p>
<ul>
<li><code>视频内数据</code></li>
<li><code>--mingw64</code></li>
<li><code>--lto=no</code></li>
<li><code>--disable-ccache</code></li>
<li>耗时 227000ms (227s) (3.78min)</li>
<li><img src="mingw_lto_no.png" alt="mingw lto no" /></li>
</ul>
</li>
<li>
<p><code>lto=yes</code></p>
<ul>
<li><code>后期测试数据</code></li>
<li><code>--mingw64</code></li>
<li><code>--lto=yes</code></li>
<li><code>--disable-ccache</code></li>
<li>耗时 630000ms (630s) (10.5min)</li>
<li><img src="mingw_lto_yes.png" alt="mingw lto yes" /></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../rua!.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../rua!.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

View File

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -0,0 +1,225 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>extra save info - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="../tomorrow-night.css">
<link rel="stylesheet" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="../update_logs.html"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="../contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="../rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="../nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="../plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="../plan_features/extra-save-info.html" class="active"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="存档额外信息-extra-save-info"><a class="header" href="#存档额外信息-extra-save-info">存档额外信息 extra save info</a></h1>
<h2 id="20210514"><a class="header" href="#20210514">20210514</a></h2>
<h2 id="shenjackyuanjie"><a class="header" href="#shenjackyuanjie">shenjackyuanjie</a></h2>
<h2 id="planing"><a class="header" href="#planing">planing</a></h2>
<h2 id="描述"><a class="header" href="#描述">描述</a></h2>
<p>存档中会额外保存一些信息</p>
<h3 id="底层机制"><a class="header" href="#底层机制">底层机制</a></h3>
<p>保存存档时会读取 <code>partlist</code> 中的部件信息</p>
<p>比如部件碰撞箱、重量等</p>
<p>并保存到存档中</p>
<h3 id="效果"><a class="header" href="#效果">效果</a></h3>
<p>存档会根据部件使用情况</p>
<p>增大体积(直到所有种类的部件都被用)</p>
<h2 id="别的什么的"><a class="header" href="#别的什么的">别的什么的</a></h2>
<p>没了</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../plan_features/格式.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/multi-connect.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../plan_features/格式.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/multi-connect.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

View File

@ -0,0 +1,240 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>plan features - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="../tomorrow-night.css">
<link rel="stylesheet" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="../update_logs.html"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="../contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="../rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="../nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="../plan_features/index.html" class="active"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="../plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="difficult-rocket-计划特性页面"><a class="header" href="#difficult-rocket-计划特性页面">Difficult Rocket 计划特性页面</a></h1>
<p>这里会用中文列出。DR未来的计划特性已经做出来的也会有标注</p>
<p>别问为什么用中文问就是写不动English了</p>
<p>正文开始</p>
<p>注:文件名指的是本文件夹里的详细说明文件的文件名,如果没有则代表没有详细说明</p>
<div class="table-wrapper"><table><thead><tr><th style="text-align: center">特性描述</th><th style="text-align: center">文件名</th><th style="text-align: center">状态</th></tr></thead><tbody>
<tr><td style="text-align: center">轨道规划</td><td style="text-align: center">orbit-plan</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">部件可成环</td><td style="text-align: center">multi-connect</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">多指令舱控制</td><td style="text-align: center">multi-control</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">自定义部件旋转角度</td><td style="text-align: center">custom-turn-angle</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">自定义warp速度</td><td style="text-align: center">custom-warp-speed</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">Dv计算</td><td style="text-align: center">Dv-calculation</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">socket 联机</td><td style="text-align: center">online-play</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">操作界面可视化轨道</td><td style="text-align: center">visible-orbit</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">可堆叠部件</td><td style="text-align: center">part-stack</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">可压缩结构</td><td style="text-align: center">part-zip</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">部件平移</td><td style="text-align: center">part-move</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">存档额外信息</td><td style="text-align: center">extra-save-info</td><td style="text-align: center">planing</td></tr>
<tr><td style="text-align: center">自定义部件分组开关</td><td style="text-align: center">custom-stage-on-off</td><td style="text-align: center">planing</td></tr>
</tbody></table>
</div>
<h1 id="文件范例"><a class="header" href="#文件范例">文件范例</a></h1>
<h1 id="中文简称-文件名英文名称"><a class="header" href="#中文简称-文件名英文名称">中文简称 文件名<code>英文名称</code></a></h1>
<h2 id="日期"><a class="header" href="#日期">日期</a></h2>
<h2 id="发起人"><a class="header" href="#发起人">发起人</a></h2>
<h2 id="状态"><a class="header" href="#状态">状态</a></h2>
<h2 id="描述"><a class="header" href="#描述">描述</a></h2>
<h3 id="底层机制-实现方法大致"><a class="header" href="#底层机制-实现方法大致">底层机制 <code>实现方法(大致)</code></a></h3>
<h3 id="效果"><a class="header" href="#效果">效果</a></h3>
<h2 id="别的什么的"><a class="header" href="#别的什么的">别的什么的</a></h2>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../nuitka/20221121_nuitka_performs.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/格式.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../nuitka/20221121_nuitka_performs.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/格式.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

View File

@ -0,0 +1,218 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>muit connect - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="../tomorrow-night.css">
<link rel="stylesheet" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="../update_logs.html"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="../contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="../rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="../nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="../plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="../plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-connect.html" class="active"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="部件可成环-multi-connect"><a class="header" href="#部件可成环-multi-connect">部件可成环 multi-connect</a></h1>
<h2 id="2021-4-25"><a class="header" href="#2021-4-25">2021-4-25</a></h2>
<h2 id="shenjackyuanjiewriter"><a class="header" href="#shenjackyuanjiewriter">shenjackyuanjie(writer)</a></h2>
<h2 id="描述"><a class="header" href="#描述">描述</a></h2>
<h3 id="底层机制"><a class="header" href="#底层机制">底层机制</a></h3>
<p>单个部件可以同时连接到2个或两个以上部件</p>
<h3 id="效果"><a class="header" href="#效果">效果</a></h3>
<p>可以搞点 环世界 之类的巨构</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../plan_features/extra-save-info.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/multi-control.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../plan_features/extra-save-info.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/multi-control.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

View File

@ -0,0 +1,220 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>muit control - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="../tomorrow-night.css">
<link rel="stylesheet" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="../update_logs.html"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="../contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="../rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="../nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="../plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="../plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-control.html" class="active"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="多指令舱控制-multi-control"><a class="header" href="#多指令舱控制-multi-control">多指令舱控制 multi-control</a></h1>
<h2 id="2021-4-25"><a class="header" href="#2021-4-25">2021-4-25</a></h2>
<h2 id="shenjackyuanjiewriter"><a class="header" href="#shenjackyuanjiewriter">shenjackyuanjie(writer)</a></h2>
<h2 id="planing"><a class="header" href="#planing">planing</a></h2>
<h2 id="描述"><a class="header" href="#描述">描述</a></h2>
<h3 id="示例1"><a class="header" href="#示例1">示例1</a></h3>
<p>可以让多个指令舱同时进行动作</p>
<p>比如一个空间站由很多部分组成</p>
<p>每一个部分都由不同的指令舱控制</p>
<p>多指令舱控制就可以实现空间站所有部分统一加速、减速</p>
<p>其实也是某种程度上的统一控制</p>
<h3 id="示例2"><a class="header" href="#示例2">示例2</a></h3>
<p>在同时发射多枚火箭/卫星时</p>
<p>可以让火箭在操作其他火箭的时候继续燃烧</p>
<p>就是说操纵A火箭的时候B火箭还能继续燃烧</p>
<h3 id="底层机制"><a class="header" href="#底层机制">底层机制</a></h3>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../plan_features/multi-connect.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../plan_features/multi-connect.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

View File

@ -0,0 +1,218 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>格式 - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="../tomorrow-night.css">
<link rel="stylesheet" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="../update_logs.html"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="../contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="../rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="../nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="../plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../plan_features/格式.html" class="active"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="../plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="../plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="中文简称-文件名"><a class="header" href="#中文简称-文件名">中文简称 文件名</a></h1>
<h2 id="日期"><a class="header" href="#日期">日期</a></h2>
<h2 id="发起人"><a class="header" href="#发起人">发起人</a></h2>
<h2 id="状态"><a class="header" href="#状态">状态</a></h2>
<h2 id="描述"><a class="header" href="#描述">描述</a></h2>
<h3 id="底层机制"><a class="header" href="#底层机制">底层机制</a></h3>
<h3 id="效果"><a class="header" href="#效果">效果</a></h3>
<h2 id="别的什么的"><a class="header" href="#别的什么的">别的什么的</a></h2>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../plan_features/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/extra-save-info.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../plan_features/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../plan_features/extra-save-info.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

1147
docs/page/docs/print.html Normal file

File diff suppressed because it is too large Load Diff

221
docs/page/docs/rua!.html Normal file
View File

@ -0,0 +1,221 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>rua! 奇怪的东西 - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="update_logs.html"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="rua!.html" class="active"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="pyglet相关"><a class="header" href="#pyglet相关">pyglet相关</a></h1>
<p>pyglet 坐标轴原点是左上角</p>
<h1 id="坐标记录相关"><a class="header" href="#坐标记录相关">坐标记录相关</a></h1>
<p>记录的是部件碰撞箱中心的相对于控制仓碰撞箱中心的相对坐标</p>
<p>然后控制仓的坐标是单独记录的</p>
<p>记录的是区块坐标+区块内坐标</p>
<h1 id="渲染"><a class="header" href="#渲染">渲染</a></h1>
<p>屏幕坐标系需要*100有待测试</p>
<h1 id="素材提供"><a class="header" href="#素材提供">素材提供</a></h1>
<p><a href="background.png">背景候选1号</a>
来自 @底层萌新 QQ1744251171</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="contributors.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="nuitka/20221121_nuitka_performs.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="contributors.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="nuitka/20221121_nuitka_performs.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

483
docs/page/docs/searcher.js Normal file
View File

@ -0,0 +1,483 @@
"use strict";
window.search = window.search || {};
(function search(search) {
// Search functionality
//
// You can use !hasFocus() to prevent keyhandling in your key
// event handlers while the user is typing their search.
if (!Mark || !elasticlunr) {
return;
}
//IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(search, pos) {
return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
};
}
var search_wrap = document.getElementById('search-wrapper'),
searchbar = document.getElementById('searchbar'),
searchbar_outer = document.getElementById('searchbar-outer'),
searchresults = document.getElementById('searchresults'),
searchresults_outer = document.getElementById('searchresults-outer'),
searchresults_header = document.getElementById('searchresults-header'),
searchicon = document.getElementById('search-toggle'),
content = document.getElementById('content'),
searchindex = null,
doc_urls = [],
results_options = {
teaser_word_count: 30,
limit_results: 30,
},
search_options = {
bool: "AND",
expand: true,
fields: {
title: {boost: 1},
body: {boost: 1},
breadcrumbs: {boost: 0}
}
},
mark_exclude = [],
marker = new Mark(content),
current_searchterm = "",
URL_SEARCH_PARAM = 'search',
URL_MARK_PARAM = 'highlight',
teaser_count = 0,
SEARCH_HOTKEY_KEYCODE = 83,
ESCAPE_KEYCODE = 27,
DOWN_KEYCODE = 40,
UP_KEYCODE = 38,
SELECT_KEYCODE = 13;
function hasFocus() {
return searchbar === document.activeElement;
}
function removeChildren(elem) {
while (elem.firstChild) {
elem.removeChild(elem.firstChild);
}
}
// Helper to parse a url into its building blocks.
function parseURL(url) {
var a = document.createElement('a');
a.href = url;
return {
source: url,
protocol: a.protocol.replace(':',''),
host: a.hostname,
port: a.port,
params: (function(){
var ret = {};
var seg = a.search.replace(/^\?/,'').split('&');
var len = seg.length, i = 0, s;
for (;i<len;i++) {
if (!seg[i]) { continue; }
s = seg[i].split('=');
ret[s[0]] = s[1];
}
return ret;
})(),
file: (a.pathname.match(/\/([^/?#]+)$/i) || [,''])[1],
hash: a.hash.replace('#',''),
path: a.pathname.replace(/^([^/])/,'/$1')
};
}
// Helper to recreate a url string from its building blocks.
function renderURL(urlobject) {
var url = urlobject.protocol + "://" + urlobject.host;
if (urlobject.port != "") {
url += ":" + urlobject.port;
}
url += urlobject.path;
var joiner = "?";
for(var prop in urlobject.params) {
if(urlobject.params.hasOwnProperty(prop)) {
url += joiner + prop + "=" + urlobject.params[prop];
joiner = "&";
}
}
if (urlobject.hash != "") {
url += "#" + urlobject.hash;
}
return url;
}
// Helper to escape html special chars for displaying the teasers
var escapeHTML = (function() {
var MAP = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&#34;',
"'": '&#39;'
};
var repl = function(c) { return MAP[c]; };
return function(s) {
return s.replace(/[&<>'"]/g, repl);
};
})();
function formatSearchMetric(count, searchterm) {
if (count == 1) {
return count + " search result for '" + searchterm + "':";
} else if (count == 0) {
return "No search results for '" + searchterm + "'.";
} else {
return count + " search results for '" + searchterm + "':";
}
}
function formatSearchResult(result, searchterms) {
var teaser = makeTeaser(escapeHTML(result.doc.body), searchterms);
teaser_count++;
// The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor
var url = doc_urls[result.ref].split("#");
if (url.length == 1) { // no anchor found
url.push("");
}
// encodeURIComponent escapes all chars that could allow an XSS except
// for '. Due to that we also manually replace ' with its url-encoded
// representation (%27).
var searchterms = encodeURIComponent(searchterms.join(" ")).replace(/\'/g, "%27");
return '<a href="' + path_to_root + url[0] + '?' + URL_MARK_PARAM + '=' + searchterms + '#' + url[1]
+ '" aria-details="teaser_' + teaser_count + '">' + result.doc.breadcrumbs + '</a>'
+ '<span class="teaser" id="teaser_' + teaser_count + '" aria-label="Search Result Teaser">'
+ teaser + '</span>';
}
function makeTeaser(body, searchterms) {
// The strategy is as follows:
// First, assign a value to each word in the document:
// Words that correspond to search terms (stemmer aware): 40
// Normal words: 2
// First word in a sentence: 8
// Then use a sliding window with a constant number of words and count the
// sum of the values of the words within the window. Then use the window that got the
// maximum sum. If there are multiple maximas, then get the last one.
// Enclose the terms in <em>.
var stemmed_searchterms = searchterms.map(function(w) {
return elasticlunr.stemmer(w.toLowerCase());
});
var searchterm_weight = 40;
var weighted = []; // contains elements of ["word", weight, index_in_document]
// split in sentences, then words
var sentences = body.toLowerCase().split('. ');
var index = 0;
var value = 0;
var searchterm_found = false;
for (var sentenceindex in sentences) {
var words = sentences[sentenceindex].split(' ');
value = 8;
for (var wordindex in words) {
var word = words[wordindex];
if (word.length > 0) {
for (var searchtermindex in stemmed_searchterms) {
if (elasticlunr.stemmer(word).startsWith(stemmed_searchterms[searchtermindex])) {
value = searchterm_weight;
searchterm_found = true;
}
};
weighted.push([word, value, index]);
value = 2;
}
index += word.length;
index += 1; // ' ' or '.' if last word in sentence
};
index += 1; // because we split at a two-char boundary '. '
};
if (weighted.length == 0) {
return body;
}
var window_weight = [];
var window_size = Math.min(weighted.length, results_options.teaser_word_count);
var cur_sum = 0;
for (var wordindex = 0; wordindex < window_size; wordindex++) {
cur_sum += weighted[wordindex][1];
};
window_weight.push(cur_sum);
for (var wordindex = 0; wordindex < weighted.length - window_size; wordindex++) {
cur_sum -= weighted[wordindex][1];
cur_sum += weighted[wordindex + window_size][1];
window_weight.push(cur_sum);
};
if (searchterm_found) {
var max_sum = 0;
var max_sum_window_index = 0;
// backwards
for (var i = window_weight.length - 1; i >= 0; i--) {
if (window_weight[i] > max_sum) {
max_sum = window_weight[i];
max_sum_window_index = i;
}
};
} else {
max_sum_window_index = 0;
}
// add <em/> around searchterms
var teaser_split = [];
var index = weighted[max_sum_window_index][2];
for (var i = max_sum_window_index; i < max_sum_window_index+window_size; i++) {
var word = weighted[i];
if (index < word[2]) {
// missing text from index to start of `word`
teaser_split.push(body.substring(index, word[2]));
index = word[2];
}
if (word[1] == searchterm_weight) {
teaser_split.push("<em>")
}
index = word[2] + word[0].length;
teaser_split.push(body.substring(word[2], index));
if (word[1] == searchterm_weight) {
teaser_split.push("</em>")
}
};
return teaser_split.join('');
}
function init(config) {
results_options = config.results_options;
search_options = config.search_options;
searchbar_outer = config.searchbar_outer;
doc_urls = config.doc_urls;
searchindex = elasticlunr.Index.load(config.index);
// Set up events
searchicon.addEventListener('click', function(e) { searchIconClickHandler(); }, false);
searchbar.addEventListener('keyup', function(e) { searchbarKeyUpHandler(); }, false);
document.addEventListener('keydown', function(e) { globalKeyHandler(e); }, false);
// If the user uses the browser buttons, do the same as if a reload happened
window.onpopstate = function(e) { doSearchOrMarkFromUrl(); };
// Suppress "submit" events so the page doesn't reload when the user presses Enter
document.addEventListener('submit', function(e) { e.preventDefault(); }, false);
// If reloaded, do the search or mark again, depending on the current url parameters
doSearchOrMarkFromUrl();
}
function unfocusSearchbar() {
// hacky, but just focusing a div only works once
var tmp = document.createElement('input');
tmp.setAttribute('style', 'position: absolute; opacity: 0;');
searchicon.appendChild(tmp);
tmp.focus();
tmp.remove();
}
// On reload or browser history backwards/forwards events, parse the url and do search or mark
function doSearchOrMarkFromUrl() {
// Check current URL for search request
var url = parseURL(window.location.href);
if (url.params.hasOwnProperty(URL_SEARCH_PARAM)
&& url.params[URL_SEARCH_PARAM] != "") {
showSearch(true);
searchbar.value = decodeURIComponent(
(url.params[URL_SEARCH_PARAM]+'').replace(/\+/g, '%20'));
searchbarKeyUpHandler(); // -> doSearch()
} else {
showSearch(false);
}
if (url.params.hasOwnProperty(URL_MARK_PARAM)) {
var words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' ');
marker.mark(words, {
exclude: mark_exclude
});
var markers = document.querySelectorAll("mark");
function hide() {
for (var i = 0; i < markers.length; i++) {
markers[i].classList.add("fade-out");
window.setTimeout(function(e) { marker.unmark(); }, 300);
}
}
for (var i = 0; i < markers.length; i++) {
markers[i].addEventListener('click', hide);
}
}
}
// Eventhandler for keyevents on `document`
function globalKeyHandler(e) {
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || e.target.type === 'textarea' || e.target.type === 'text') { return; }
if (e.keyCode === ESCAPE_KEYCODE) {
e.preventDefault();
searchbar.classList.remove("active");
setSearchUrlParameters("",
(searchbar.value.trim() !== "") ? "push" : "replace");
if (hasFocus()) {
unfocusSearchbar();
}
showSearch(false);
marker.unmark();
} else if (!hasFocus() && e.keyCode === SEARCH_HOTKEY_KEYCODE) {
e.preventDefault();
showSearch(true);
window.scrollTo(0, 0);
searchbar.select();
} else if (hasFocus() && e.keyCode === DOWN_KEYCODE) {
e.preventDefault();
unfocusSearchbar();
searchresults.firstElementChild.classList.add("focus");
} else if (!hasFocus() && (e.keyCode === DOWN_KEYCODE
|| e.keyCode === UP_KEYCODE
|| e.keyCode === SELECT_KEYCODE)) {
// not `:focus` because browser does annoying scrolling
var focused = searchresults.querySelector("li.focus");
if (!focused) return;
e.preventDefault();
if (e.keyCode === DOWN_KEYCODE) {
var next = focused.nextElementSibling;
if (next) {
focused.classList.remove("focus");
next.classList.add("focus");
}
} else if (e.keyCode === UP_KEYCODE) {
focused.classList.remove("focus");
var prev = focused.previousElementSibling;
if (prev) {
prev.classList.add("focus");
} else {
searchbar.select();
}
} else { // SELECT_KEYCODE
window.location.assign(focused.querySelector('a'));
}
}
}
function showSearch(yes) {
if (yes) {
search_wrap.classList.remove('hidden');
searchicon.setAttribute('aria-expanded', 'true');
} else {
search_wrap.classList.add('hidden');
searchicon.setAttribute('aria-expanded', 'false');
var results = searchresults.children;
for (var i = 0; i < results.length; i++) {
results[i].classList.remove("focus");
}
}
}
function showResults(yes) {
if (yes) {
searchresults_outer.classList.remove('hidden');
} else {
searchresults_outer.classList.add('hidden');
}
}
// Eventhandler for search icon
function searchIconClickHandler() {
if (search_wrap.classList.contains('hidden')) {
showSearch(true);
window.scrollTo(0, 0);
searchbar.select();
} else {
showSearch(false);
}
}
// Eventhandler for keyevents while the searchbar is focused
function searchbarKeyUpHandler() {
var searchterm = searchbar.value.trim();
if (searchterm != "") {
searchbar.classList.add("active");
doSearch(searchterm);
} else {
searchbar.classList.remove("active");
showResults(false);
removeChildren(searchresults);
}
setSearchUrlParameters(searchterm, "push_if_new_search_else_replace");
// Remove marks
marker.unmark();
}
// Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and #heading-anchor .
// `action` can be one of "push", "replace", "push_if_new_search_else_replace"
// and replaces or pushes a new browser history item.
// "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet.
function setSearchUrlParameters(searchterm, action) {
var url = parseURL(window.location.href);
var first_search = ! url.params.hasOwnProperty(URL_SEARCH_PARAM);
if (searchterm != "" || action == "push_if_new_search_else_replace") {
url.params[URL_SEARCH_PARAM] = searchterm;
delete url.params[URL_MARK_PARAM];
url.hash = "";
} else {
delete url.params[URL_MARK_PARAM];
delete url.params[URL_SEARCH_PARAM];
}
// A new search will also add a new history item, so the user can go back
// to the page prior to searching. A updated search term will only replace
// the url.
if (action == "push" || (action == "push_if_new_search_else_replace" && first_search) ) {
history.pushState({}, document.title, renderURL(url));
} else if (action == "replace" || (action == "push_if_new_search_else_replace" && !first_search) ) {
history.replaceState({}, document.title, renderURL(url));
}
}
function doSearch(searchterm) {
// Don't search the same twice
if (current_searchterm == searchterm) { return; }
else { current_searchterm = searchterm; }
if (searchindex == null) { return; }
// Do the actual search
var results = searchindex.search(searchterm, search_options);
var resultcount = Math.min(results.length, results_options.limit_results);
// Display search metrics
searchresults_header.innerText = formatSearchMetric(resultcount, searchterm);
// Clear and insert results
var searchterms = searchterm.split(' ');
removeChildren(searchresults);
for(var i = 0; i < resultcount ; i++){
var resultElem = document.createElement('li');
resultElem.innerHTML = formatSearchResult(results[i], searchterms);
searchresults.appendChild(resultElem);
}
// Display results
showResults(true);
}
fetch(path_to_root + 'searchindex.json')
.then(response => response.json())
.then(json => init(json))
.catch(error => { // Try to load searchindex.js if fetch failed
var script = document.createElement('script');
script.src = path_to_root + 'searchindex.js';
script.onload = () => init(window.search);
document.head.appendChild(script);
});
// Exported functions
search.hasFocus = hasFocus;
})(window.search);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,102 @@
/* Tomorrow Night Theme */
/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
/* Tomorrow Comment */
.hljs-comment {
color: #969896;
}
/* Tomorrow Red */
.hljs-variable,
.hljs-attribute,
.hljs-tag,
.hljs-regexp,
.ruby .hljs-constant,
.xml .hljs-tag .hljs-title,
.xml .hljs-pi,
.xml .hljs-doctype,
.html .hljs-doctype,
.css .hljs-id,
.css .hljs-class,
.css .hljs-pseudo {
color: #cc6666;
}
/* Tomorrow Orange */
.hljs-number,
.hljs-preprocessor,
.hljs-pragma,
.hljs-built_in,
.hljs-literal,
.hljs-params,
.hljs-constant {
color: #de935f;
}
/* Tomorrow Yellow */
.ruby .hljs-class .hljs-title,
.css .hljs-rule .hljs-attribute {
color: #f0c674;
}
/* Tomorrow Green */
.hljs-string,
.hljs-value,
.hljs-inheritance,
.hljs-header,
.hljs-name,
.ruby .hljs-symbol,
.xml .hljs-cdata {
color: #b5bd68;
}
/* Tomorrow Aqua */
.hljs-title,
.css .hljs-hexcolor {
color: #8abeb7;
}
/* Tomorrow Blue */
.hljs-function,
.python .hljs-decorator,
.python .hljs-title,
.ruby .hljs-function .hljs-title,
.ruby .hljs-title .hljs-keyword,
.perl .hljs-sub,
.javascript .hljs-title,
.coffeescript .hljs-title {
color: #81a2be;
}
/* Tomorrow Purple */
.hljs-keyword,
.javascript .hljs-function {
color: #b294bb;
}
.hljs {
display: block;
overflow-x: auto;
background: #1d1f21;
color: #c5c8c6;
}
.coffeescript .javascript,
.javascript .xml,
.tex .hljs-formula,
.xml .javascript,
.xml .vbscript,
.xml .css,
.xml .hljs-cdata {
opacity: 0.5;
}
.hljs-addition {
color: #718c00;
}
.hljs-deletion {
color: #c82829;
}

View File

@ -0,0 +1,793 @@
<!DOCTYPE HTML>
<html lang="zh-cn" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>update logs - Difficult-Rocket-docs</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script>
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="update_logs.html" class="active"><strong aria-hidden="true">1.</strong> update logs</a></li><li class="chapter-item expanded "><a href="contributors.html"><strong aria-hidden="true">2.</strong> contributors</a></li><li class="chapter-item expanded "><a href="rua!.html"><strong aria-hidden="true">3.</strong> rua! 奇怪的东西</a></li><li class="chapter-item expanded "><a href="nuitka/20221121_nuitka_performs.html"><strong aria-hidden="true">4.</strong> nuitka test</a></li><li class="chapter-item expanded "><a href="plan_features/index.html"><strong aria-hidden="true">5.</strong> plan features</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="plan_features/格式.html"><strong aria-hidden="true">5.1.</strong> 格式</a></li><li class="chapter-item expanded "><a href="plan_features/extra-save-info.html"><strong aria-hidden="true">5.2.</strong> extra save info</a></li><li class="chapter-item expanded "><a href="plan_features/multi-connect.html"><strong aria-hidden="true">5.3.</strong> muit connect</a></li><li class="chapter-item expanded "><a href="plan_features/multi-control.html"><strong aria-hidden="true">5.4.</strong> muit control</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Difficult-Rocket-docs</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="difficult-rocket-update-logs"><a class="header" href="#difficult-rocket-update-logs">Difficult Rocket Update Logs</a></h1>
<ul>
<li>感谢 <code>Github copilot</code> 的翻译(甚至这句话也是<code>copilot</code>翻译的)
<ul>
<li>也就意味着以后的更新日志是中文记录+<code>copilot</code>翻译的(当然,也有可能是<code>Easy Translate</code>翻译的)</li>
</ul>
</li>
<li>Thanks <code>Github copilot</code> for translate (lazy yes!)
<ul>
<li>Means the update logs will lodge in Chinese and translated by <code>copilot</code></li>
</ul>
</li>
</ul>
<h2 id="readme-first"><a class="header" href="#readme-first">Readme First!</a></h2>
<h5 id="most-badge-can-be-clicked-and-jump"><a class="header" href="#most-badge-can-be-clicked-and-jump">most badge can be clicked and jump</a></h5>
<p><a href="https://Semver.org/"><img src="https://img.shields.io/badge/SemVer-2.0.0-blue.svg" alt="Generic badge" /></a>
<img src="https://img.shields.io/badge/Version-0.6.4.1-yellow.svg" alt="Generic badge" /></p>
<ul>
<li><a href="https://github.com/shenjackyuanjie/Difficult-Rocket"><img src="https://img.shields.io/badge/Readme-Github-blue.svg?style=flat-square&amp;logo=Github" alt="Readme-github" /></a></li>
<li><a href="https://gitee.com/shenjackyuanjie/Difficult-Rocket"><img src="https://img.shields.io/badge/Readme-Gitee-blue.svg?style=flat-square&amp;logo=Gitee" alt="Readme-gitee" /></a></li>
<li><a href="../README.html"><img src="https://img.shields.io/badge/Readme-%E4%B8%AD%E6%96%87(%E7%82%B9%E6%88%91!)-blue.svg?style=flat-square" alt="Readme-gitee" /></a></li>
<li>Using <a href="https://semver.org/">SemVer 2.0.0</a> to manage version</li>
</ul>
<h2 id="20221124-v-064"><a class="header" href="#20221124-v-064">20221124 V 0.6.4</a></h2>
<h3 id="最后的-06-呢"><a class="header" href="#最后的-06-呢">最后的 0.6 呢</a></h3>
<h3 id="add"><a class="header" href="#add">Add</a></h3>
<ul>
<li><code>Logger!</code></li>
<li>nuitka 文档</li>
<li>准备给我的 5600x 的散热器洗一洗(</li>
<li>一些 client</li>
<li><code>Github Action</code> 的自动 build</li>
</ul>
<h3 id="changes"><a class="header" href="#changes">Changes</a></h3>
<ul>
<li><code>utils.translates</code> 中的字体名称常量移动至 <code>api.types.Fonts</code></li>
<li>删除了 <code>README-cn.md</code> ( 合并到 <code>README.md</code> 中 )</li>
<li><code>README.md</code><code>README-en.md</code> 的内容统一</li>
<li>重新调整 <code>requirement.txt</code> 的内容 ( 使内容更加有条理性 )</li>
<li>删除了一些无用的代码 ( For second-dev )</li>
<li>更新了 <code>Toml</code> 文件 ( 使其更加规范 )</li>
<li>更新了 <code>screen api</code></li>
<li>更新了 <code>pyglet</code> 版本</li>
<li>删除了 <code>main.config</code></li>
<li>更新了 <code>logger</code></li>
<li>更新了 <code>nuitka.yml</code></li>
<li>尝试加载 <code>icon</code></li>
<li>更新了主项目</li>
</ul>
<h2 id="20220627"><a class="header" href="#20220627">20220627</a></h2>
<h2 id="20220511-v-063"><a class="header" href="#20220511-v-063">20220511 V 0.6.3</a></h2>
<ul>
<li>咕了好久的 update log 了</li>
<li>github copilot 卒了,所以没有英文
<ul>
<li>GitHub copy alot break , so no more English</li>
</ul>
</li>
</ul>
<h3 id="change"><a class="header" href="#change">Change</a></h3>
<ul>
<li><code>api/Exp</code> 改为文件夹 <code>api/Exp/__init__.py</code></li>
<li>再次重写了 <code>client.load_fonts()</code> 现在改为直接加载单独的 <code>pyglet_load_fonts_folder()</code></li>
<li>更新了 <code>command/</code> 里的一大堆东西</li>
<li>退钱!开摆!</li>
</ul>
<h2 id="202202xx-v-062"><a class="header" href="#202202xx-v-062">202202xx V 0.6.2</a></h2>
<h3 id="add-1"><a class="header" href="#add-1">Add</a></h3>
<ul>
<li>添加了 <code>libs.MCDR</code> 文件夹 (<code>new_thread</code>没有包含在内)
<ul>
<li>Add <code>libs.MCDR</code> folder (<code>new_thread</code> not included)</li>
</ul>
</li>
<li>添加对 mod 的支持(还在写啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊)</li>
<li>计划写个设计文档
<ul>
<li>Plan to write a design document</li>
</ul>
</li>
</ul>
<h2 id="202111-202112xx-20220119-20220207-v-061"><a class="header" href="#202111-202112xx-20220119-20220207-v-061"><del>202111 202112xx 20220119</del> 20220207 V 0.6.1</a></h2>
<p><del>争取12月内发一个release</del></p>
<p><del>行了这都2022年了我接着摸等我考完试(20220110)再发</del></p>
<p>20220207 可算是发了ruaaaa</p>
<h3 id="change-1"><a class="header" href="#change-1">Change</a></h3>
<ul>
<li>修改了 readme 文件的语言切换格式
<ul>
<li>Change the language switch format in readme</li>
</ul>
</li>
<li>更新了所有文件的版权信息 (2021-2022)
<ul>
<li>Update all files copyright information (2021-2022)</li>
</ul>
</li>
<li>重命名 <code>Difficult_Rocket.py</code> -&gt; <code>DR.py</code>
<ul>
<li>用于修复 <code>Pycharm</code> 检测模块时总是会把主文件检测成主程序,导致一些模块总是检测不到的问题
<ul>
<li>Rename <code>Difficult_Rocket.py</code> -&gt; <code>DR.py</code></li>
<li>Use it to fix <code>Pycharm</code> module detection problem
<ul>
<li>When the main file is detected as the main program, some modules will always be detected as the main program</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><code>api/translate</code>移动到根目录下
<ul>
<li>move <code>api/translate</code> to root directory</li>
</ul>
</li>
<li>现在命令会慢慢消失,而不是立即消失
<ul>
<li>Now the command will disappear slowly, not immediately</li>
</ul>
</li>
<li>重写了一遍<code> client.load_fonts()</code>
<ul>
<li>rewrite <code>client.load_fonts()</code></li>
</ul>
</li>
<li>重写了 <code>tools.load_file()</code> 的错误处理和 <code>.config</code> 文件的解析方式
<ul>
<li>现在 <code>.config</code> 文件解析后会直接返回一个 <code>ConfigParser</code> 对象</li>
<li>也就意味着不能再直接遍历 <code>.config</code> 文件返回的解析 <del>谁遍历.config文件啊</del></li>
<li>同时也意味着可以直接用解析好的 <code>.config</code> 文件来修改 <code>.config</code> 文件
<ul>
<li>rewrite <code>tools.load_file()</code> error handling and <code>.config</code> file parsing method
<ul>
<li>now <code>.config</code> file parsing after return <code>ConfigParser</code> object</li>
<li>that means you can not directly traverse <code>.config</code> file return parsing <del>who traverse .config file</del></li>
<li>also means you can directly use parsed <code>.config</code> file to modify <code>.config</code> file</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><code>pyglet</code> 添加 <code>Ctrl+C</code><code>Ctrl+V</code> 的快捷键解析
<ul>
<li>add <code>Ctrl+C</code> and <code>Ctrl+V</code> shortcut for <code>pyglet</code></li>
</ul>
</li>
<li>更新 <code>pyglet</code><code>2.0dev13</code>
<ul>
<li>update <code>pyglet</code> to <code>2.0dev13</code></li>
</ul>
</li>
</ul>
<h3 id="command"><a class="header" href="#command">Command</a></h3>
<ul>
<li>
<p><code>log_tick</code> 指令改为 <code>fps log</code></p>
<ul>
<li>command <code>log_tick</code> change to <code>fps log</code></li>
</ul>
</li>
<li>
<p><code>maxfps</code> 指令改为 <code>fps max</code></p>
<ul>
<li>command <code>maxfps</code> change to <code>fps max</code></li>
</ul>
</li>
<li>
<p><code>minfps</code> 指令改为 <code>fps min</code></p>
<ul>
<li>command <code>minfps</code> change to <code>fps min</code></li>
</ul>
</li>
<li>
<p>命令内容输出使用<code>CommandText</code>而不是<code>str</code></p>
<ul>
<li>也就是说可以使用<code>CommandText.match</code>来匹配命令内容</li>
<li>command output use <code>CommandText</code> instead of <code>str</code>
<ul>
<li>means you can use <code>CommandText.match</code> to match command content</li>
</ul>
</li>
</ul>
</li>
<li>
<p>命令解析现在使用新的<code>CommandText.match</code></p>
<ul>
<li>command parse now use new <code>CommandText.match</code></li>
</ul>
</li>
</ul>
<h3 id="add-2"><a class="header" href="#add-2">Add</a></h3>
<ul>
<li>添加内置字体<code>Cascadia_Code</code>
<ul>
<li>add built-in font <code>Cascadia_Code</code></li>
</ul>
</li>
<li>添加模块 <code>xmltodict</code> <code>pyperclip</code>
<ul>
<li>add modules <code>xmltodict</code> <code>pyperclip</code></li>
</ul>
</li>
<li>添加了<code>json5</code> <code>pyglet</code> <code>pyperclip</code> <code>xmltodict</code> 的协议
<ul>
<li>非常感谢上述模块的作者和维护者们</li>
<li>added <code>json5</code> <code>pyglet</code> <code>pyperclip</code> <code>xmltodict</code> LICENSE
<ul>
<li>thanks a lot to above module's author and maintainer</li>
</ul>
</li>
</ul>
</li>
<li>继续~~重~~新写了一个基于 <code>HTMLLabel</code><code>HTMLformatedLabel</code>
<ul>
<li>同时为他写了一个 <code>decode_text2HTML</code> 工具(这也是咕咕咕的一大部分原因)</li>
<li>add a <code>HTMLformatedLabel</code> Label based on <code>HTMLLabel</code>
<ul>
<li>also write a <code>decode_text2HTML</code> tool (also a big reason why lazy)</li>
</ul>
</li>
</ul>
</li>
<li>增加内置模块 <code>toml</code> 和对应的 <code>LICENSE.txt</code>
<ul>
<li>Added built-in module <code>toml</code> and corresponding <code>LICENSE.txt</code></li>
</ul>
</li>
</ul>
<h2 id="20211025-v-060"><a class="header" href="#20211025-v-060">20211025 V 0.6.0</a></h2>
<h4 id="command-line-update"><a class="header" href="#command-line-update">Command Line Update!</a></h4>
<h3 id="change-2"><a class="header" href="#change-2">Change</a></h3>
<ul>
<li>现在 <code>Difficult Rocket</code> 只适用于 python3.8+
<ul>
<li>因为 <code>:=</code> 的使用</li>
<li>now <code>Difficult Rocket</code> will only fit python3.8+
<ul>
<li>because <code>:=</code></li>
</ul>
</li>
</ul>
</li>
<li>现在主程序崩溃时的报告处理方式有了新的方式
<ul>
<li>now main crash report handler have new way to handler crash</li>
</ul>
</li>
<li>现在字体文件夹的名字改为 <code>HarmonyOS_Sans</code>
<ul>
<li>now fonts' folder's name is <code>HarmonyOS_Sans</code></li>
</ul>
</li>
</ul>
<h3 id="add-3"><a class="header" href="#add-3">Add</a></h3>
<ul>
<li><code>Difficult_Rocket.graphics.widgets.Parts</code>
<ul>
<li>have many costume value</li>
</ul>
</li>
<li>now <code>libs/fonts</code> have <code>HarmonyOS_Sans</code> font</li>
<li>handler of <code>on_key_press</code> and <code>on_key_release</code> and <code>on_text</code>
<ul>
<li><code>on_key_press</code><code>on_key_release</code><code>on_text</code> 的处理方式</li>
</ul>
</li>
<li><code>game.config</code> config file</li>
<li><code>lang/en-us.json5</code> now up to date with <code>lang/zh-CN.json5</code></li>
<li><code>translate/Lang.翻译</code> same as <code>Lang.lang</code></li>
<li><code>command/CommandLine</code> to render command line</li>
<li><code>@new_thread</code> now can option if log this thread to <code>crash</code> or not</li>
<li><code>start.cmd</code> witch could debug easier</li>
</ul>
<h3 id="translate"><a class="header" href="#translate">Translate</a></h3>
<ul>
<li>Add
<ul>
<li><code>window</code>
<ul>
<li><code>message.text</code></li>
<li><code>command.text</code></li>
<li><code>text.motion</code></li>
<li><code>text.motion_select</code></li>
<li><code>setup.use_time_ns</code></li>
<li><code>fonts.found</code></li>
<li><code>game.input_stop</code></li>
<li><code>game.command_stop</code></li>
<li><code>game.window_stop</code></li>
<li><code>game.stop_get</code></li>
<li><code>game.stop</code></li>
<li><code>game.end</code></li>
</ul>
</li>
<li><code>client</code>
<ul>
<li><code>setup.use_time_ns</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="command-1"><a class="header" href="#command-1">Command</a></h3>
<ul>
<li>now you can press <code>t</code> to call out a message window
<ul>
<li>or press <code>/</code> to open command line</li>
<li>not done</li>
<li><del>useless until now</del></li>
</ul>
</li>
<li>new command
<ul>
<li><code>/min_fps</code>
<ul>
<li>get min fps in 5 second</li>
</ul>
</li>
<li><code>/max_fps</code>
<ul>
<li>get max fps in 5 second</li>
</ul>
</li>
<li><code>/stop</code>
<ul>
<li>stop the game</li>
</ul>
</li>
<li><code>/default</code>
<ul>
<li>switch window size to default size</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="20210928-v-052"><a class="header" href="#20210928-v-052">20210928 V 0.5.2</a></h2>
<h3 id="change-3"><a class="header" href="#change-3">Change</a></h3>
<ul>
<li>now bin folder use the name <code>Difficult_Rocket</code></li>
<li>now test files no longer have <code>_test_</code> prefix</li>
<li>now will always use local <code>pyglet</code>
<ul>
<li>may change later</li>
</ul>
</li>
<li>fitting <code>pypy3.10</code> (well······ not success (because OpenGL, blame it))</li>
<li>now <code>crash-report</code> have more information</li>
<li>now when pressed, the sprite will rotate randomly</li>
<li>now <code>pyglet.app.run()</code> use multiprocess</li>
<li>now will always use <code>libs/</code> lib when using <code>pyglet</code> or <code>json5</code></li>
<li>now <code>tools.config()</code> is <code>tools.load_file()</code></li>
<li>now <code>lang</code> file have <code>server``client</code> and <code>window</code></li>
</ul>
<h3 id="add-4"><a class="header" href="#add-4">Add</a></h3>
<ul>
<li><del>mods support will be done in 1.0.0</del>
<ul>
<li>just maybe</li>
</ul>
</li>
<li>now you can use <code>DEBUGGING</code> to test or check game run stats
<ul>
<li>when <code>True</code> it will always make a crash report</li>
</ul>
</li>
<li>now <code>Difficult_Rocket.api.translate.Lang</code> can be used to auto translate text in <code>configs/lang/xxx.json5</code>
<ul>
<li>you can use <code>translate.tr[xxx]</code> to use translated info</li>
<li>and use <code>.format</code> to format info's <code>{}</code></li>
<li>if translate is not found, <code>Lang</code> will try to find translate in default language translate</li>
<li>(witch was <code>zh-CN</code>)</li>
</ul>
</li>
<li><code>crash</code> now have more information about multiprocess</li>
<li>add some unused read_input in <code>client</code></li>
<li>now when <code>logs/</code> is not found logger will info <code>logger.mkdir</code></li>
</ul>
<h3 id="debug"><a class="header" href="#debug">DEBUG</a></h3>
<ul>
<li>now version on the window will be <code>0.5.2</code></li>
</ul>
<h3 id="delete"><a class="header" href="#delete">Delete</a></h3>
<ul>
<li>now <code>client.Client</code> and <code>server.Server</code> only use <code>net_mode</code> option</li>
<li><code>api.new_thread</code> have no more extra line of testing</li>
<li><code>configs/view.json5</code> now removed</li>
</ul>
<h3 id="translate-1"><a class="header" href="#translate-1">Translate</a></h3>
<ul>
<li>add <code>mouse.release</code> and <code>language</code> to en-us</li>
<li>add <code>language</code> to <code>zh-CN</code></li>
<li>add <code>tr.lang(xx, xx)</code> that can solve error on getting item from lang file
<ul>
<li><code>tr[xxx]</code> can also use but won't solve error when item not found</li>
<li>so best use <code>tr.lang(xx, xx)</code></li>
</ul>
</li>
</ul>
<h2 id="20210902-v-051"><a class="header" href="#20210902-v-051">20210902 V 0.5.1</a></h2>
<h3 id="change-4"><a class="header" href="#change-4">Change</a></h3>
<ul>
<li>crash report's format</li>
<li>crash report now use multithreading!</li>
<li>some info in <code>client</code></li>
<li><code>tools/format_bool</code> now use more clever way to format</li>
</ul>
<h3 id="add-5"><a class="header" href="#add-5">Add</a></h3>
<ul>
<li><code>on_resize(self, width, height):</code> in <code>client</code></li>
<li>auto crash report in <code>bin/crash/create_crash_report</code></li>
<li><code>bin/api/Exp.py</code> some Exception</li>
<li><code>bin/api/translate</code> to create a <code>translate</code> class that can reload language</li>
</ul>
<h2 id="20210823-v-050"><a class="header" href="#20210823-v-050">20210823 V 0.5.0</a></h2>
<h3 id="change-5"><a class="header" href="#change-5">Change</a></h3>
<ul>
<li>many <code>sys.path.append()</code> and</li>
<li><code>try: import xxx except: from bin import xxx</code> has been removed</li>
<li>and now IDE won't blame you when you open the file anymore!(LOL)</li>
<li><code>Server</code> now use Dev to delivery message between thread(will be done in 0.6.0)</li>
<li>test files now use <code>_test_*.py</code> for names</li>
</ul>
<h3 id="add-6"><a class="header" href="#add-6">Add</a></h3>
<ul>
<li><code>crash.py</code> to handle and create crash report (not done)</li>
<li><code>DragSprite</code> (maybe will add in future pyglet update PR has been published)</li>
</ul>
<h3 id="delete-1"><a class="header" href="#delete-1">Delete</a></h3>
<ul>
<li><code>name_hanlder</code> in <code>configs.py</code></li>
</ul>
<h2 id="20210811-v-046"><a class="header" href="#20210811-v-046">20210811 V 0.4.6</a></h2>
<h3 id="debug-1"><a class="header" href="#debug-1">DEBUG</a></h3>
<ul>
<li>game window doesn't use input <code>(*args, **kwargs)</code> to set up</li>
</ul>
<h3 id="change-6"><a class="header" href="#change-6">Change</a></h3>
<ul>
<li>language type <code>zh-cn</code> -&gt; <code>zh-CN</code></li>
<li>game window config now use <code>configs/main.config</code> to config</li>
<li><code>on_mouse_click</code> function's debug message now use <code>self.lang</code> to debug message (witch is multi-language)</li>
<li>server client and main now use <code>logging.getLogger()</code></li>
</ul>
<h3 id="add-7"><a class="header" href="#add-7">Add</a></h3>
<ul>
<li><code>[window_default]</code> in <code>configs/main.config</code></li>
<li>server and client now will output <code>PID</code> and <code>PPID</code> info as <code>INFO</code></li>
<li><code>client</code> now change to <code>ClientWindow</code></li>
</ul>
<h3 id="delete-2"><a class="header" href="#delete-2">Delete</a></h3>
<ul>
<li>all game window render has been deleted
<ul>
<li>will be rewritten in 0.5.0</li>
</ul>
</li>
<li>delete some useless code</li>
<li>delete some useless file</li>
</ul>
<h2 id="20210723-v-045"><a class="header" href="#20210723-v-045">20210723 V 0.4.5</a></h2>
<h3 id="debug-2"><a class="header" href="#debug-2">DEBUG</a></h3>
<ul>
<li><code>new_thread.py</code> link of stackoverflow have an extra 'find' in the middle REMOVED</li>
</ul>
<h3 id="add-8"><a class="header" href="#add-8">Add</a></h3>
<ul>
<li><code>new_thread.py</code> now can use @new_thread to get a threaded fun</li>
</ul>
<h3 id="change-7"><a class="header" href="#change-7">Change</a></h3>
<ul>
<li><code>README.md</code> and <code>README-cn.md</code> change URL to file path</li>
<li><code>README.md</code> and <code>README-cn.md</code> some label style change</li>
<li>Pre-installed <code>pyglet</code> upgrade from <code>1.5.16</code> -&gt; <code>1.5.18</code></li>
<li>Pre-installed <code>json5</code> upgrade from <code>0.9.5</code> -&gt; <code>0.9.6</code></li>
</ul>
<h2 id="20210708-v-044"><a class="header" href="#20210708-v-044">20210708 V 0.4.4</a></h2>
<h3 id="ps"><a class="header" href="#ps">PS</a></h3>
<ul>
<li>Nice day everyone!</li>
<li>I have finish my final exam on grade 8.</li>
<li>Will soon reach grade 9, so update will be late very much.</li>
</ul>
<h3 id="change-8"><a class="header" href="#change-8">Change</a></h3>
<ul>
<li>function <code>tools.config()</code> way of raise error change <code>tools.report_file_error()</code></li>
<li>function <code>tools.cb()</code> change name to <code>tools.format_bool()</code></li>
<li>config.py clear some useless import class</li>
<li>changing configfile to main.config *doing</li>
</ul>
<h3 id="test-change"><a class="header" href="#test-change">Test change</a></h3>
<ul>
<li><code>test_config_file.py</code></li>
<li><code>test_for_speed.py</code></li>
<li><code>test_logging_conf.py</code></li>
<li><code>test_speed_of_sprite.py</code></li>
</ul>
<h2 id="20210626-v-043"><a class="header" href="#20210626-v-043">2021/06/26 V 0.4.3</a></h2>
<h3 id="debug-3"><a class="header" href="#debug-3">DEBUG</a></h3>
<ul>
<li>some name_format bug</li>
</ul>
<h3 id="change-9"><a class="header" href="#change-9">Change</a></h3>
<ul>
<li>doing: change render pip line ('m really doing)</li>
<li>default FPS from 120 -&gt; 60</li>
</ul>
<h3 id="add-9"><a class="header" href="#add-9">Add</a></h3>
<ul>
<li>add performance_test folder</li>
<li>add some performances test</li>
</ul>
<h2 id="20210524-v-042"><a class="header" href="#20210524-v-042">2021/05/24 V 0.4.2</a></h2>
<h3 id="debug-4"><a class="header" href="#debug-4">DEBUG</a></h3>
<ul>
<li>using python version 3.8.9 still report <code>best3.8+</code>(lang name)(actually is debugging)</li>
</ul>
<h3 id="change-10"><a class="header" href="#change-10">Change</a></h3>
<ul>
<li>change back how configs.py/name_format work(replace str) fix some issue</li>
<li>doing remake for config sys (lazy yes!)</li>
<li>clear bin/pyglet (already exits in bin/lib)</li>
</ul>
<h3 id="need-do"><a class="header" href="#need-do">Need Do</a></h3>
<ul>
<li>debug name_format</li>
</ul>
<h2 id="20210417-v-041"><a class="header" href="#20210417-v-041">2021/04/17 V 0.4.1</a></h2>
<p>PS:</p>
<ul>
<li>
<p><code>Va.b.c</code></p>
</li>
<li>
<p>a : Big Version (Big rewrite times) (now at DEMO making)</p>
</li>
<li>
<p>b : Middle Rewrite Times (Yes I've rewritten for 4 times)</p>
</li>
<li>
<p>c : normal updates</p>
</li>
</ul>
<h3 id="debug-5"><a class="header" href="#debug-5">DEBUG</a></h3>
<ul>
<li>solve pre-installed lib can't use</li>
<li>solve pre-installed lib's bug</li>
<li>some other bugs</li>
</ul>
<h3 id="change-11"><a class="header" href="#change-11">Change</a></h3>
<ul>
<li>plan to change config file format to .config (plan to)</li>
<li>reformat all files (including libs)</li>
</ul>
<h2 id="20210409-v-0234"><a class="header" href="#20210409-v-0234">2021/04/09 V 0.2.3/4</a></h2>
<h3 id="add-10"><a class="header" href="#add-10">Add</a></h3>
<ul>
<li>support many things(also forget)</li>
</ul>
<h3 id="change-12"><a class="header" href="#change-12">Change</a></h3>
<ul>
<li><code>tools.name_handler()</code> now use <code>str.format</code> to handler str</li>
<li><code>DR/sys_value</code> folder now move to <code>DR/configs/sys_value</code></li>
</ul>
<h3 id="debug-6"><a class="header" href="#debug-6">DEBUG</a></h3>
<ul>
<li>many <code>tools.name_handler()</code> use bug(cause crashes)</li>
<li><code>{date}</code> can be successful use in <code>tools.name_handler()</code> (if you define the format of date)</li>
<li>log file's filename incorrect (should be <code>xxxx-xx-xx xx-xx-xx DR.log</code> but be <code>{date} DR.log</code>)</li>
</ul>
<h2 id="20210327-v-0221"><a class="header" href="#20210327-v-0221">2021/03/27 V 0.2.2/1</a></h2>
<h3 id="add-11"><a class="header" href="#add-11">Add</a></h3>
<ul>
<li>add local libs
<ul>
<li><code>pyglet 1.5.15</code></li>
<li><code>json5 0.9.5</code></li>
</ul>
</li>
</ul>
<p>PS: now I'm not sure witch lib will be import first</p>
<p>the local lib or the pip libs</p>
<p>So I'll add some other code to make sure that DR will first try to import pip libs</p>
<p>not the local libs (todo)</p>
<h3 id="debug-7"><a class="header" href="#debug-7">DEBUG</a></h3>
<ul>
<li>some bugs(I forget them)</li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="next" href="contributors.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="next" href="contributors.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</body>
</html>

13
docs/page/output.py Normal file
View File

@ -0,0 +1,13 @@
import shutil
def copy():
# 复制 ./docs/index.html 到 ../ 文件夹中
try:
shutil.copyfile('./docs/index.html', '../index.html')
except OSError:
pass
if __name__ == '__main__':
copy()

4
docs/page/serve.ps1 Normal file
View File

@ -0,0 +1,4 @@
mdbook.exe serve `
-p 1114 `
-n 192.168.3.45 `

5
docs/page/src/404.md Normal file
View File

@ -0,0 +1,5 @@
# 嘿 看啥呢
- 很明显,这里没有你想要的东西
- 404啦

14
docs/page/src/SUMMARY.md Normal file
View File

@ -0,0 +1,14 @@
# Summary
- [update logs](./update_logs.md)
- [contributors](./contributors.md)
- [rua! 奇怪的东西](./rua!.md)
- [nuitka test](./nuitka/20221121_nuitka_performs.md)
- [plan features](./plan_features/README.md)
- [格式](./plan_features/格式.md)
- [更多保存信息](./plan_features/extra-save-info.md)
- [联机](./plan_features/multi-connect.md)
- [muit control](./plan_features/multi-control.md)

View File

@ -0,0 +1,3 @@
# 如何帮助 DR 开发
aaaa

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB