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