diff --git a/src/elogd.c b/src/elogd.c
index 4e1a2196..5c0ae24b 100755
--- a/src/elogd.c
+++ b/src/elogd.c
@@ -6,6 +6,9 @@
Contents: Web server program for Electronic Logbook ELOG
$Log$
+ Revision 1.132 2003/07/15 08:00:04 midas
+ Fixed problem with coloring hyperlinks in find result page
+
Revision 1.131 2003/07/10 16:02:19 midas
Added '-x' flag
@@ -3979,8 +3982,8 @@ char *list[] = { "http://", "https://", "ftp://", "mailto:", "elog:", "file://",
void rsputs2(const char *str)
{
-int i, j, k, l, m;
-char *p, link[256], tmp[256];
+int i, j, k, l, m, n;
+char *p, *pd, link[1000], link_text[1000], tmp[256];
if (strlen_retbuf + (int)strlen(str) > return_buffer_size)
{
@@ -4003,6 +4006,48 @@ char *p, link[256], tmp[256];
link[k] = 0;
i--;
+ /* check if link contains coloring */
+ p = strchr(link, '\001');
+ if (p != NULL)
+ {
+ strlcpy(link_text, link, sizeof(link_text));
+
+ /* skip everything between '<' and '>' */
+ pd = p;
+ while (*pd && *pd != '\002')
+ *p = *pd++;
+
+ strcpy(p, pd+1);
+
+ /* skip '' */
+ p = strchr(link, '\001');
+ if (p != NULL)
+ {
+ pd = p;
+
+ while (*pd && *pd != '\002')
+ *p = *pd++;
+
+ strcpy(p, pd+1);
+ }
+
+ /* correct link text */
+ for (n=0 ; n<(int)strlen(link_text) ; n++)
+ {
+ switch (link_text[n])
+ {
+ /* the translation for the search highliting */
+ case '\001' : link_text[n] = '<'; break;
+ case '\002' : link_text[n] = '>'; break;
+ case '\003' : link_text[n] = '\"'; break;
+ case '\004' : link_text[n] = ' '; break;
+ }
+ }
+
+ }
+ else
+ strlcpy(link_text, link, sizeof(link_text));
+
if (strcmp(list[l], "elog:") == 0)
{
strlcpy(tmp, link, sizeof(tmp));
@@ -4015,14 +4060,14 @@ char *p, link[256], tmp[256];
if (m < (int)strlen(tmp))
/* if link contains reference to other logbook, add ".." in front */
- sprintf(return_buffer+j, "elog:%s", link, link);
+ sprintf(return_buffer+j, "elog:%s", link, link_text);
else if (link[0] == '/')
- sprintf(return_buffer+j, "elog:%s", _current_message_id, link, link);
+ sprintf(return_buffer+j, "elog:%s", _current_message_id, link, link_text);
else
- sprintf(return_buffer+j, "elog:%s", link, link);
+ sprintf(return_buffer+j, "elog:%s", link, link_text);
}
else
- sprintf(return_buffer+j, "%s%s", list[l], link, list[l], link);
+ sprintf(return_buffer+j, "%s%s", list[l], link, list[l], link_text);
j += strlen(return_buffer+j);
break;