From 168b1d5bb4165761e58bfa5d72e5c7a75e8592df Mon Sep 17 00:00:00 2001 From: Dung Truong Date: Mon, 28 Aug 2023 10:50:58 -0700 Subject: [PATCH] add indentation function with internal modification of hed string --- hed/models/hed_group.py | 4 +++- hed/models/hed_string.py | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/hed/models/hed_group.py b/hed/models/hed_group.py index ba3fc287c..5b0f0387d 100644 --- a/hed/models/hed_group.py +++ b/hed/models/hed_group.py @@ -286,7 +286,7 @@ def __str__(self): """ if self.is_group: return "(" + ",".join([str(child) for child in self.children]) + ")" - return ",".join([str(child) for child in self.children]) + return ", ".join([str(child) for child in self.children]) def get_as_short(self): """ Return this HedGroup as a short tag string. @@ -531,3 +531,5 @@ def find_tags_with_term(self, term, recursive=False, include_groups=2): if include_groups == 0 or include_groups == 1: return [tag[include_groups] for tag in found_tags] return found_tags + + diff --git a/hed/models/hed_string.py b/hed/models/hed_string.py index 84af5e17b..693b6021f 100644 --- a/hed/models/hed_string.py +++ b/hed/models/hed_string.py @@ -383,3 +383,29 @@ def remove_refs(self): ref_tags = [tag for tag in self.get_all_tags() if tag.is_column_ref()] if ref_tags: self.remove(ref_tags) + + def indent(self): + self.sort() + hed_string = self.__str__() + + level_open = [] + level = 0 + indented = "" + prev = '' + for c in hed_string: + if c == "(": + level_open.append(level) + indented += "\n" + "\t"*level + c + level += 1 + elif c == ")": + level = level_open.pop() + if prev == ")": + indented += "\n" + "\t"*level + c + else: + indented += c + + else: + indented += c + prev = c + + return indented \ No newline at end of file