diff --git a/.build/preproc/ctags_target_for_gcc_minus_e.cpp b/.build/preproc/ctags_target_for_gcc_minus_e.cpp index 7da623636e616aa97ff591450a0883dcdbf923e5..c8f442e3a3bfc234fe3ac9ef0b7c4803b9387270 100644 --- a/.build/preproc/ctags_target_for_gcc_minus_e.cpp +++ b/.build/preproc/ctags_target_for_gcc_minus_e.cpp @@ -12,7 +12,7 @@ void setup() const char *headers[] = {"Vorname", "Nachname", "Alter", "Stadt", "Beruf", "Unternehmen", "Hobby", "Bemerkung"}; int columnWidths[] = {10, 15, 5, 10, 10, 15, 10, 20}; - SerialTable table(headers, columnWidths, 8); + SerialTable table(headers, columnWidths, 8, true, true); table.printHeader(); // Erstellen von 20 Zeilen mit unterschiedlichen Einträgen diff --git a/README.md b/README.md index f88995229af7cc1891e2a8bf98fd4d08073d74e5..fee8ccc2f253839d067593c3b20078e0831e62d0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # SerialTable (thk_serialTable) Die `SerialTable`-Klasse bietet eine komfortable Möglichkeit, tabellarische Daten über die serielle Schnittstelle auf einem Arduino-Gerät auszugeben. Sie unterstützt die Darstellung von mehrbyteigen UTF-8-Zeichen, wie z.B. Umlauten, und bietet Funktionen, um Textangaben innerhalb definierter Spaltenbreiten zu verwalten. -```cpp +```txt +----------+---------------+-----+----------+----------+---------------+----------+--------------------+ |Vorname |Nachname |Alter|Stadt |Beruf |Unternehmen |Hobby |Bemerkung | +==========+===============+=====+==========+==========+===============+==========+====================+ diff --git a/SerialTable.h b/SerialTable.h index 27731954972edfdee428fc4f1042a2a00c1318b1..11b48b8335d8e230dddb1a8c0d281582e75bbdf3 100644 --- a/SerialTable.h +++ b/SerialTable.h @@ -6,8 +6,8 @@ class SerialTable { public: - SerialTable(const char *headers[], const int columnWidths[], size_t size) - : headers(headers), columnWidths(columnWidths), size(size) {} + SerialTable(const char *headers[], const int columnWidths[], size_t size, bool doTruncateText = false, bool doReplaceUmlauts = false) + : headers(headers), columnWidths(columnWidths), size(size), doTruncateText(doTruncateText), doReplaceUmlauts(doReplaceUmlauts) {} // Diese Methode gibt den Header an die serielle Schnittstelle aus void printHeader() @@ -36,13 +36,18 @@ public: // Erste Phase: Teile jede Zelle in Zeilen und finde maximale Zeilenzahl for (size_t i = 0; i < size; ++i) { - if (truncateText) + if (doReplaceUmlauts) + replaceUmlauts(t_row[i]); + + safeStringCopy(buffer, t_row[i], sizeof(buffer)); + + if (doTruncateText) { - truncateToColumnWidth(t_row[i], columnWidths[i], buffer); + truncateToColumnWidth(buffer, columnWidths[i], buffer); } else { - splitStringByLength(t_row[i], columnWidths[i], buffer); + splitStringByLength(buffer, columnWidths[i], buffer); } // Zähle Zeilen in dieser Zelle @@ -64,7 +69,17 @@ public: // Gehe durch jede Spalte for (size_t col = 0; col < size; ++col) { - if (truncateText) + if (replaceUmlauts) + { + safeStringCopy(buffer, t_row[col], sizeof(buffer)); + replaceUmlauts(buffer); + } + else + { + safeStringCopy(buffer, t_row[col], sizeof(buffer)); + } + + if (doTruncateText) { truncateToColumnWidth(t_row[col], columnWidths[col], buffer); } @@ -119,16 +134,22 @@ public: return output; } - void setTruncateText(bool value) + void setDoReplaceUmlauts(bool value) + { + doReplaceUmlauts = value; + } + + void setdoTruncateText(bool value) { - truncateText = value; + doTruncateText = value; } -public: // private: +public: // private: //public für UnitTests! const char **headers; const int *columnWidths; size_t size; - bool truncateText = false; + bool doTruncateText = false; + bool doReplaceUmlauts = false; static int displayLength(const char *text) { @@ -260,9 +281,9 @@ public: // private: int len = strlen(input); if (len > width) { - width = (width > 3) ? width - 3 : width; + width = (width > 2) ? width - 2 : width; strncpy(output, input, width); - strcpy(output + width, "..."); + strcpy(output + width, ".."); } else { diff --git a/examples/serialTable/serialTable.ino b/examples/serialTable/serialTable.ino index ac42ae46fb8c1ee4de7a9a161dabb0117dbc58ad..0a927d279838e3e37587f60fdcdac427e899905a 100644 --- a/examples/serialTable/serialTable.ino +++ b/examples/serialTable/serialTable.ino @@ -11,7 +11,7 @@ void setup() const char *headers[] = {"Vorname", "Nachname", "Alter", "Stadt", "Beruf", "Unternehmen", "Hobby", "Bemerkung"}; int columnWidths[] = {10, 15, 5, 10, 10, 15, 10, 20}; - SerialTable table(headers, columnWidths, 8); + SerialTable table(headers, columnWidths, 8, true, true); table.printHeader(); // Erstellen von 20 Zeilen mit unterschiedlichen Einträgen