X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fserv_func.c;h=fbaa088d8b583a98fbaeef989f85380eb9eee4da;hb=3343e92810bc5ec3f3602cf41dc64f7480be4d28;hp=aa43d350b84cab3a39fa8947b7e150d53e047e9d;hpb=de3241f3927abe86a679be13fccad5bdefb756b0;p=citadel.git diff --git a/webcit/serv_func.c b/webcit/serv_func.c index aa43d350b..fbaa088d8 100644 --- a/webcit/serv_func.c +++ b/webcit/serv_func.c @@ -155,6 +155,74 @@ void _fmout(StrBuf *Target, char *align) wprintf("
\n"); } +void FmOut(StrBuf *Target, char *align, StrBuf *Source) +{ + const char *ptr, *pte; + const char *BufPtr = NULL; + StrBuf *Line = NewStrBuf(); + StrBuf *Line1 = NewStrBuf(); + StrBuf *Line2 = NewStrBuf(); + int bn = 0; + int bq = 0; + int i, n, done = 0; + long len; + int intext = 0; + + StrBufAppendPrintf(Target, "
\n", align); + while ((n = StrBufSipLine(Line, Source, &BufPtr), n >= 0) && !done) + { + done = n == 0; + bq = 0; + i = 0; + ptr = ChrPtr(Line); + len = StrLength(Line); + pte = ptr + len; + + if ((intext == 1) && (isspace(*ptr))) { + StrBufAppendBufPlain(Target, HKEY("
"), 0); + } + intext = 1; + if (isspace(*ptr)) while ((ptr < pte) && + ((*ptr == '>') || + isspace(*ptr))) + { + if (*ptr == '>') + bq++; + ptr ++; + i++; + } + + /** + * Quoted text should be displayed in italics and in a + * different colour. This code understands Citadel-style + * " >" quotes and will convert to
tags. + */ + if (i > 0) StrBufCutLeft(Line, i); + + + for (i = bn; i < bq; i++) + StrBufAppendBufPlain(Target, HKEY("
"), 0); + for (i = bq; i < bn; i++) + StrBufAppendBufPlain(Target, HKEY("
"), 0); + bn = bq; + + if (StrLength(Line) == 0) + continue; + /** Activate embedded URL's */ + UrlizeText(Line1, Line, Line2); + + StrEscAppend(Target, Line1, NULL, 0, 0); + + StrBufAppendBufPlain(Target, HKEY("\n"), 0); + } + for (i = 0; i < bn; i++) + StrBufAppendBufPlain(Target, HKEY("
"), 0); + StrBufAppendBufPlain(Target, HKEY("

\n"), 0); + FreeStrBuf(&Line); + FreeStrBuf(&Line1); + FreeStrBuf(&Line2); +} +