cowsay_intro_for_bash/htmlTranslator.c

80 lines
2.3 KiB
C
Raw Permalink Normal View History

2026-09-29 21:50:14 +00:00
#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, "&nbsp;", 6) == 0) {
*dest++ = ' ';
src += 6;
continue;
}
// Normales Zeichen kopieren
*dest++ = *src++;
}
*dest = '\0';
char* optimized = realloc(result, (dest - result) + 1);
return optimized ? optimized : result;
}