build_html_index.sh 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. #!/bin/sh
  2. #generates HTML man pages docs/html/index.html
  3. # Markus Neteler, 2003, 2004, 2005, 2006
  4. ## TODO: better fix this in include/Make/Html.make, see bug RT #5361
  5. #exclude following list of modules from help index:
  6. EXCLUDEMODS="\
  7. i.find \
  8. r.watershed.ram \
  9. r.watershed.seg \
  10. v.topo.check \
  11. helptext.html \
  12. wxGUI.*"
  13. # these modules don't use G_parser()
  14. check_for_desc_override()
  15. {
  16. case "$BASENAME" in
  17. g.parser)
  18. SHORTDESC="Provides automated parser, GUI, and help support for GRASS scipts."
  19. ;;
  20. r.li.daemon)
  21. SHORTDESC="Support module for r.li landscape index calculations."
  22. ;;
  23. esac
  24. }
  25. ############# nothing to configure below ############
  26. # regex-proof module skip list
  27. EXCLUDEHTML="`echo "$EXCLUDEMODS" | tr ' ' '|' | sed -e 's+\.+\\\\.+g' -e 's+|+\\\\|+g'`"
  28. #fetch the ARCH for store the files:
  29. ARCH="`cat ../include/Make/Platform.make | grep '^ARCH' | sed 's+ ++g' | cut -d'=' -f2`"
  30. GEMDIR="../gem"
  31. HTMLDIR="../dist.$ARCH/docs/html"
  32. GRASSVERSION=`cat ../dist.$ARCH/etc/VERSIONNUMBER`
  33. GRASS_MMVER=`cut -d . -f 1-2 ../dist.$ARCH/etc/VERSIONNUMBER`
  34. MACOSX=`echo $ARCH | grep -i darwin`
  35. write_html_header()
  36. {
  37. # $1: not used
  38. # $2: page title
  39. # $3: is it main index
  40. cat <<EOF
  41. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  42. <html>
  43. <head>
  44. <title>$2</title>
  45. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  46. <meta name="Author" content="GRASS Development Team">
  47. EOF
  48. if [ "$3" ] && [ "$MACOSX" ] ; then
  49. cat <<EOF
  50. <meta name="AppleTitle" content="GRASS GIS $GRASSVERSION Help">
  51. <meta name="AppleIcon" content="GRASS-$GRASS_MMVER/grass_icon.png">
  52. <meta name="robots" content="anchors">
  53. EOF
  54. fi
  55. cat <<EOF
  56. <link rel="stylesheet" href="grassdocs.css" type="text/css">
  57. </head>
  58. <body bgcolor="#FFFFFF">
  59. <!-- this file is generated by tools/build_html_index.sh -->
  60. <img src="grass_logo.png" alt="GRASS logo"><hr align=center size=6 noshade>
  61. <h2>GRASS GIS $GRASSVERSION Reference Manual</h2>
  62. <p>
  63. <em>Geographic Resources Analysis Support System</em>, commonly referred to as
  64. <a href="http://grass.osgeo.org">GRASS</a>,
  65. is a Geographic Information System (GIS) used for geospatial data management
  66. and analysis, image processing, graphics/maps production, spatial modeling,
  67. and visualization. GRASS is currently used in academic and commercial settings
  68. around the world, as well as by many governmental agencies and environmental
  69. consulting companies.</p>
  70. <p>This reference manual details the use of modules distributed with
  71. Geographic Resources Analysis Support System (GRASS), an open source (GNU
  72. GPLed), image processing and geographic information system (GIS).</p>
  73. EOF
  74. }
  75. write_html_cmd_overview()
  76. {
  77. cat <<EOF
  78. <!-- the files grass7.html & helptext.html file live in lib/init/ -->
  79. <table align="center" border="0" cellspacing="8">
  80. <tbody>
  81. <tr>
  82. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;Quick Introduction</h3>
  83. <ul>
  84. <li><a href="grass6.html">GRASS startup manual page</a></li>
  85. <li><a href="helptext.html">How to start with GRASS</a></li>
  86. </ul></td>
  87. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;General</h3>
  88. <ul>
  89. <li><a href="general.html">General commands manual</a></li>
  90. </ul></td>
  91. </tr>
  92. <tr>
  93. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;Raster/Image processing</h3>
  94. <ul>
  95. <li><a href="rasterintro.html">Intro 2D raster map processing</a></li>
  96. <li><a href="raster.html">Raster commands manual</a></li>
  97. <li><a href="raster3dintro.html">Intro 3D raster map (voxel) processing</a></li>
  98. <li><a href="raster3D.html">Raster3D commands manual</a></li>
  99. </ul></td>
  100. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;Vector processing</h3>
  101. <ul>
  102. <li><a href="vectorintro.html">Intro vector map processing and network analysis</a></li>
  103. <li><a href="vector.html">Vector commands manual</a></li>
  104. </ul></td>
  105. </tr>
  106. <tr>
  107. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;Display/Graphical User Interfaces</h3>
  108. <ul>
  109. <li><a href="displaydrivers.html">Display drivers</a></li>
  110. <li><a href="gis.m.html">gis.m</a> and <a href="d.m.html">d.m</a> GIS managers</li>
  111. <li><a href="wxGUI.html">wxGUI</a> wxPython-based GUI frontend</li>
  112. <li><a href="nviz.html">nviz</a> visualization and animation tool</li>
  113. <li><a href="xganim.html">xganim</a> tool for animating a raster map series</li>
  114. <li><a href="display.html">Display commands manual</a></li>
  115. </ul></td>
  116. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;Database</h3>
  117. <ul>
  118. <li><a href="databaseintro.html">Intro database management</a></li>
  119. <li><a href="sql.html">SQL support in GRASS GIS</a></li>
  120. <li><a href="database.html">Database commands manual</a></li>
  121. </ul></td>
  122. </tr>
  123. <tr>
  124. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;Projections</h3>
  125. <ul>
  126. <li><a href="projectionintro.html">Intro projections and spatial transformations</a></li>
  127. </ul></td>
  128. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;Miscellaneous</h3>
  129. <ul>
  130. <li><a href="variables.html">GRASS variables and environment variables</a></li>
  131. <li><a href="gem/index.html">The GRASS Extensions Manager (GEM)</a></li>
  132. <li><a href="misc.html">Misc. commands manual</a></li>
  133. </ul></td>
  134. </tr>
  135. <tr>
  136. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;Image processing</h3>
  137. <ul>
  138. <li><a href="imageryintro.html">Intro image processing</a></li>
  139. <li><a href="imagery.html">Imagery commands manual</a></li>
  140. </ul></td>
  141. <td valign="top" bgcolor="#ddffaa" class="box"><h3>&nbsp;Printing</h3>
  142. <ul>
  143. <li><a href="postscript.html">Postscript commands manual</a></li>
  144. </ul></td>
  145. </tr>
  146. </tbody>
  147. </table>
  148. EOF
  149. }
  150. write_html_footer()
  151. {
  152. # $1: unused
  153. # $2: help index url
  154. cat <<EOF
  155. <BR><BR>
  156. <hr>
  157. <p><a href="$2">Help Index</a> | <a href="full_index.html">Full Index</a><br>
  158. &copy; 2003-2009 <a href="http://grass.osgeo.org">GRASS Development Team</a></p>
  159. </body>
  160. </html>
  161. EOF
  162. }
  163. expand_module_class_name()
  164. {
  165. # $1: module class
  166. case "$1" in
  167. d) echo "display" ;;
  168. db) echo "database" ;;
  169. g) echo "general" ;;
  170. i) echo "imagery" ;;
  171. m) echo "misc" ;;
  172. ps) echo "postscript" ;;
  173. p) echo "paint" ;;
  174. r) echo "raster" ;;
  175. r3) echo "raster3D" ;;
  176. s) echo "sites" ;;
  177. v) echo "vector" ;;
  178. *) echo "$1" ;;
  179. esac
  180. }
  181. replace_file()
  182. {
  183. # $1: filename
  184. if [ -f $1 ] && cmp $1.tmp $1 >/dev/null ; then
  185. rm $1.tmp
  186. else
  187. mv $1.tmp $1
  188. fi
  189. }
  190. #are we in the tools/ dir?
  191. if [ ! -f build_html_index.sh ] ; then
  192. echo "ERROR: this script must be run from the tools/ directory" >&2
  193. exit 1
  194. fi
  195. FULLINDEX=full_index.html
  196. ################
  197. #copy over CSS:
  198. cp -f grassdocs.css $HTMLDIR/
  199. mkdir -p $HTMLDIR/nviz/
  200. cp -f grassdocs.css $HTMLDIR/nviz/
  201. chmod a+r $HTMLDIR/grassdocs.css $HTMLDIR/nviz/grassdocs.css
  202. #copy over GRASS logo:
  203. cp -f grass_logo.png $HTMLDIR/
  204. cp -f grass_logo.png $HTMLDIR/nviz/
  205. chmod a+r $HTMLDIR/grass_logo.png $HTMLDIR/nviz/grass_logo.png
  206. if [ "$MACOSX" ] ; then
  207. cp -f grass_icon.png $HTMLDIR/
  208. chmod a+r $HTMLDIR/grass_icon.png
  209. fi
  210. #copy over GEM docs:
  211. mkdir -p $HTMLDIR/gem
  212. cp -f $GEMDIR/docs/GEM-Manual/*.html $HTMLDIR/gem/
  213. cp -f $GEMDIR/docs/GEM-Manual/img* $HTMLDIR/gem/
  214. chmod a+r $HTMLDIR/gem/*.html $HTMLDIR/gem/img*
  215. #process all HTML pages:
  216. cd "$HTMLDIR"
  217. #get list of available GRASS modules:
  218. CMDLIST=`ls -1 *.*.html | grep -v "$FULLINDEX" | grep -v index.html | \
  219. grep -v "\($EXCLUDEHTML\)" | cut -d'.' -f1 | sort -u`
  220. CMDLISTNO=`echo $CMDLIST | wc -w | awk '{print $1}'`
  221. echo "Generating HTML manual pages index (help system)..." >&2
  222. ###############################################################################
  223. #begin full index:
  224. (
  225. write_html_header - "GRASS GIS $GRASSVERSION Reference Manual: Full index"
  226. #generate main index of all modules:
  227. echo "Go <a href=\"index.html\">back to help overview</a><BR>"
  228. echo "<BR><h3>Full command index:</h3>"
  229. echo "[ "
  230. k=0
  231. for i in $CMDLIST
  232. do
  233. k=`expr $k + 1`
  234. echo -n "<b><a href=\"#$i\">$i.*</a></b>"
  235. if [ $k -lt $CMDLISTNO ] ; then
  236. echo -n " | "
  237. fi
  238. done
  239. echo " ]"
  240. echo "<BR><BR>"
  241. echo ""
  242. cat <<EOF
  243. <table border=0>
  244. <tr><td>&nbsp;&nbsp;<a href="full_index.html#d">d.*</a> </td><td>display commands</td></tr>
  245. <tr><td>&nbsp;&nbsp;<a href="full_index.html#db">db.*</a> </td><td>database commands</td></tr>
  246. <tr><td>&nbsp;&nbsp;<a href="full_index.html#g">g.*</a> </td><td>general commands</td></tr>
  247. <tr><td>&nbsp;&nbsp;<a href="full_index.html#i">i.*</a> </td><td>imagery commands</td></tr>
  248. <tr><td>&nbsp;&nbsp;<a href="full_index.html#m">m.*</a> </td><td>miscellaneous commands</td></tr>
  249. <tr><td>&nbsp;&nbsp;<a href="full_index.html#ps">ps.*</a> </td><td>postscript commands</td></tr>
  250. <tr><td>&nbsp;&nbsp;<a href="full_index.html#r">r.*</a> </td><td>raster commands</td></tr>
  251. <tr><td>&nbsp;&nbsp;<a href="full_index.html#r3">r3.*</a> </td><td>raster3D commands</td></tr>
  252. <tr><td>&nbsp;&nbsp;<a href="full_index.html#v">v.*</a> </td><td>vector commands</td></tr>
  253. <tr><td>&nbsp;&nbsp;<a href="nviz.html">nviz</a> </td><td>visualization suite</td></tr>
  254. <tr><td>&nbsp;&nbsp;<a href="wxGUI.html">wxGUI</a> </td><td>wxPython-based GUI frontend</td></tr>
  255. <tr><td>&nbsp;&nbsp;<a href="xganim.html">xganim</a> </td><td>raster map slideshow</td></tr>
  256. </table>
  257. EOF
  258. #for all module groups:
  259. for i in $CMDLIST
  260. do
  261. cat <<-EOF
  262. <a name="$i"></a>
  263. <BR><BR><h3>$i.* commands:</h3>
  264. <table>
  265. EOF
  266. #for all modules:
  267. for i in `ls -1 $i.*.html | grep -v "\($EXCLUDEHTML\)"`
  268. do
  269. BASENAME=`basename $i .html`
  270. SHORTDESC="`cat $i | awk '/NAME/,/SYNOPSIS/' | grep '<em>' | cut -d'-' -f2- | sed 's+^ ++g' | grep -vi 'SYNOPSIS' | head -n 1`"
  271. check_for_desc_override
  272. echo "<tr><td valign=\"top\"><a href=\"$i\">$BASENAME</a></td> <td>$SHORTDESC</td></tr>"
  273. done
  274. echo "</table>"
  275. done
  276. write_html_footer - index.html
  277. ) > "$FULLINDEX.tmp"
  278. replace_file "$FULLINDEX"
  279. # done full index
  280. ###############################################################################
  281. #next write separate module pages:
  282. #for all module groups:
  283. for k in $CMDLIST
  284. do
  285. MODCLASS=`expand_module_class_name $k`
  286. FILENAME="$MODCLASS.html"
  287. (
  288. write_html_header - "GRASS GIS $GRASSVERSION Reference Manual: $MODCLASS"
  289. echo "Go <a href="index.html">back to help overview</a><BR><BR><BR>"
  290. echo "<b>$MODCLASS commands:</b>"
  291. echo "<table>"
  292. #for all modules:
  293. for k in `ls -1 $k.*.html | grep -v "\($EXCLUDEHTML\)"`
  294. do
  295. BASENAME=`basename $k .html`
  296. SHORTDESC="`cat $k | awk '/NAME/,/SYNOPSIS/' | grep '<em>' | cut -d'-' -f2- | sed 's+^ ++g' | grep -vi 'SYNOPSIS' | head -n 1`"
  297. check_for_desc_override
  298. echo "<tr><td valign=\"top\"><a href=\"$k\">$BASENAME</a></td> <td>$SHORTDESC</td></tr>"
  299. done
  300. echo "</table>"
  301. write_html_footer - index.html
  302. ) > "$FILENAME.tmp"
  303. replace_file "$FILENAME"
  304. done
  305. ###############################################################################
  306. #next write main page:
  307. FILENAME=index.html
  308. (
  309. write_html_header - "GRASS GIS $GRASSVERSION Reference Manual" 1
  310. write_html_cmd_overview
  311. cat <<EOF
  312. <!-- GEM Extensions StartHTML. Do not delete or change this comment! -->
  313. EOF
  314. write_html_footer - index.html
  315. ) > "$FILENAME.tmp"
  316. replace_file "$FILENAME"
  317. ###############################################################################
  318. echo "Generated HTML docs in $HTMLDIR/index.html"
  319. echo "----------------------------------------------------------------------"
  320. echo "Following modules are missing the 'description.html' file in src code:"
  321. for i in `find . -name "*.*.html" | sort | grep -v "$FULLINDEX" | grep -v 'index.html' | grep -v "$EXCLUDEHTML"`
  322. do
  323. if grep 'DESCRIPTION' $i >/dev/null 2>&1 ; then
  324. :
  325. else
  326. echo `echo $i | sed 's?./??' | sed 's/.html//'`
  327. fi
  328. done
  329. echo "----------------------------------------------------------------------"