diff --git a/src/elogd.c b/src/elogd.c
index 0f741583..85f67b5d 100755
--- a/src/elogd.c
+++ b/src/elogd.c
@@ -6,6 +6,9 @@
Contents: Web server program for Electronic Logbook ELOG
$Log$
+ Revision 1.26 2003/02/24 13:53:39 midas
+ Improved display of links in messages
+
Revision 1.25 2003/02/24 13:39:33 midas
Fixed problem with emails depending on MOptions attribute
@@ -3296,9 +3299,11 @@ void rsputs(const char *str)
/*------------------------------------------------------------------*/
+char *list[] = { "http://", "https://", "ftp://", "mailto:", "elog:", "" };
+
void rsputs2(const char *str)
{
-int i, j, k;
+int i, j, k, l;
char *p, link[256];
if (strlen_retbuf + strlen(str) > sizeof(return_buffer))
@@ -3308,90 +3313,56 @@ char *p, link[256];
j = strlen_retbuf;
for (i=0 ; i<(int)strlen(str) ; i++)
{
- if (strncmp(str+i, "http://", 7) == 0)
+ for (l=0 ; list[l][0] ; l++)
{
- p = (char *) (str+i+7);
- i += 7;
- for (k=0 ; *p && *p != ' ' && *p != ',' && *p != '\t' && *p != '\n' && *p != '\r'; k++,i++)
- link[k] = *p++;
- link[k] = 0;
- i--;
-
- sprintf(return_buffer+j, "http://%s", link, link);
- j += strlen(return_buffer+j);
- }
- else if (strncmp(str+i, "https://", 8) == 0)
- {
- p = (char *) (str+i+8);
- i += 8;
- for (k=0 ; *p && *p != ' ' && *p != ',' && *p != '\t' && *p != '\n' && *p != '\r'; k++,i++)
- link[k] = *p++;
- link[k] = 0;
- i--;
-
- sprintf(return_buffer+j, "https://%s", link, link);
- j += strlen(return_buffer+j);
- }
- else if (strncmp(str+i, "ftp://", 6) == 0)
- {
- p = (char *) (str+i+6);
- i += 6;
- for (k=0 ; *p && *p != ' ' && *p != ',' && *p != '\t' && *p != '\n' && *p != '\r'; k++,i++)
- link[k] = *p++;
- link[k] = 0;
- i--;
-
- sprintf(return_buffer+j, "ftp://%s", link, link);
- j += strlen(return_buffer+j);
- }
- else if (strncmp(str+i, "mailto:", 7) == 0)
- {
- p = (char *) (str+i+7);
- i += 7;
- for (k=0 ; *p && *p != '>' && *p != ' ' && *p != ',' && *p != '\t' && *p != '\n' && *p != '\r'; k++,i++)
- link[k] = *p++;
- link[k] = 0;
- i--;
-
- sprintf(return_buffer+j, "%s", link, link);
- j += strlen(return_buffer+j);
- }
- else if (strncmp(str+i, "elog:", 5) == 0)
- {
- p = (char *) (str+i+5);
- i += 5;
- for (k=0 ; *p && *p != '>' && *p != ' ' && *p != ',' && *p != '\t' && *p != '\n' && *p != '\r'; k++,i++)
- link[k] = *p++;
- link[k] = 0;
- i--;
-
- /* if link contains '/' (reference to other logbook), add ".." in front */
- if (strchr(link, '/'))
- sprintf(return_buffer+j, "elog:%s", link, link);
- else
- sprintf(return_buffer+j, "elog:%s", link, link);
- j += strlen(return_buffer+j);
- }
- else if (strncmp(str+i, "
", 4) == 0)
- {
- strcpy(return_buffer+j, "
");
- j+=4;
- i+=3;
- }
- else
- switch (str[i])
+ if (strncmp(str+i, list[l], strlen(list[l])) == 0)
{
- case '<': strcat(return_buffer, "<"); j+=4; break;
- case '>': strcat(return_buffer, ">"); j+=4; break;
+ p = (char *) (str+i+strlen(list[l]));
+ i += strlen(list[l]);
+ for (k=0 ; *p && strcspn(p, "> ,\t\n\r({[)}]") ; k++,i++)
+ link[k] = *p++;
+ link[k] = 0;
+ i--;
- /* the translation for the search highliting */
- case '\001' : strcat(return_buffer, "<"); j++; break;
- case '\002' : strcat(return_buffer, ">"); j++; break;
- case '\003' : strcat(return_buffer, "\""); j++; break;
- case '\004' : strcat(return_buffer, " "); j++; break;
+ if (strcmp(list[l], "elog:") == 0)
+ {
+ /* if link contains '/' (reference to other logbook), add ".." in front */
+ if (strchr(link, '/'))
+ sprintf(return_buffer+j, "elog:%s", link, link);
+ else
+ sprintf(return_buffer+j, "elog:%s", link, link);
+ }
+ else
+ sprintf(return_buffer+j, "%s%s", list[l], link, list[l], link);
- default: return_buffer[j++] = str[i];
+ j += strlen(return_buffer+j);
+ break;
}
+ }
+
+ if (!list[l][0])
+ {
+ if (strncmp(str+i, "
", 4) == 0)
+ {
+ strcpy(return_buffer+j, "
");
+ j+=4;
+ i+=3;
+ }
+ else
+ switch (str[i])
+ {
+ case '<': strcat(return_buffer, "<"); j+=4; break;
+ case '>': strcat(return_buffer, ">"); j+=4; break;
+
+ /* the translation for the search highliting */
+ case '\001' : strcat(return_buffer, "<"); j++; break;
+ case '\002' : strcat(return_buffer, ">"); j++; break;
+ case '\003' : strcat(return_buffer, "\""); j++; break;
+ case '\004' : strcat(return_buffer, " "); j++; break;
+
+ default: return_buffer[j++] = str[i];
+ }
+ }
}
return_buffer[j] = 0;