Merge texts #10

Merged
Rayawa merged 2 commits from main into main 2022-06-06 12:32:06 +08:00
11 changed files with 45 additions and 172 deletions
Showing only changes of commit 8b0988fb6b - Show all commits

1
.gitignore vendored
View File

@ -146,3 +146,4 @@ dmypy.json
# some other thing # some other thing
other things/ other things/
.git-/

View File

@ -35,6 +35,13 @@ class CommandQMarkMissing(CommandParseError):
例如: /command "aawwdawda awdaw """ 例如: /command "aawwdawda awdaw """
class CommandQMarkConflict(CommandParseError):
"""命令中引号位置冲突
例如: /command "aaaa "aaaa aaaa"""
first_qmark_pos = None
conflict_qmark_pos = None
class CommandQMarkPreMissing(CommandQMarkMissing): class CommandQMarkPreMissing(CommandQMarkMissing):
"""命令中 前面的引号缺失 """命令中 前面的引号缺失
例如: /command aaaa" aaaaaa""" 例如: /command aaaa" aaaaaa"""

View File

@ -23,7 +23,7 @@ from decimal import Decimal
# Difficult_Rocket function # Difficult_Rocket function
from Difficult_Rocket.command import line, tree from Difficult_Rocket.command import line, tree
from Difficult_Rocket.api import new_thread from Difficult_Rocket.utils import new_thread
from Difficult_Rocket.utils.translate import tr from Difficult_Rocket.utils.translate import tr
from Difficult_Rocket.guis.widgets import InputBox from Difficult_Rocket.guis.widgets import InputBox
# from Difficult_Rocket.client.screen import DRScreen # from Difficult_Rocket.client.screen import DRScreen

View File

@ -19,6 +19,7 @@ from decimal import Decimal
from libs.pyglet.clock import get_frequency from libs.pyglet.clock import get_frequency
class FpsLogger: class FpsLogger:
def __init__(self, def __init__(self,
stable_fps: int = 60, stable_fps: int = 60,
@ -32,7 +33,6 @@ class FpsLogger:
self._max_fps = stable_fps self._max_fps = stable_fps
self._min_fps = stable_fps self._min_fps = stable_fps
def update_tick(self, def update_tick(self,
tick: Decimal): tick: Decimal):
now_fps = get_frequency() now_fps = get_frequency()

View File

@ -14,7 +14,7 @@ gitee: @shenjackyuanjie
# system function # system function
import re import re
from typing import Union, Optional, Type, Tuple from typing import Union, Optional, Type, Tuple, List
# DR # DR
from Difficult_Rocket.api.Exp.command import * from Difficult_Rocket.api.Exp.command import *
@ -39,22 +39,16 @@ class CommandText:
self.tree_node = tree_list self.tree_node = tree_list
@staticmethod @staticmethod
def parse_command(raw_command: Union[str, "CommandText"]) -> Tuple[list, Union[Type[CommandParseError], type(True)]]: def parse_text(raw_text: str) -> str:
spilt_list = str(raw_command).split(" ") q_mark_iter = re.finditer('\\"', raw_text)
for q_mark in q_mark_iter:
...
spilts = [None, None] @staticmethod
for spited in spilt_list: def parse_command(raw_command: Union[str, "CommandText"]) -> Tuple[List[str], Union[CommandParseError, type(True)]]:
if len(spited) > 1: spilt_list = re.split(r'', raw_command)
if spited[0] == "\"": # 开头有一个 " done_list = [re.sub(r'\\"', '"', raw_text) for raw_text in spilt_list]
if spilts[0] is None: # 如果没有标记一个字符串开头 return done_list, True # 完事了
pass
else: # 已经标记了一个字符串开头
return spilt_list, CommandQMarkPosError
if spited[-1] == "\"" and spited[-2] != "\\": # 末尾有一个没有被转义的 "
...
return spilt_list, True
def find(self, text: str) -> Union[str, bool]: def find(self, text: str) -> Union[str, bool]:
finding = re.match(text, self.text) finding = re.match(text, self.text)

View File

@ -19,7 +19,7 @@ from decimal import Decimal
# from DR # from DR
from utils import translate from utils import translate
from Difficult_Rocket.api import new_thread from Difficult_Rocket.utils import new_thread
from Difficult_Rocket.command.api import CommandText from Difficult_Rocket.command.api import CommandText
# from libs.pyglet # from libs.pyglet

View File

@ -10,3 +10,7 @@ mail: 3695888@qq.com
github: @shenjackyuanjie github: @shenjackyuanjie
gitee: @shenjackyuanjie gitee: @shenjackyuanjie
""" """
from .new_thread import new_thread
__all__ = ['new_thread']

View File

@ -19,11 +19,6 @@ GNU Lesser General Public License v3.0GNU LGPL v3)
(have some changes) (have some changes)
""" """
__all__ = [
'new_thread',
'FunctionThread'
]
def copy_signature(target: Callable, origin: Callable) -> Callable: def copy_signature(target: Callable, origin: Callable) -> Callable:
""" """

View File

@ -194,142 +194,3 @@ def C_R_P(position, degrees): # stand for calculation
sin = math.sin(radians) sin = math.sin(radians)
rotated_pos = (position[0] * cos - position[1] * sin, position[0] * sin + position[1] * cos) rotated_pos = (position[0] * cos - position[1] * sin, position[0] * sin + position[1] * cos)
return rotated_pos return rotated_pos
"""
Physics calculation
"""
def is_decimal(A: any) -> bool:
if isinstance(A, decimal.Decimal):
return False
else:
return True
def F_D(A: decimal, B: decimal) -> decimal:
if is_decimal(A) and is_decimal(B):
return A / B
def F_Mu(A: decimal, B: decimal) -> decimal:
if is_decimal(A) and is_decimal(B):
return A * B
def F_Mi(A: decimal, B: decimal) -> decimal:
if is_decimal(A) and is_decimal(B):
return A - B
def F_A(A: decimal, B: decimal) -> decimal:
if is_decimal(A) and is_decimal(B):
return A + B
def D_C(listA: list, listB: list): # stand for Duplicate check
"""
usage:\n
input two list\n
the fun will do duplicate check and sort then\n
the fun won't return any thing just change the list now
"""
for unit in listB:
if unit in listA:
listA.remove(unit)
listB.remove(unit)
else:
continue
listA.sort()
listB.sort()
def S_C_float_check(SC): # stand for Scientific notation's float check
"""
formats:
SC list format:docs.basic_config.json:basic_number"""
while SC[0] >= 10:
SC[0] = F_D(SC[0], 10)
SC[1] += 1
while SC[0] < 1:
SC[0] = F_Mu(SC[0], 10)
SC[1] -= 1
def S_N_M(*SN): # stand for Scientific notation multiple
"""
formats:
A & B & C list format:docs.basic_config.json:basic_number"""
if len(SN) < 2:
raise TypeError('it need more than 1!')
elif len(SN) == 2:
return __S_N_M(SN[0], SN[1])
else:
R = __S_N_M(SN[0], SN[1])
for A in SN[2:]:
R = __S_N_M(R, A)
return R
def __S_N_M(A, B):
"""
formats:
A & B list format:docs.basic_config.json:basic_number"""
R = [F_Mu(A[0], B[0]), A[1] + B[1]]
S_C_float_check(R)
Unit1, Unit2 = A[2] + B[2], A[3] + B[3]
if Unit1 is None:
Unit1 = []
D_C(Unit1, Unit2)
R += [Unit1, Unit2]
return R
def S_N_D(A, B): # stand for Scientific notation divided
"""
formats:
A & B list format:docs.basic_config:basic_number"""
R = [F_D(A[0], B[0]), A[1] - B[1]]
S_C_float_check(R)
Unit1, Unit2 = A[2] + B[3], A[3] + B[2]
if Unit1 is None:
Unit1 = []
D_C(Unit1, Unit2)
R += [Unit1, Unit2]
return R
def G_C(M, m, R, G): # stand for gravity calculation
"""
formats:
M : ship's mass
m : planet's mass
R : distance to the planet
G : Gravitational constant
M & m & R format: docs.basic_config:basic_number
"""
g = configs.basic_force()
A = S_N_M(M, m, G)
g = S_N_D(A, S_N_M(R, R))
return g
def distance(A, B):
"""
formats:
A & B format: docs.basic_config:basic_poi
"""
poi_dis = configs.basic_poi()
for x in A, B:
x = decimal.Decimal(str(x))
xd = A[0] - B[0]
yd = A[1] - B[1]
poi_dis[0] = xd
poi_dis[1] = yd
# 勾股定理
poi_dis[0] **= 2
poi_dis[1] **= 2
poi_dis.append(poi_dis[0] + poi_dis[1])
poi_dis[2] **= 0.5
return poi_dis[2]

View File

@ -35,10 +35,10 @@ class Lang:
lang.lang(xxx, xxx)来获取翻译过的值 lang.lang(xxx, xxx)来获取翻译过的值
""" """
def __init__(self, language: str = 'zh-CN'): def __init__(self, language: str = 'zh-CN') -> None:
self.语言 = language self.语言 = language
self.翻译结果 = tools.load_file(f'configs/lang/{language}.json5') self.翻译结果 = tools.load_file(f'configs/lang/{language}.toml')
self.默认翻译 = tools.load_file('configs/lang/zh-CN.json5') self.默认翻译 = tools.load_file('configs/lang/zh-CN.toml')
def __str__(self) -> str: def __str__(self) -> str:
return self.语言 return self.语言
@ -52,22 +52,22 @@ class Lang:
except KeyError: except KeyError:
raise LanguageError(f'there\'s no key {item} in both {self.语言} and zh-CN') raise LanguageError(f'there\'s no key {item} in both {self.语言} and zh-CN')
def __setitem__(self, key, value): def __setitem__(self, key, value) -> None:
if key == 'language' or key == 'lang': if key == 'language' or key == 'lang':
try: try:
self.翻译结果 = tools.load_file(f'configs/lang/{value}.json5') self.翻译结果 = tools.load_file(f'configs/lang/{value}.toml')
self.语言 = value self.语言 = value
except FileNotFoundError: except FileNotFoundError:
raise LanguageError(f'{value}\'s language json5 file not found') raise LanguageError(f'{value}\'s language toml file not found')
else: else:
raise NotImplementedError raise NotImplementedError
def set_language(self, language) -> None: def set_language(self, language) -> None:
try: try:
self.翻译结果 = tools.load_file(f'configs/lang/{language}.json5') self.翻译结果 = tools.load_file(f'configs/lang/{language}.toml')
self.语言 = language self.语言 = language
except FileNotFoundError: except FileNotFoundError:
raise LanguageError(f'{language}\'s language json5 file not found') raise LanguageError(f'{language}\'s language toml file not found')
def lang(self, *args) -> Union[int, str, list, dict]: def lang(self, *args) -> Union[int, str, list, dict]:
try: try:

11
try/mcdr/command_tree.py Normal file
View File

@ -0,0 +1,11 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021-2022 by shenjackyuanjie
# All rights reserved
# -------------------------------
from mcdreforged.api.command import *
test_command_tree = Literal('!!test')
test_command_tree.parse('aaaaa')