Mercurial > paster
annotate util.c @ 78:9bfe5ce3cc45
pasterd: rework themes
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 16 Mar 2023 20:45:59 +0100 |
parents | fe78b16c694d |
children | 52029a52a385 |
rev | line source |
---|---|
0 | 1 /* |
2 * util.c -- various utilities | |
3 * | |
72
1a98bc0daa49
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
5 * |
0 | 6 * Permission to use, copy, modify, and/or distribute this software for any |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
9 * |
0 | 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 #include <assert.h> | |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
20 #include <ctype.h> |
0 | 21 #include <errno.h> |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
22 #include <limits.h> |
0 | 23 #include <stdarg.h> |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
24 #include <stdio.h> |
0 | 25 #include <stdlib.h> |
26 #include <string.h> | |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
27 #include <time.h> |
0 | 28 |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
29 #include "config.h" |
0 | 30 #include "util.h" |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
31 |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
32 const char * const languages[] = { |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
33 "nohighlight", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
34 "1c", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
35 "abnf", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
36 "accesslog", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
37 "actionscript", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
38 "ada", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
39 "apache", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
40 "applescript", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
41 "arduino", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
42 "armasm", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
43 "asciidoc", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
44 "aspectj", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
45 "autohotkey", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
46 "autoit", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
47 "avrasm", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
48 "awk", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
49 "axapta", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
50 "bash", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
51 "basic", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
52 "bnf", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
53 "brainfuck", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
54 "cal", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
55 "capnproto", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
56 "ceylon", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
57 "clean", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
58 "clojure", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
59 "clojure-repl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
60 "cmake", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
61 "coffeescript", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
62 "coq", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
63 "cos", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
64 "cpp", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
65 "crmsh", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
66 "crystal", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
67 "cs", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
68 "csp", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
69 "css", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
70 "dart", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
71 "delphi", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
72 "diff", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
73 "django", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
74 "d", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
75 "dns", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
76 "dockerfile", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
77 "dos", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
78 "dsconfig", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
79 "dts", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
80 "dust", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
81 "ebnf", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
82 "elixir", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
83 "elm", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
84 "erb", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
85 "erlang", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
86 "erlang-repl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
87 "excel", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
88 "fix", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
89 "flix", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
90 "fortran", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
91 "fsharp", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
92 "gams", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
93 "gauss", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
94 "gcode", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
95 "gherkin", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
96 "glsl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
97 "go", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
98 "golo", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
99 "gradle", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
100 "groovy", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
101 "haml", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
102 "handlebars", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
103 "haskell", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
104 "haxe", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
105 "hsp", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
106 "htmlbars", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
107 "http", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
108 "hy", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
109 "inform7", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
110 "ini", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
111 "irpf90", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
112 "java", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
113 "javascript", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
114 "jboss-cli", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
115 "json", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
116 "julia", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
117 "julia-repl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
118 "kotlin", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
119 "lasso", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
120 "ldif", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
121 "leaf", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
122 "less", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
123 "lisp", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
124 "livecodeserver", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
125 "livescript", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
126 "llvm", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
127 "lsl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
128 "lua", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
129 "makefile", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
130 "markdown", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
131 "mathematica", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
132 "matlab", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
133 "maxima", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
134 "mel", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
135 "mercury", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
136 "mipsasm", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
137 "mizar", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
138 "mojolicious", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
139 "monkey", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
140 "moonscript", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
141 "n1ql", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
142 "nginx", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
143 "nimrod", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
144 "nix", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
145 "nsis", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
146 "objectivec", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
147 "ocaml", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
148 "openscad", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
149 "oxygene", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
150 "parser3", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
151 "perl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
152 "pf", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
153 "php", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
154 "pony", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
155 "powershell", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
156 "processing", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
157 "profile", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
158 "prolog", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
159 "protobuf", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
160 "puppet", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
161 "purebasic", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
162 "python", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
163 "q", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
164 "qml", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
165 "rib", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
166 "r", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
167 "roboconf", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
168 "routeros", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
169 "rsl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
170 "ruby", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
171 "ruleslanguage", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
172 "rust", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
173 "scala", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
174 "scheme", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
175 "scilab", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
176 "scss", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
177 "shell", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
178 "smali", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
179 "smalltalk", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
180 "sml", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
181 "sqf", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
182 "sql", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
183 "stan", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
184 "stata", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
185 "step21", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
186 "stylus", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
187 "subunit", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
188 "swift", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
189 "taggerscript", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
190 "tap", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
191 "tcl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
192 "tex", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
193 "thrift", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
194 "tp", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
195 "twig", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
196 "typescript", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
197 "vala", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
198 "vbnet", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
199 "vbscript-html", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
200 "vbscript", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
201 "verilog", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
202 "vhdl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
203 "vim", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
204 "x86asm", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
205 "xl", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
206 "xml", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
207 "xquery", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
208 "yaml", |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
209 "zephir" |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
210 }; |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
211 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
212 const size_t languagesz = NELEM(languages); |
0 | 213 |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
214 const struct duration durations[] = { |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
215 { "day", PASTE_DURATION_DAY }, |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
216 { "hour", PASTE_DURATION_HOUR }, |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
217 { "week", PASTE_DURATION_WEEK }, |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
218 { "month", PASTE_DURATION_MONTH } |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
219 }; |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
220 |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
221 const size_t durationsz = NELEM(durations); |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
73
diff
changeset
|
222 |
71
d3d3937c5756
misc: remove deprecated noreturn
David Demelier <markand@malikania.fr>
parents:
60
diff
changeset
|
223 void |
0 | 224 die(const char *fmt, ...) |
225 { | |
226 va_list ap; | |
227 | |
228 va_start(ap, fmt); | |
229 vfprintf(stderr, fmt, ap); | |
230 va_end(ap); | |
231 | |
232 exit(1); | |
233 } | |
234 | |
235 char * | |
236 estrdup(const char *str) | |
237 { | |
238 assert(str); | |
239 | |
240 char *ret; | |
241 size_t length = strlen(str); | |
242 | |
243 if (!(ret = calloc(1, length + 1))) | |
244 die(strerror(errno)); | |
245 | |
246 return strcpy(ret, str); | |
247 } | |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
248 |
73
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
249 void * |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
250 ecalloc(size_t n, size_t w) |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
251 { |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
252 void *ptr; |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
253 |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
254 if (!(ptr = calloc(n, w))) |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
255 die(strerror(errno)); |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
256 |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
257 return ptr; |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
258 } |
6792975da9a0
pasterd: start removing themes
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
259 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
260 const char * |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
261 bprintf(const char *fmt, ...) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
262 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
263 static char buf[BUFSIZ]; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
264 va_list ap; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
265 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
266 va_start(ap, fmt); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
267 vsnprintf(buf, sizeof (buf), fmt, ap); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
268 va_end(ap); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
269 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
270 return buf; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
271 } |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
272 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
273 const char * |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
274 bstrftime(const char *fmt, const struct tm *tm) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
275 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
276 static char buf[BUFSIZ]; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
277 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
278 strftime(buf, sizeof (buf), fmt, tm); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
279 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
280 return buf; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
281 } |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
282 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
283 const char * |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
284 path(const char *filename) |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
285 { |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
286 assert(filename); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
287 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
288 /* Build path to the template file. */ |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
289 static char path[PATH_MAX]; |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
290 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
291 snprintf(path, sizeof (path), "%s/%s", config.themedir, filename); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
292 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
293 return path; |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
294 } |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
295 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
296 void |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
297 replace(char **dst, const char *s) |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
298 { |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
299 assert(dst); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
300 assert(s); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
301 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
302 /* Trim leading spaces. */ |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
303 while (*s && isspace(*s)) |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
304 s++; |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
305 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
306 if (*s) { |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
307 free(*dst); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
308 *dst = estrdup(s); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
309 } |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
310 } |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
311 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
312 const char * |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
313 ttl(time_t timestamp, long long int duration) |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
314 { |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
315 const time_t now = time(NULL); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
316 const long long int left = duration - difftime(now, timestamp); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
317 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
318 if (left < PASTE_DURATION_HOUR) |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
319 return bprintf("%lld minute(s)", left / 60); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
320 if (left < PASTE_DURATION_DAY) |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
321 return bprintf("%lld hour(s)", left / 3600); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
322 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
323 /* Other in days. */ |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
324 return bprintf("%lld day(s)", left / 86400); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
325 } |