From f56a6c683626a5d3126afe68e37199be023f844a Mon Sep 17 00:00:00 2001
From: Frederik Hennig <frederik.hennig@fau.de>
Date: Thu, 30 Nov 2023 12:01:52 +0100
Subject: [PATCH] refactored indentation

---
 src/pystencilssfg/configuration.py          |  6 +++---
 src/pystencilssfg/context.py                | 15 +++++++++++----
 src/pystencilssfg/emitters/cpu/basic_cpu.py | 11 +++--------
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/src/pystencilssfg/configuration.py b/src/pystencilssfg/configuration.py
index 355be5e..cee313f 100644
--- a/src/pystencilssfg/configuration.py
+++ b/src/pystencilssfg/configuration.py
@@ -7,11 +7,10 @@ from os import path
 from enum import Enum, auto
 from dataclasses import dataclass, replace, asdict, InitVar
 from argparse import ArgumentParser
+from textwrap import indent
 
 from importlib import util as iutil
 
-from jinja2.filters import do_indent
-
 from .exceptions import SfgException
 
 HEADER_FILE_EXTENSIONS = {'h', 'hpp'}
@@ -39,7 +38,8 @@ class SfgCodeStyle:
     indent_width: int = 2
 
     def indent(self, s: str):
-        return do_indent(s, self.indent_width, first=True)
+        prefix = " " * self.indent_width
+        return indent(s, prefix)
 
 
 @dataclass
diff --git a/src/pystencilssfg/context.py b/src/pystencilssfg/context.py
index 96649db..e7c5ddf 100644
--- a/src/pystencilssfg/context.py
+++ b/src/pystencilssfg/context.py
@@ -15,7 +15,7 @@ class SfgContext:
         self._code_namespace: str | None = None
 
         #   Source Components
-        self._prelude: list[str] = []
+        self._prelude: str = ""
         self._includes: set[SfgHeaderInclude] = set()
         self._definitions: list[str] = []
         self._kernel_namespaces = {self._default_kernel_namespace.name: self._default_kernel_namespace}
@@ -58,12 +58,19 @@ class SfgContext:
     #   Prelude, Includes, Definitions, Namespace
     # ----------------------------------------------------------------------------------------------
 
-    def prelude(self) -> Generator[str, None, None]:
+    @property
+    def prelude_comment(self) -> str:
         """The prelude is a comment block printed at the top of both generated files."""
-        yield from self._prelude
+        return self._prelude
 
     def append_to_prelude(self, code_str: str):
-        self._prelude.append(code_str)
+        if self._prelude:
+            self._prelude += "\n"
+
+        self._prelude += code_str
+
+        if not code_str.endswith("\n"):
+            self._prelude += "\n"
 
     def includes(self) -> Generator[SfgHeaderInclude, None, None]:
         """Includes of headers. Public includes are added to the header file, private includes
diff --git a/src/pystencilssfg/emitters/cpu/basic_cpu.py b/src/pystencilssfg/emitters/cpu/basic_cpu.py
index 25c952c..d49addd 100644
--- a/src/pystencilssfg/emitters/cpu/basic_cpu.py
+++ b/src/pystencilssfg/emitters/cpu/basic_cpu.py
@@ -1,5 +1,6 @@
 from typing import cast
 from jinja2 import Environment, PackageLoader, StrictUndefined
+from textwrap import indent
 
 from os import path
 
@@ -59,13 +60,7 @@ class BasicCpuEmitter:
 
 
 def get_prelude_comment(ctx: SfgContext):
-    prelude_lines = []
-    for p in ctx.prelude():
-        prelude_lines += p.splitlines()
-        prelude_lines += [""]   # empty line in-between
-    prelude_lines = prelude_lines[:-1]
-
-    if not prelude_lines:
+    if not ctx.prelude_comment:
         return ""
 
-    return "\n".join(["/**"] + [f"* {line}" for line in prelude_lines] + ["*/"])
+    return "/*\n" + indent(ctx.prelude_comment, "* ", predicate=lambda _: True) + "*/\n"
-- 
GitLab