]>
Commit | Line | Data |
---|---|---|
4441a01c BP |
1 | #! /bin/sh |
2 | ||
3 | set -e | |
4 | ||
5 | # Check command line. | |
6 | if test ! -d "$1" || test $# -lt 2; then | |
7 | cat <<EOF | |
8 | $0: HTML documentation generator for Open vSwitch | |
9 | usage: $0 srcdir docfile... | |
10 | ||
11 | The VERSION environment variable should be set to the Open vSwitch version. | |
12 | Must be invoked from an Open vSwitch build directory. | |
13 | Most conveniently invoked via "make dist-docs". | |
14 | EOF | |
15 | exit 1 | |
16 | fi | |
17 | ||
18 | # Parse command line. | |
19 | srcdir=$1 | |
20 | shift | |
21 | ||
22 | # Check for programs we'll need. | |
23 | search_path () { | |
24 | save_IFS=$IFS | |
25 | IFS=: | |
26 | for dir in $PATH; do | |
27 | IFS=$save_IFS | |
28 | if test -x "$dir/$1"; then | |
29 | return 0 | |
30 | fi | |
31 | done | |
32 | IFS=$save_IFS | |
33 | echo >&2 "$0: $1 not found in \$PATH, please install and try again" | |
34 | exit 1 | |
35 | } | |
36 | search_path man | |
37 | search_path markdown | |
38 | search_path ps2pdf | |
39 | ||
40 | # Create dist-docs directory. | |
41 | distdir=dist-docs | |
42 | abs_distdir=`pwd`/dist-docs | |
43 | rm -rf $distdir | |
44 | mkdir $distdir | |
45 | ||
46 | # Install manpages. | |
47 | make install-man mandir="$abs_distdir"/man | |
48 | (cd $distdir && mv `find man -type f` . && rm -rf man) | |
49 | manpages=`cd $distdir && echo *` | |
50 | ||
51 | # Start writing index.html. | |
52 | exec 3>$distdir/index.html | |
53 | cat >&3 <<EOF | |
54 | <html><head> | |
55 | <meta charset="UTF-8"></head> | |
56 | <link rel="stylesheet" type="text/css" href="style.css"> | |
57 | <title>Open vSwitch $VERSION Documentation</title> | |
58 | </head><body> | |
59 | <h1>Open vSwitch $VERSION Documentation</h1> | |
60 | <h2>Documents</h2> | |
61 | <table> | |
62 | EOF | |
63 | ||
64 | # Add top-level documentation to index.html, giving it .txt extensions so | |
65 | # that the webserver doesn't serve it as Markdown and make your web browser | |
66 | # try to invoke some kind of external helper you don't have installed. | |
67 | # | |
68 | # Also translate documentation to HTML. | |
69 | for file | |
70 | do | |
71 | title=`head -1 "$srcdir/$file"` | |
72 | dir=$distdir/`dirname $file`; test -d "$dir" || mkdir "$dir" | |
73 | cp "$srcdir/$file" "$distdir/$file.txt" | |
74 | (cat <<EOF | |
75 | <html><head> | |
76 | <meta charset="UTF-8"></head> | |
77 | <link rel="stylesheet" type="text/css" href="style.css"> | |
78 | <title>$file (Open vSwitch $VERSION)</title> | |
79 | </head><body> | |
80 | EOF | |
81 | markdown "$distdir/$file.txt" | |
82 | echo "</body></html>") > "$distdir/$file.html" | |
83 | cat <<EOF | |
84 | <tr> | |
85 | <td>$file</td> | |
86 | <td>$title</td> | |
87 | <td><a href="$file.html">HTML</a>, <a href="$file.txt">plain text</a></td> | |
88 | </tr> | |
89 | EOF | |
90 | done >&3 | |
91 | ||
92 | # Add header for manpages to index.html. | |
93 | cat >&3 <<EOF | |
94 | </table> | |
95 | <h2>Manpages</h2> | |
96 | <table> | |
97 | EOF | |
98 | ||
99 | # Add manpages to index.html, translating them into PDF, HTML, and plain text. | |
100 | # The HTML is just slightly marked up from the plain text version; although | |
101 | # groff supports better HTML output, on my system some of the OVS manpages | |
102 | # cause the groff HTML output engine to segfault (!). | |
103 | (cd $distdir | |
104 | for manpage in $manpages; do | |
105 | man -l -Tps $manpage | ps2pdf - > $manpage.pdf | |
106 | man -l -Tutf8 $manpage | sed 's/.\b//g' > $manpage.txt | |
107 | (echo '<html><head><meta charset="UTF-8"></head><body><pre>' | |
108 | man -l -Tutf8 $manpage | sed ' | |
109 | s/&/&/g | |
110 | s/</</g | |
111 | s/>/>/g | |
112 | s,\(.\)\b\1,<b>\1</b>,g | |
113 | s,_\b\(.\),<u>\1</u>,g' | |
114 | echo '</pre></body></html>' | |
115 | ) > $manpage.html | |
116 | ||
117 | name=`echo $manpage | sed 's/\.\([0-9]\)$/(\1)/'` | |
118 | echo " <tr><td>$name</td><td><a href=\"$manpage.pdf\">PDF</a>, <a href=\"$manpage.html\">HTML</a>, <a href=\"$manpage.txt\">plain text</a></td></tr>" | |
119 | done | |
120 | ) >&3 | |
121 | cat >&3 <<EOF | |
122 | </table> | |
123 | </body></html> | |
124 | EOF | |
125 | ||
126 | # Create CSS style file. | |
127 | cat >$distdir/style.css <<'EOF' | |
128 | div { vertical-align:top; } | |
129 | p { | |
130 | vertical-align:baseline; | |
131 | } | |
132 | a { | |
133 | text-decoration: none; | |
134 | font-weight: 700; | |
135 | } | |
136 | a:hover { | |
137 | color:#444; | |
138 | } | |
139 | a:visited { | |
140 | color:#447099; | |
141 | } | |
142 | a:link { | |
143 | color:#447099; | |
144 | } | |
145 | ||
146 | body { | |
147 | font-family: Arial,Helvetica,sans-serif; | |
148 | font-size: 14px; | |
149 | line-height: 1.5em; | |
150 | color: #444; | |
151 | background-color:#f5f5f5; | |
152 | } | |
153 | EOF |