util.rc - swerc - anselm's simpler werc fork
(HTM) git clone git://git.suckless.org/swerc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
util.rc (2299B)
---
1 ##############################################################################
2 # Useful CGI stuff
3
4 fn dprint { echo $* >[1=2] }
5
6 fn http_redirect {
7 if(~ $1 http://* https://*)
8 t=$1
9 if not if(~ $1 /*)
10 t=$"base_url^$1
11 if not
12 t=$"base_url^$"req_path^$1
13 echo 'Status: '^$2^'
14 Location: '^$t^'
15
16 '
17 exit
18 }
19 fn perm_redirect { http_redirect $1 '301 Moved Permanantly' }
20
21 # This seems slightly improve performance, but might depend on httpd buffering behavior.
22 fn awk_buffer {
23 awk '{
24 buf = buf $0"\n"
25 if(length(buf) > 1400) {
26 printf "%s", buf
27 buf = ""
28 }
29 }
30 END { printf "%s", buf }'
31 }
32
33 fn static_file {
34 echo 'Content-Type: '`{select_mime $1}
35 echo
36 cat $1
37 exit
38 }
39
40 fn select_mime {
41 m='text/plain'
42 if(~ $1 *.css)
43 m='text/css'
44 if not if(~ $1 *.ico)
45 m='image/x-icon'
46 if not if(~ $1 *.png)
47 m='image/png'
48 if not if(~ $1 *.jpg *.jpeg)
49 m='image/jpeg'
50 if not if(~ $1 *.gif)
51 m='image/gif'
52 if not if(~ $1 *.pdf)
53 m='application/pdf'
54 echo $m
55 }
56
57 ##############################################################################
58 # Generic rc programming helpers
59
60 # Manage nested lists
61 fn ll_add {
62 _l=$1^_^$#$1
63 $_l=$*(2-)
64 $1=( $$1 $_l )
65 }
66 # Add to the head: dangerous if you shrink list by hand!
67 fn ll_addh {
68 _l=$1^_^$#$1
69 $_l=$*(2-)
70 $1=( $_l $$1 )
71 }
72
73
74 NEW_LINE='
75 '
76
77 ##############################################################################
78 # To be used from config files
79 fn conf_perm_redirect {
80 if(~ $#* 1)
81 perm_redir_to=$1
82 if not
83 ll_addh perm_redir_patterns $1 $2
84 }
85
86 fn get_tpl_file {
87 if(test -f $sitedir/_werc/tpl/$1)
88 echo -n $sitedir/_werc/tpl/$1
89 if not if(test -f tpl/$1.local)
90 echo -n tpl/$1.local
91 if not if(test -f tpl/$1)
92 echo -n tpl/$1
93 if not
94 status='Can''t find tpl file: '$1
95 }
96
97 fn template { awk -f bin/template.awk $* | rc $rcargs }
98
99 # File title extraction
100 fn get_md_title {
101 sed -n -e '1N; /^.*\n===*$/N; /.*\n===*\n *$/!b' -e 's/\n==*\n//p' < $1
102 }
103
104 fn get_file_title {
105 if (~ $1 *.md)
106 get_md_title $1
107 if not if(~ $1 */) {
108 if(test -f $1/index.md)
109 get_md_title $1/index.md
110 }
111 }