diff options
Diffstat (limited to 'html.c')
| -rw-r--r-- | html.c | 100 | 
1 files changed, 100 insertions, 0 deletions
| @@ -0,0 +1,100 @@ +#include "cgit.h" + +char *fmt(const char *format, ...) +{ +	static char buf[8][1024]; +	static int bufidx; +	int len; +	va_list args; + +	bufidx++; +	bufidx &= 7; + +	va_start(args, format); +	len = vsnprintf(buf[bufidx], sizeof(buf[bufidx]), format, args); +	va_end(args); +	if (len>sizeof(buf[bufidx])) +		die("[html.c] string truncated: %s", format); +	return buf[bufidx]; +} + +void html(const char *txt) +{ +	fputs(txt, stdout); +} + +void htmlf(const char *format, ...) +{ +	va_list args; + +	va_start(args, format); +	vprintf(format, args); +	va_end(args); +} + +void html_txt(char *txt) +{ +	char *t = txt; +	while(*t){ +		int c = *t; +		if (c=='<' || c=='>' || c=='&') { +			*t = '\0'; +			html(txt); +			*t = c; +			if (c=='>') +				html(">"); +			else if (c=='<') +				html("<"); +			else if (c=='&') +				html("&"); +			txt = t+1; +		} +		t++; +	} +	if (t!=txt) +		html(txt); +} + + +void html_attr(char *txt) +{ +	char *t = txt; +	while(*t){ +		int c = *t; +		if (c=='<' || c=='>' || c=='\'') { +			*t = '\0'; +			html(txt); +			*t = c; +			if (c=='>') +				html(">"); +			else if (c=='<') +				html("<"); +			else if (c=='\'') +				html(""e;"); +			txt = t+1; +		} +		t++; +	} +	if (t!=txt) +		html(txt); +} + +void html_link_open(char *url, char *title, char *class) +{ +	html("<a href='"); +	html_attr(url); +	if (title) { +		html("' title='"); +		html_attr(title); +	} +	if (class) { +		html("' class='"); +		html_attr(class); +	} +	html("'>"); +} + +void html_link_close(void) +{ +	html("</a>"); +} | 
