diff --git a/src/generatedoc.c b/src/generatedoc.c index fc6929e1..a60610e1 100644 --- a/src/generatedoc.c +++ b/src/generatedoc.c @@ -51,6 +51,9 @@ const char * const skins[] = { /// Export the help to HTML files static int Export_help(const char * path); +/// Convert from latin1 to utf-8 +static int fputs_utf8(const char * str, size_t len, FILE * f); + int main(int argc,char * argv[]) { int r; @@ -193,7 +196,7 @@ static const char * Export_help_table(FILE * f, unsigned int page) fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "%s\n", title); - fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); @@ -253,9 +256,10 @@ static const char * Export_help_table(FILE * f, unsigned int page) if (link_end == NULL) link_end = link + strlen(link); } - fprintf(f, "%.*s", (int)(link - table[index].Text), table[index].Text); - fprintf(f, "%.*s%s", prefix, - (int)(link_end - link), link, (int)(link_end - link), link, link_end); + fputs_utf8(table[index].Text, (size_t)(link - table[index].Text), f); + fprintf(f, "%.*s", prefix, + (int)(link_end - link), link, (int)(link_end - link), link); + fputs_utf8(link_end, (size_t)-1, f); } else { @@ -263,16 +267,19 @@ static const char * Export_help_table(FILE * f, unsigned int page) const char * text = table[index].Text; while (text[0] != '\0') { - size_t i = strcspn(text, "<>"); + size_t i = strcspn(text, "<>&"); if (text[i] == '\0') { // no character to escape - fprintf(f, "%s", text); + fputs_utf8(text, (size_t)-1, f); break; } if (i > 0) - fprintf(f, "%.*s", (int)i, text); + fputs_utf8(text, (size_t)i, f); switch(text[i]) { + case '&': + fprintf(f, "&"); + break; case '<': fprintf(f, "<"); break; @@ -343,7 +350,7 @@ static int Export_help(const char * path) fprintf(findex, "\n"); fprintf(findex, "\n"); fprintf(findex, "GrafX2 Help\n"); - fprintf(findex, "\n"); + fprintf(findex, "\n"); fprintf(findex, "\n"); fprintf(findex, "