80 lines
2.3 KiB
C
80 lines
2.3 KiB
C
|
|
#include <stdlib.h>
|
||
|
|
#include <string.h>
|
||
|
|
#include "htmlTranslator.h"
|
||
|
|
|
||
|
|
char* html_to_bash_format(const char* input) {
|
||
|
|
if (!input) return NULL;
|
||
|
|
|
||
|
|
// Großzügiger Puffer
|
||
|
|
size_t max_len = strlen(input) * 4 + 1;
|
||
|
|
char* result = (char*)malloc(max_len);
|
||
|
|
if (!result) return NULL;
|
||
|
|
|
||
|
|
char* dest = result;
|
||
|
|
const char* src = input;
|
||
|
|
|
||
|
|
while (*src) {
|
||
|
|
// Tabulatoren abfangen und durch EIN Leerzeichen ersetzen.
|
||
|
|
// Verhindert, dass das Terminal-Rendering den ASCII-Kasten zerreißt.
|
||
|
|
if (*src == '\t') {
|
||
|
|
*dest++ = ' ';
|
||
|
|
src++;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Erkennung für <br>, <BR>, <br/>, <br > etc.
|
||
|
|
if (src[0] == '<' && (src[1] == 'b' || src[1] == 'B') && (src[2] == 'r' || src[2] == 'R')) {
|
||
|
|
const char *temp = src + 3;
|
||
|
|
// Überspringe eventuelle Leerzeichen oder Slashes im Tag
|
||
|
|
while (*temp == ' ' || *temp == '/') temp++;
|
||
|
|
|
||
|
|
if (*temp == '>') {
|
||
|
|
*dest++ = '\n';
|
||
|
|
src = temp + 1;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Fettschrift (Case-Insensitive)
|
||
|
|
if (strncmp(src, "<b>", 3) == 0 || strncmp(src, "<B>", 3) == 0) {
|
||
|
|
strcpy(dest, "\033[1m");
|
||
|
|
dest += 4;
|
||
|
|
src += 3;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
if (strncmp(src, "</b>", 4) == 0 || strncmp(src, "</B>", 4) == 0) {
|
||
|
|
strcpy(dest, "\033[22m");
|
||
|
|
dest += 5;
|
||
|
|
src += 4;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Kursiv (Case-Insensitive)
|
||
|
|
if (strncmp(src, "<i>", 3) == 0 || strncmp(src, "<I>", 3) == 0) {
|
||
|
|
strcpy(dest, "\033[3m");
|
||
|
|
dest += 4;
|
||
|
|
src += 3;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
if (strncmp(src, "</i>", 4) == 0 || strncmp(src, "</I>", 4) == 0) {
|
||
|
|
strcpy(dest, "\033[23m");
|
||
|
|
dest += 5;
|
||
|
|
src += 4;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
// HTML-Leerzeichen
|
||
|
|
if (strncmp(src, " ", 6) == 0) {
|
||
|
|
*dest++ = ' ';
|
||
|
|
src += 6;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Normales Zeichen kopieren
|
||
|
|
*dest++ = *src++;
|
||
|
|
}
|
||
|
|
*dest = '\0';
|
||
|
|
|
||
|
|
char* optimized = realloc(result, (dest - result) + 1);
|
||
|
|
return optimized ? optimized : result;
|
||
|
|
}
|