#include <string.h>
#include <errno.h>
#include <limits.h>
+#include <libcitadel.h>
#include "citadel.h"
#include "server.h"
-#include "serv_extensions.h"
#include "control.h"
#include "sysdep_decls.h"
#include "support.h"
#include "config.h"
#include "msgbase.h"
-#include "tools.h"
#include "room_ops.h"
#include "html.h"
*/
char *html_to_ascii(char *inputmsg, int msglen, int screenwidth, int do_citaformat) {
char inbuf[SIZ];
+ int inbuf_len = 0;
char outbuf[SIZ];
char tag[1024];
int done_reading = 0;
do {
/* Fill the input buffer */
- if ( (done_reading == 0) && (strlen(inbuf) < (SIZ-128)) ) {
+ inbuf_len = strlen(inbuf);
+ if ( (done_reading == 0) && (inbuf_len < (SIZ-128)) ) {
ch = *inptr++;
if (ch != 0) {
- inbuf[strlen(inbuf)+1] = 0;
- inbuf[strlen(inbuf)] = ch;
+ inbuf[inbuf_len++] = ch;
+ inbuf[inbuf_len] = 0;
}
else {
done_reading = 1;
}
/* Do some parsing */
- if (strlen(inbuf)>0) {
+ if (!IsEmptyStr(inbuf)) {
+
/* Fold in all the spacing */
- for (i=0; i<strlen(inbuf); ++i) {
+ for (i=0; !IsEmptyStr(&inbuf[i]); ++i) {
if (inbuf[i]==10) inbuf[i]=32;
if (inbuf[i]==13) inbuf[i]=32;
if (inbuf[i]==9) inbuf[i]=32;
inbuf[i] = '?';
} */
}
- for (i=0; i<strlen(inbuf); ++i) {
+ for (i=0; !IsEmptyStr(&inbuf[i]); ++i) {
while ((inbuf[i]==32)&&(inbuf[i+1]==32))
strcpy(&inbuf[i], &inbuf[i+1]);
}
- for (i=0; i<strlen(inbuf); ++i) {
+ for (i=0; !IsEmptyStr(&inbuf[i]); ++i) {
ch = inbuf[i];
}
/* Convert &; tags to the forbidden characters */
- if (strlen(outbuf)>0) for (i=0; i<strlen(outbuf); ++i) {
+ if (!IsEmptyStr(outbuf)) for (i=0; !IsEmptyStr(&outbuf[i]); ++i) {
/* Character entity references */
if (!strncasecmp(&outbuf[i], " ", 6)) {
strcpy(&outbuf[i+3], &outbuf[i+6]);
}
+ else if (!strncasecmp(&outbuf[i], "•", 6)) {
+ outbuf[i] = ' ';
+ outbuf[i+1] = '*';
+ outbuf[i+2] = ' ';
+ strcpy(&outbuf[i+3], &outbuf[i+6]);
+ }
+
else if (!strncasecmp(&outbuf[i], "…", 8)) {
outbuf[i] = '.';
outbuf[i+1] = '.';
strcpy(&outbuf[i+1], &outbuf[i+8]);
}
+ else if (!strncasecmp(&outbuf[i], "“", 7)) {
+ outbuf[i] = '\"';
+ strcpy(&outbuf[i+1], &outbuf[i+7]);
+ }
+
+ else if (!strncasecmp(&outbuf[i], "”", 7)) {
+ outbuf[i] = '\"';
+ strcpy(&outbuf[i+1], &outbuf[i+7]);
+ }
+
+ else if (!strncasecmp(&outbuf[i], "´", 7)) {
+ outbuf[i] = '\'';
+ strcpy(&outbuf[i+1], &outbuf[i+7]);
+ }
+
/* two-digit decimal equivalents */
else if ((!strncmp(&outbuf[i], "&#", 2))
&& (outbuf[i+4] == ';') ) {
}
/* Make sure the output buffer is big enough */
- if ((output_len + strlen(outbuf) + SIZ)
- > outptr_buffer_size) {
+ if ((output_len + strlen(outbuf) + SIZ) > outptr_buffer_size) {
outptr_buffer_size += SIZ;
outptr = realloc(outptr, outptr_buffer_size);
+ if (outptr == NULL) {
+ abort();
+ }
}
/* Output any lines terminated with hard line breaks */
do {
did_out = 0;
- if (strlen(outbuf)>0) {
+ if (strlen(outbuf) > 0) {
for (i = 0; i<strlen(outbuf); ++i) {
if ( (i<(screenwidth-2)) && (outbuf[i]=='\n')) {
- strncpy(&outptr[output_len],
- outbuf, i+1);
+ strncpy(&outptr[output_len], outbuf, i+1);
output_len += (i+1);
if (do_citaformat) {
- strcpy(&outptr[output_len],
- " ");
+ strcpy(&outptr[output_len], " ");
++output_len;
}