]> gitweb.ps.run Git - ps-cgit/blob - html.c
Move global variables + callback functions into shared.c
[ps-cgit] / html.c
1 /* html.c: helper functions for html output
2  *
3  * Copyright (C) 2006 Lars Hjemli
4  *
5  * Licensed under GNU General Public License v2
6  *   (see COPYING for full license text)
7  */
8
9 #include "cgit.h"
10
11 char *fmt(const char *format, ...)
12 {
13         static char buf[8][1024];
14         static int bufidx;
15         int len;
16         va_list args;
17
18         bufidx++;
19         bufidx &= 7;
20
21         va_start(args, format);
22         len = vsnprintf(buf[bufidx], sizeof(buf[bufidx]), format, args);
23         va_end(args);
24         if (len>sizeof(buf[bufidx]))
25                 die("[html.c] string truncated: %s", format);
26         return buf[bufidx];
27 }
28
29 void html(const char *txt)
30 {
31         write(htmlfd, txt, strlen(txt));
32 }
33
34 void htmlf(const char *format, ...)
35 {
36         static char buf[65536];
37         va_list args;
38
39         va_start(args, format);
40         vsnprintf(buf, sizeof(buf), format, args);
41         va_end(args);
42         html(buf);
43 }
44
45 void html_txt(char *txt)
46 {
47         char *t = txt;
48         while(*t){
49                 int c = *t;
50                 if (c=='<' || c=='>' || c=='&') {
51                         *t = '\0';
52                         html(txt);
53                         *t = c;
54                         if (c=='>')
55                                 html("&gt;");
56                         else if (c=='<')
57                                 html("&lt;");
58                         else if (c=='&')
59                                 html("&amp;");
60                         txt = t+1;
61                 }
62                 t++;
63         }
64         if (t!=txt)
65                 html(txt);
66 }
67
68
69 void html_attr(char *txt)
70 {
71         char *t = txt;
72         while(*t){
73                 int c = *t;
74                 if (c=='<' || c=='>' || c=='\'') {
75                         *t = '\0';
76                         html(txt);
77                         *t = c;
78                         if (c=='>')
79                                 html("&gt;");
80                         else if (c=='<')
81                                 html("&lt;");
82                         else if (c=='\'')
83                                 html("&quote;");
84                         txt = t+1;
85                 }
86                 t++;
87         }
88         if (t!=txt)
89                 html(txt);
90 }
91
92 void html_link_open(char *url, char *title, char *class)
93 {
94         html("<a href='");
95         html_attr(url);
96         if (title) {
97                 html("' title='");
98                 html_attr(title);
99         }
100         if (class) {
101                 html("' class='");
102                 html_attr(class);
103         }
104         html("'>");
105 }
106
107 void html_link_close(void)
108 {
109         html("</a>");
110 }