build_html_index.sh 12 KB

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