mirror of
https://gitea.psi.ch/ELOG/elog.git
synced 2026-09-08 17:13:56 +00:00
Implemented url and img tags
SVN revision: 1371
This commit is contained in:
parent
0e51d2e802
commit
e33a42c81e
92
src/elogd.c
92
src/elogd.c
@ -6,6 +6,9 @@
|
||||
Contents: Web server program for Electronic Logbook ELOG
|
||||
|
||||
$Log$
|
||||
Revision 1.661 2005/05/15 12:43:30 ritt
|
||||
Implemented url and img tags
|
||||
|
||||
Revision 1.660 2005/05/14 21:45:37 ritt
|
||||
Implemented first ELCode tags
|
||||
|
||||
@ -1369,7 +1372,6 @@ int attr_flags_default[] = {
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
struct {
|
||||
char ext[32];
|
||||
char type[32];
|
||||
@ -1561,6 +1563,16 @@ char *stristr(const char *str, const char *pattern)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void strextract(const char *str, char delim, char *extr, int size)
|
||||
/* extract a substinr "extr" from "str" until "delim" is found */
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0 ; str[i] != delim && i<size-1; i++)
|
||||
extr[i] = str[i];
|
||||
extr[i] = 0;
|
||||
}
|
||||
|
||||
static BOOL chkext(const char *str, const char *ext)
|
||||
{
|
||||
int extl, strl;
|
||||
@ -6035,19 +6047,26 @@ PATTERN_LIST pattern_list[] = {
|
||||
{ "[/code]", "</code>" },
|
||||
|
||||
/* lists */
|
||||
{ "[list]\r", "<ul>" },
|
||||
{ "[list]", "<ul>" },
|
||||
{ "[*]", "<li>" },
|
||||
{ "[/list]\r", "</ul>" },
|
||||
{ "[/list]", "</ul>" },
|
||||
{ "[list=", "<ol type=\"%s\">" },
|
||||
|
||||
/* URLs */
|
||||
{ "[url=", "<a href=\"%s\">" },
|
||||
{ "[url]", "<a href=\"%s\">%s" },
|
||||
{ "[/url]", "</a>" },
|
||||
{ "[email]","<a href=\"mailto:%s\">%s" },
|
||||
{ "[/email]", "</a>" },
|
||||
{ "[img]", "<img src=\"%s\">" },
|
||||
{ "[/img]", "" },
|
||||
{ "[url=", "<a href=\"%#\">%s</a>" },
|
||||
{ "[url]", "<a href=\"%#\">%s</a>" },
|
||||
{ "[/url]", "" },
|
||||
{ "[email]","<a href=\"mailto:%#\">%s</a>" },
|
||||
{ "[/email]", "" },
|
||||
{ "[img]", "<img src=\"%#\">" },
|
||||
{ "[/img]", "" },
|
||||
|
||||
/* quote */
|
||||
{ "[quote=", "*" },
|
||||
{ "[quote]", "*" },
|
||||
{ "[/quote]", "</td></tr></table><p />" },
|
||||
|
||||
{ "", "" }
|
||||
};
|
||||
@ -6055,7 +6074,8 @@ PATTERN_LIST pattern_list[] = {
|
||||
void rsputs_elcode(const char *str)
|
||||
{
|
||||
int i, j, k, l, m, n;
|
||||
char *p, *pd, link[1000], link_text[1000], tmp[1000], attrib[256];
|
||||
char *p, *pd, link[1000], link_text[1000], tmp[1000], attrib[1000], hattrib[1000],
|
||||
value[1000], subst[1000];
|
||||
|
||||
if (strlen_retbuf + (int) (2 * strlen(str) + 1000) >= return_buffer_size) {
|
||||
return_buffer = xrealloc(return_buffer, return_buffer_size + 100000);
|
||||
@ -6174,14 +6194,52 @@ void rsputs_elcode(const char *str)
|
||||
for (l = 0; pattern_list[l].pattern[0] ; l++) {
|
||||
if (strncmp(str + i, pattern_list[l].pattern, strlen(pattern_list[l].pattern)) == 0) {
|
||||
|
||||
if (pattern_list[l].pattern[strlen(pattern_list[l].pattern)-1] == '=') {
|
||||
if (strstr(pattern_list[l].subst, "%#")) {
|
||||
|
||||
/* special substitutions */
|
||||
if (pattern_list[l].pattern[strlen(pattern_list[l].pattern)-1] == '=') {
|
||||
i += strlen(pattern_list[l].pattern);
|
||||
strextract(str+i, ']', attrib, sizeof(attrib));
|
||||
i += strlen(attrib)+1;
|
||||
if (strncmp(attrib, "http://", 7) != 0) /* add http:// if missing */
|
||||
sprintf(hattrib, "http://%s", attrib);
|
||||
else
|
||||
strlcpy(hattrib, attrib, sizeof(hattrib));
|
||||
strextract(str+i, '[', value, sizeof(value));
|
||||
i += strlen(value)-1;
|
||||
strlcpy(subst, pattern_list[l].subst, sizeof(subst));
|
||||
*strchr(subst, '#') = 's';
|
||||
sprintf(return_buffer + j, subst, hattrib, value);
|
||||
j += strlen(return_buffer + j);
|
||||
} else if (pattern_list[l].pattern[strlen(pattern_list[l].pattern)-1] != '=') {
|
||||
|
||||
i += strlen(pattern_list[l].pattern);
|
||||
strextract(str+i, '[', attrib, sizeof(attrib));
|
||||
i += strlen(attrib)-1;
|
||||
strlcpy(hattrib, attrib, sizeof(hattrib));
|
||||
/* add http:// if missing */
|
||||
if (strncmp(attrib, "http://", 7) != 0 &&
|
||||
strstr(pattern_list[l].subst, "mailto") == NULL &&
|
||||
strstr(pattern_list[l].subst, "img") == NULL )
|
||||
sprintf(hattrib, "http://%s", attrib);
|
||||
strlcpy(subst, pattern_list[l].subst, sizeof(subst));
|
||||
*strchr(subst, '#') = 's';
|
||||
sprintf(return_buffer + j, subst, hattrib, attrib);
|
||||
j += strlen(return_buffer + j);
|
||||
}
|
||||
|
||||
} else if (pattern_list[l].pattern[strlen(pattern_list[l].pattern)-1] == '=') {
|
||||
|
||||
/* extract sting after '=' and put it into '%s' of subst */
|
||||
i += strlen(pattern_list[l].pattern);
|
||||
for (k=0 ; str[i] != ']' && k<(int)sizeof(attrib)-1; k++)
|
||||
attrib[k] = str[i++];
|
||||
attrib[k] = 0;
|
||||
strextract(str+i, ']', attrib, sizeof(attrib));
|
||||
i += strlen(attrib);
|
||||
sprintf(return_buffer + j, pattern_list[l].subst, attrib);
|
||||
j += strlen(return_buffer + j);
|
||||
} else {
|
||||
|
||||
} else{
|
||||
|
||||
/* simple substitution */
|
||||
strcpy(return_buffer + j, pattern_list[l].subst);
|
||||
j += strlen(pattern_list[l].subst);
|
||||
i += strlen(pattern_list[l].pattern) - 1; // 1 gets added in for loop...
|
||||
@ -6198,9 +6256,11 @@ void rsputs_elcode(const char *str)
|
||||
i += 3;
|
||||
} else
|
||||
switch (str[i]) {
|
||||
case '\r':
|
||||
strcat(return_buffer, "<br />\r\n");
|
||||
j += 7;
|
||||
break;
|
||||
case '\n':
|
||||
strcat(return_buffer, "<br />");
|
||||
j += 6;
|
||||
break;
|
||||
case '&':
|
||||
strcat(return_buffer, "&");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user