summaryrefslogtreecommitdiffabout
path: root/html.c
Side-by-side diff
Diffstat (limited to 'html.c') (more/less context) (show whitespace changes)
-rw-r--r--html.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/html.c b/html.c
index 8a69659..957b326 100644
--- a/html.c
+++ b/html.c
@@ -36,64 +36,92 @@ void htmlf(const char *format, ...)
static char buf[65536];
va_list args;
va_start(args, format);
vsnprintf(buf, sizeof(buf), format, args);
va_end(args);
html(buf);
}
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("&gt;");
else if (c=='<')
html("&lt;");
else if (c=='&')
html("&amp;");
txt = t+1;
}
t++;
}
if (t!=txt)
html(txt);
}
+void html_ntxt(int len, char *txt)
+{
+ char *t = txt;
+ while(*t && len--){
+ int c = *t;
+ if (c=='<' || c=='>' || c=='&') {
+ *t = '\0';
+ html(txt);
+ *t = c;
+ if (c=='>')
+ html("&gt;");
+ else if (c=='<')
+ html("&lt;");
+ else if (c=='&')
+ html("&amp;");
+ txt = t+1;
+ }
+ t++;
+ }
+ if (t!=txt) {
+ char c = *t;
+ *t = '\0';
+ html(txt);
+ *t = c;
+ }
+ if (len<0)
+ html("...");
+}
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("&gt;");
else if (c=='<')
html("&lt;");
else if (c=='\'')
html("&quote;");
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);
}