From 075da2de7f4fcdfc89c53bc58218e08fb0541902 Mon Sep 17 00:00:00 2001 From: wuziji <2193177243@qq.com> Date: Wed, 8 Nov 2023 16:17:59 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6=20NEW:=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BB=8Etab=E7=BC=A9=E8=BF=9B=E5=88=B0{}=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E7=9A=84=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robowaiter/behavior_tree/ptml/ptmlCompiler.py | 53 +++++++++++++++++++ .../behavior_tree/ptml/test/bracket_ptml.ptml | 9 ++++ .../behavior_tree/ptml/test/ptml_test.py | 6 +-- .../behavior_tree/ptml/test/tab_test.ptml | 5 ++ 4 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 robowaiter/behavior_tree/ptml/test/bracket_ptml.ptml create mode 100644 robowaiter/behavior_tree/ptml/test/tab_test.ptml diff --git a/robowaiter/behavior_tree/ptml/ptmlCompiler.py b/robowaiter/behavior_tree/ptml/ptmlCompiler.py index 47a68f7..a265ef9 100644 --- a/robowaiter/behavior_tree/ptml/ptmlCompiler.py +++ b/robowaiter/behavior_tree/ptml/ptmlCompiler.py @@ -33,6 +33,7 @@ def load(scene, ptml_path: str, behaviour_lib_path: str): ) # noting fault, go next + ptml_path = format_trans_to_bracket(ptml_path) input_stream = FileStream(ptml_path, encoding="utf-8") lexer = Lexer(input_stream) @@ -50,3 +51,55 @@ def load(scene, ptml_path: str, behaviour_lib_path: str): walker.walk(ptml, tree) return ptml.bt_root + + +def format_trans_to_bracket(file_path: str) -> str: + """_summary_ + + Args: + file_path (str): _description_ + + Raises: + FileNotFoundError: _description_ + + Returns: + str: the path tp temp file with '{}' form. + """ + import autopep8 + + if not os.path.exists(file_path): + raise FileNotFoundError("Given a fault ptml path: {}".format(file_path)) + + def counter_(input:str) -> int: + length = 0 + for i in range(len(input)): + if input[i] == ' ': + length += 1 + else: + if length % 4 != 0: + raise TabError('Tab length in ptml file should be 4.') + return length + + with open(file_path, 'r') as file: + ptml_new = '' + ptml_tab = file.readlines() + + level = 0 + for i in ptml_tab: + new_level = counter_(i) // 4 + if new_level == level: + ptml_new += i + elif new_level > level: + ptml_new += '{\n' + i + elif new_level < level: + ptml_new += '\n}' + i + level = new_level + ptml_new += '}' + + import re + new_path = re.sub('/[a-zA-Z0-9_]*\.ptml', '/bracket_ptml.ptml',file_path) + with open(new_path, 'w+') as file: + file.write(ptml_new) + return new_path + +# format_trans_to_bracket('/home/wu/RoboWaiter/robowaiter/behavior_tree/ptml/test/tab_test.ptml') \ No newline at end of file diff --git a/robowaiter/behavior_tree/ptml/test/bracket_ptml.ptml b/robowaiter/behavior_tree/ptml/test/bracket_ptml.ptml new file mode 100644 index 0000000..731b714 --- /dev/null +++ b/robowaiter/behavior_tree/ptml/test/bracket_ptml.ptml @@ -0,0 +1,9 @@ +selector +{ + sequence +{ + cond Chatting() + act DealChat() + +} act At(Coffee,Table) +} \ No newline at end of file diff --git a/robowaiter/behavior_tree/ptml/test/ptml_test.py b/robowaiter/behavior_tree/ptml/test/ptml_test.py index d4c84ba..f7c6e53 100644 --- a/robowaiter/behavior_tree/ptml/test/ptml_test.py +++ b/robowaiter/behavior_tree/ptml/test/ptml_test.py @@ -1,8 +1,8 @@ import os import py_trees as ptree -from robowaiter.scene.scene import Scene -from robowaiter.behavior_tree.ptml.ptmlCompiler import load +# from robowaiter.scene.scene import Scene +# from robowaiter.behavior_tree.ptml.ptmlCompiler import load import os from robowaiter import Robot, task_map @@ -13,7 +13,7 @@ if __name__ == '__main__': # create robot project_path = "../../../" - ptml_path = os.path.join(project_path, 'behavior_tree/ptml/test/Test.ptml') + ptml_path = os.path.join(project_path, 'behavior_tree/ptml/test/tab_test.ptml') behavior_lib_path = os.path.join(project_path, 'behavior_lib') robot = Robot(ptml_path, behavior_lib_path) diff --git a/robowaiter/behavior_tree/ptml/test/tab_test.ptml b/robowaiter/behavior_tree/ptml/test/tab_test.ptml new file mode 100644 index 0000000..6753f4e --- /dev/null +++ b/robowaiter/behavior_tree/ptml/test/tab_test.ptml @@ -0,0 +1,5 @@ +selector + sequence + cond Chatting() + act DealChat() + act At(Coffee,Table)