[GRASS-SVN] r37606 - in grass/branches/develbranch_6/gui/wxpython: gui_modules support xml

svn_grass at osgeo.org svn_grass at osgeo.org
Sat May 30 06:18:02 EDT 2009


Author: martinl
Date: 2009-05-30 06:18:02 -0400 (Sat, 30 May 2009)
New Revision: 37606

Added:
   grass/branches/develbranch_6/gui/wxpython/support/update_menudata.py
Removed:
   grass/branches/develbranch_6/gui/wxpython/support/update_menu_desc.py
Modified:
   grass/branches/develbranch_6/gui/wxpython/gui_modules/menudata.py
   grass/branches/develbranch_6/gui/wxpython/gui_modules/prompt.py
   grass/branches/develbranch_6/gui/wxpython/xml/menudata.xml
Log:
wxGUI: search modules (stage 2 - keywords)
       (merge from trunk, r37605)


Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/menudata.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/menudata.py	2009-05-30 10:02:17 UTC (rev 37605)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/menudata.py	2009-05-30 10:18:02 UTC (rev 37606)
@@ -78,13 +78,18 @@
         for node in self.tree.getiterator():
             if node.tag == 'menuitem':
                 module = description = ''
+                keywords = []
                 for child in node.getchildren():
                     if child.tag == 'help':
                         description = child.text
                     if child.tag == 'command':
                         module = child.text
+                    if child.tag == 'keywords':
+                        keywords = child.text.split(',')
+                
                 if module:
-                    modules[module] = { 'desc': description }
+                    modules[module] = { 'desc': description,
+                                        'keywords' : keywords }
         
         return modules
 

Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/prompt.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/prompt.py	2009-05-30 10:02:17 UTC (rev 37605)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/prompt.py	2009-05-30 10:18:02 UTC (rev 37606)
@@ -173,9 +173,14 @@
         
         modules = []
         for module, data in self.modules.iteritems():
-            if text in data['desc']:
+            if self.searchBy.GetSelection() == 0: # -> description
+                ref = data['desc']
+            else: # -> keywords
+                ref = ','.join(data['keywords'])
+            
+            if text in ref:
                 modules.append(module)
-        
+            
         self.parent.statusbar.SetStatusText(_("%d modules found") % len(modules))
         self.input.SetChoices(modules)
                     

Deleted: grass/branches/develbranch_6/gui/wxpython/support/update_menu_desc.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/support/update_menu_desc.py	2009-05-30 10:02:17 UTC (rev 37605)
+++ grass/branches/develbranch_6/gui/wxpython/support/update_menu_desc.py	2009-05-30 10:18:02 UTC (rev 37606)
@@ -1,103 +0,0 @@
-"""
- at brief Reads menu data from menudata.py and for each command updates
-its description (based on interface description).
-
-Updated menu data is printed to stdout.
-
-Support script for wxGUI.
-
-COPYRIGHT:  (C) 2008 by the GRASS Development Team
-This program is free software under the GNU General Public
-License (>=v2). Read the file COPYING that comes with GRASS
-for details.
-
-Usage: python update_menu_desc.py
-
- at author Martin Landa <landa.martin gmail.com>
-"""
-
-import os
-import sys
-
-import xml.sax
-import xml.sax.handler
-HandlerBase=xml.sax.handler.ContentHandler
-from xml.sax import make_parser
-
-def read_menudata():
-    menu = menudata.Data() # get menu data
-    for mainItem in menu.GetMenu()[0]:
-        print '                (_("%s"), (' % mainItem[0]
-        for item1 in mainItem[1]:
-            if len(item1[0]) == 0: # separator
-                print '                        ("","","", ""),'
-                continue
-            if len(item1) == 4:
-                desc = get_description(item1[1:])
-                print '                        (_("%s"),' % item1[0]
-                if desc and desc != item1[1]:
-                    print '                         _("%s"),' % desc
-                else:
-                    print '                         _("%s"),' % item1[1]
-                print '                         "%s",' % item1[2]
-                print '                         "%s"),' % item1[3]
-            else: # submenu
-                print '                        (_("%s"), (' % item1[0]
-                for item2 in item1[1]:
-                    if len(item2[0]) == 0: # separator
-                        print '                                ("","","", ""),'
-                        continue
-                    desc = get_description(item2[1:])
-                    print '                                (_("%s"),' % item2[0]
-                    if desc and desc != item2[1]:
-                        print '                                 _("%s"),' % desc
-                    else:
-                        print '                                 _("%s"),' % item2[1]
-                    print '                                 "%s",' % item2[2]
-                    print '                                 "%s"),' % item2[3]
-                print '                                )'
-                print '                         ),'
-        print '                        )'
-        print '                 ),'
-
-def get_description(item):
-    """!Return command desctiption based on interface
-    description"""
-    print 
-    desc, type, cmd = item
-    if type in ("self.OnMenuCmd", "self.RunMenuCmd"):
-        module = cmd.split(' ')[0]
-        grass_task = menuform.grassTask()
-        handler = menuform.processTask(grass_task)
-        xml.sax.parseString(menuform.getInterfaceDescription(module), handler )
-
-        return grass_task.description.replace('"', '\\"')
-
-    return None
-
-def main(argv=None):
-    if argv is None:
-        argv = sys.argv
-
-    if len(argv) != 1:
-        print >> sys.stderr, __doc__
-        return 0
-
-    ### i18N
-    import gettext
-    gettext.install('grasswxpy', os.path.join(os.getenv("GISBASE"), 'locale'), unicode=True)
-
-    read_menudata()
-
-    return 0
-
-if __name__ == '__main__':
-    if os.getenv("GISBASE") is None:
-        print >> sys.stderr, "You must be in GRASS GIS to run this program."
-        sys.exit(1)
-
-    sys.path.append('../gui_modules')
-    import menudata
-    import menuform
-
-    sys.exit(main())

Added: grass/branches/develbranch_6/gui/wxpython/support/update_menudata.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/support/update_menudata.py	                        (rev 0)
+++ grass/branches/develbranch_6/gui/wxpython/support/update_menudata.py	2009-05-30 10:18:02 UTC (rev 37606)
@@ -0,0 +1,113 @@
+"""
+ at brief Support script for wxGUI - only for developers needs. Updates
+menudata.xml file.
+
+Parse all GRASS modules in the search path ('bin' & 'script') and
+updates: - description (i.e. help) - keywords
+
+Prints warning for missing modules.
+
+(C) 2008-2009 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+Usage: python update_menudata.py
+
+ at author Martin Landa <landa.martin gmail.com>
+"""
+
+import os
+import sys
+try:
+    import xml.etree.ElementTree as etree
+except ImportError:
+    import elementtree.ElementTree as etree # Python <= 2.4
+
+def parseModules():
+    """!Parse modules' interface"""
+    modules = dict()
+    
+    # list of modules to be ignored
+    ignore =  [ 'mkftcap' ]
+    
+    count = len(globalvar.grassCmd['all'])
+    i = 0
+    for module in globalvar.grassCmd['all']:
+        i += 1
+        if i % 10 == 0:
+            print '   %d/%d' % (i, count)
+        if module in ignore:
+            continue
+        try:
+            interface = menuform.GUI().ParseInterface(cmd = [module])
+        except IOError, e:
+            print >> sys.stderr, e
+            continue
+        modules[interface.name] = { 'label'   : interface.label,
+                                    'desc'    : interface.description,
+                                    'keywords': interface.keywords }
+    
+    return modules
+
+def updateData(data, modules):
+    """!Update menu data tree"""
+    for node in data.tree.getiterator():
+        if node.tag != 'menuitem':
+            continue
+        
+        item = dict()
+        for child in node.getchildren():
+            item[child.tag] = child.text
+        
+        if not item.has_key('command'):
+            continue
+        
+        module = item['command'].split(' ')[0]
+        if not modules.has_key(module):
+            print 'WARNING: \'%s\' not found in modules' % item['command']
+            continue
+        
+        if modules[module]['label']:
+            desc = modules[module]['label']
+        else:
+            desc = modules[module]['desc']
+        node.find('help').text = desc
+        node.find('keywords').text = ','.join(modules[module]['keywords'])
+        
+def writeData(data):
+    """!Write updated menudata.xml"""
+    file = os.path.join('..', 'xml', 'menudata.xml')
+    data.tree.write(file)
+
+def main(argv = None):
+    if argv is None:
+        argv = sys.argv
+
+    if len(argv) != 1:
+        print >> sys.stderr, __doc__
+        return 1
+    
+    print "Step 1: parse modules..."
+    modules = dict()
+    modules = parseModules()
+    print "Step 2: read menu data..."
+    data = menudata.Data()
+    print "Step 3: update menu data..."
+    updateData(data, modules)
+    print "Step 4: write menu data (menudata.xml)..."
+    writeData(data)
+    
+    return 0
+
+if __name__ == '__main__':
+    if os.getenv("GISBASE") is None:
+        print >> sys.stderr, "You must be in GRASS GIS to run this program."
+        sys.exit(1)
+    
+    sys.path.append('../gui_modules')
+    import menudata
+    import menuform
+    import globalvar
+    
+    sys.exit(main())

Modified: grass/branches/develbranch_6/gui/wxpython/xml/menudata.xml
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/xml/menudata.xml	2009-05-30 10:02:17 UTC (rev 37605)
+++ grass/branches/develbranch_6/gui/wxpython/xml/menudata.xml	2009-05-30 10:18:02 UTC (rev 37606)
@@ -31,13 +31,13 @@
 	      <help>Close loaded workspace</help>
 	      <handler>self.OnWorkspaceClose</handler>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Load map layers</label>
 	      <help>Load map layers into layer tree</help>
 	      <handler>self.OnWorkspaceLoad</handler>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Load GRC file (Tcl/Tk GUI)</label>
 	      <help>Load map layers from GRC file to layer tree</help>
@@ -45,13 +45,14 @@
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Import raster map</label>
 	  <items>
 	    <menuitem>
 	      <label>Import raster data using GDAL</label>
 	      <help>Import GDAL supported raster file into a binary raster map layer.</help>
+	      <keywords>raster,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.gdal</command>
 	    </menuitem>
@@ -60,69 +61,79 @@
 	      <help>Converts selected GDAL layers to GRASS raster maps using r.in.gdal.</help>
 	      <handler>self.OnImportGdalLayers</handler>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Aggregate ASCII xyz import</label>
 	      <help>Create a raster map from an assemblage of many coordinates using univariate statistics.</help>
+	      <keywords>raster,import,LIDAR</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.xyz</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>ASCII grid import</label>
 	      <help>Converts ASCII raster file to binary raster map layer.</help>
+	      <keywords>raster,import,conversion</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.ascii</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>ASCII polygons and lines import</label>
 	      <help>Creates raster maps from ASCII polygon/line/point data files.</help>
+	      <keywords>raster,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.poly</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Binary file import</label>
 	      <help>Import a binary raster file into a GRASS raster map layer.</help>
+	      <keywords>raster,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.bin</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>ESRI ASCII grid import</label>
 	      <help>Converts an ESRI ARC/INFO ascii raster file (GRID) into a (binary) raster map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.arc</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>GRIDATB.FOR import</label>
 	      <help>Imports GRIDATB.FOR map file (TOPMODEL) into GRASS raster map</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.gridatb</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>MAT-File (v.4) import</label>
 	      <help>Imports a binary MAT-File(v4) to a GRASS raster.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.mat</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>SPOT NDVI import</label>
 	      <help>Import of SPOT VGT NDVI file into a raster map</help>
+	      <keywords>raster,imagery,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.in.spotvgt</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>SRTM HGT import</label>
 	      <help>Import SRTM HGT files into GRASS</help>
+	      <keywords>raster,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.srtm</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Terra ASTER HDF import</label>
 	      <help>Georeference, rectify and import Terra-ASTER imagery and relative DEM's using gdalwarp.</help>
+	      <keywords>raster,imagery,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.in.aster</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>WMS import</label>
 	      <help>Downloads and imports data from WMS servers.</help>
@@ -136,6 +147,7 @@
 	    <menuitem>
 	      <label>Import vector data using OGR</label>
 	      <help>Convert OGR vector layers to GRASS vector map.</help>
+	      <keywords>vector,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.ogr</command>
 	    </menuitem>
@@ -144,23 +156,26 @@
 	      <help>Converts selected OGR layers to GRASS vector maps using v.in.ogr.</help>
 	      <handler>self.OnImportOgrLayers</handler>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>ASCII points/GRASS ASCII vector import</label>
 	      <help>Creates a vector map from ASCII points file or ASCII vector file.</help>
+	      <keywords>vector,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.ascii</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Old GRASS vector import</label>
 	      <help>Imports older versions of GRASS vector maps.</help>
+	      <keywords>vector,import,conversion</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.convert</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>DXF import</label>
 	      <help>Converts files in DXF format to GRASS vector map format.</help>
+	      <keywords>vector,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.dxf</command>
 	    </menuitem>
@@ -169,40 +184,46 @@
 	      <help>Converts selected DXF layers to GRASS vector maps (using v.in.dxf).</help>
 	      <handler>self.OnImportDxfFile</handler>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>ESRI e00 import</label>
 	      <help>Import E00 file into a vector map.</help>
+	      <keywords>vector,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.e00</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Garmin GPS import</label>
 	      <help>Download waypoints, routes, and tracks from a Garmin GPS receiver into a vector map.</help>
+	      <keywords>vector,import,GPS</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.garmin</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>GPSBabel GPS import</label>
 	      <help>Import waypoints, routes, and tracks from a GPS receiver or GPS download file into a vector map.</help>
+	      <keywords>vector,import,GPS</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.gpsbabel</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Geonames import</label>
 	      <help>Imports geonames.org country files into a GRASS vector points map.</help>
+	      <keywords>vector,import,gazetteer</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.geonames</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>GEOnet import</label>
 	      <help>Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS vector points map.</help>
+	      <keywords>vector,import,gazetteer</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.gns</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Matlab and MapGen import</label>
 	      <help>Import Mapgen or Matlab vector maps into GRASS.</help>
+	      <keywords>vector,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.mapgen</command>
 	    </menuitem>
@@ -214,12 +235,14 @@
 	    <menuitem>
 	      <label>ASCII 3D import</label>
 	      <help>Convert a 3D ASCII raster text file into a (binary) 3D raster map layer</help>
+	      <keywords>raster3d,voxel,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r3.in.ascii</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Vis5D import</label>
 	      <help>import of 3-dimensional Vis5D files (i.e. the v5d file with 1 variable and 1 time step)</help>
+	      <keywords>raster3d,voxel</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r3.in.v5d</command>
 	    </menuitem>
@@ -231,106 +254,122 @@
 	    <menuitem>
 	      <label>Multiple import formats using OGR</label>
 	      <help>Imports attribute tables in various formats.</help>
+	      <keywords>database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.in.ogr</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Export raster map</label>
 	  <items>
 	    <menuitem>
 	      <label>Multiple export formats using GDAL</label>
-	      <help>Exports GRASS raster map into GDAL supported formats.</help>
+	      <help>Exports GRASS raster maps into GDAL supported formats.</help>
+	      <keywords>raster,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.gdal</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>ASCII grid export</label>
 	      <help>Converts a raster map layer into an ASCII text file.</help>
+	      <keywords>raster,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.ascii</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>ASCII x,y,z export</label>
 	      <help>Export a raster map to a text file as x,y,z values based on cell centers.</help>
+	      <keywords>raster,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.xyz</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>ESRI ASCII grid export</label>
 	      <help>Converts a raster map layer into an ESRI ARCGRID file.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.arc</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>GRIDATB.FOR export</label>
 	      <help>Exports GRASS raster map to GRIDATB.FOR map file (TOPMODEL)</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.gridatb</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>MAT-File (v.4) export</label>
 	      <help>Exports a GRASS raster to a binary MAT-File.</help>
+	      <keywords>raster,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.mat</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Binary export</label>
 	      <help>Exports a GRASS raster to a binary array.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.bin</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>MPEG-1 export</label>
 	      <help>Raster File Series to MPEG Conversion Program.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.mpeg</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>PNG export</label>
 	      <help>Export GRASS raster as non-georeferenced PNG image format.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.png</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>PPM export</label>
 	      <help>Converts a GRASS raster map to a PPM image file at the pixel resolution of the currently defined region.</help>
+	      <keywords>raster,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.ppm</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>PPM from RGB export</label>
 	      <help>Converts 3 GRASS raster layers (R,G,B) to a PPM image file at the pixel resolution of the CURRENTLY DEFINED REGION.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.ppm3</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>POV-Ray export</label>
 	      <help>Converts a raster map layer into a height-field file for POVRAY.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.pov</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>TIFF export</label>
 	      <help>Exports a GRASS raster map to a 8/24bit TIFF image file at the pixel resolution of the currently defined region.</help>
+	      <keywords>raster,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.tiff</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>VRML export</label>
 	      <help>Export a raster map to the Virtual Reality Modeling Language (VRML)</help>
+	      <keywords>raster,export,VRML</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.vrml</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>VTK export</label>
 	      <help>Converts raster maps into the VTK-Ascii format</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.out.vtk</command>
 	    </menuitem>
@@ -342,43 +381,50 @@
 	    <menuitem>
 	      <label>Multiple export formats using OGR</label>
 	      <help>Converts to one of the supported OGR vector formats.</help>
+	      <keywords>vector,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.out.ogr</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>ASCII points/GRASS ASCII vector export</label>
 	      <help>Converts a GRASS binary vector map to a GRASS ASCII vector map.</help>
+	      <keywords>vector,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.out.ascii</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>DXF export</label>
 	      <help>Exports GRASS vector map layers to DXF file format.</help>
+	      <keywords>vector,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.out.dxf</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Multiple GPS export formats using GPSBabel</label>
-	      <help>Exports a vector map to a GPS receiver or file format supported by GPSBabel.</help>
+	      <help>Exports a vector map to a GPS receiver or file format supported by GpsBabel.</help>
+	      <keywords>vector,export,GPS</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.out.gpsbabel</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>POV-Ray export</label>
 	      <help>Converts to POV-Ray format, GRASS x,y,z -&gt; POV-Ray x,z,y</help>
+	      <keywords>vector,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.out.pov</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>SVG export</label>
 	      <help>Exports a GRASS vector map to SVG.</help>
+	      <keywords>vector,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.out.svg</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>VTK export</label>
 	      <help>Converts a GRASS binary vector map to VTK ASCII output.</help>
+	      <keywords>vector</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.out.vtk</command>
 	    </menuitem>
@@ -390,18 +436,21 @@
 	    <menuitem>
 	      <label>ASCII 3D export</label>
 	      <help>Converts a 3D raster map layer into an ASCII text file</help>
+	      <keywords>raster3d,voxel,export</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r3.out.ascii</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Vis5D export</label>
 	      <help>Export of GRASS 3D raster map to 3-dimensional Vis5D file.</help>
+	      <keywords>raster3d,voxel</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r3.out.v5d</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>VTK export</label>
 	      <help>Converts 3D raster maps (G3D) into the VTK-Ascii format</help>
+	      <keywords>raster3d,voxel</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r3.out.vtk</command>
 	    </menuitem>
@@ -412,52 +461,59 @@
 	  <items>
 	    <menuitem>
 	      <label>Multiple export formats using OGR</label>
-	      <help>Exports attribute tables in various formats.</help>
+	      <help>Exports attribute tables into various formats.</help>
+	      <keywords>database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.out.ogr</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Manage maps and volumes</label>
 	  <items>
 	    <menuitem>
 	      <label>Copy</label>
 	      <help>Copies available data files in the user's current mapset search path and location to the appropriate element directories under the user's current mapset.</help>
+	      <keywords>general,map management</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.copy</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>List</label>
 	      <help>Lists available GRASS data base files of the user-specified data type to standard output.</help>
+	      <keywords>general,map management</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.list</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>List filtered</label>
-	      <help>Apply regular expressions and wildcards to g.list</help>
+	      <help>Lists available GRASS data base files of the user-specified data type to standard output.</help>
+	      <keywords>general,map management</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.mlist</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Rename</label>
 	      <help>Renames data base element files in the user's current mapset.</help>
+	      <keywords>general,map management</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.rename</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Delete</label>
 	      <help>Removes data base element files from the user's current mapset.</help>
+	      <keywords>general,map management</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.remove</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Delete filtered</label>
-	      <help>Apply regular expressions and wildcards to g.remove</help>
+	      <help>Removes data base element files from the user's current mapset.</help>
+	      <keywords>general,map management</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.mremove</command>
 	    </menuitem>
@@ -469,83 +525,93 @@
 	    <menuitem>
 	      <label>Raster to vector</label>
 	      <help>Converts a raster map into a vector map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.to.vect</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Raster series to volume</label>
 	      <help>Converts 2D raster map slices to one 3D raster volume map.</help>
+	      <keywords>raster,volume,conversion</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.to.rast3</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Raster 2.5D to volume</label>
 	      <help>Creates a 3D volume map based on 2D elevation and value raster maps.</help>
+	      <keywords>raster,raster3d,voxel,conversion</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.to.rast3elev</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Vector to raster</label>
-	      <help>Converts a binary GRASS vector map layer into a GRASS raster map layer.</help>
+	      <help>Converts a binary GRASS vector map into a GRASS raster map .</help>
+	      <keywords>vector,raster,conversion</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.to.rast</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Vector to volume</label>
 	      <help>Converts a binary GRASS vector map (only points) layer into a 3D GRASS raster map layer.</help>
+	      <keywords>vector,volume,conversion</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.to.rast3</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>2D vector to 3D vector</label>
 	      <help>Performs transformation of 2D vector features to 3D.</help>
+	      <keywords>vector,transformation,3D</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.to.3d</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Sites to vector</label>
 	      <help>Converts a GRASS site_lists file into a vector map.</help>
+	      <keywords>vector,import,sites</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.sites</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Volume to raster series</label>
 	      <help>Converts 3D raster maps to 2D raster maps</help>
+	      <keywords>raster3d,voxel</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r3.to.rast</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Georectify</label>
 	  <help>Georectify raster and vector maps</help>
 	  <handler>self.OnGeorectify</handler>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>NVIZ (requires Tcl/Tk)</label>
 	  <help>nviz - Visualization and animation tool for GRASS data</help>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>nviz</command>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Bearing/distance to coordinates</label>
-	  <help>It assumes a cartesian coordinate system</help>
+	  <help>A simple utility for converting bearing and distance measurements to coordinates and vice versa.</help>
+	  <keywords>miscellaneous</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>m.cogo</command>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Postscript plot</label>
 	  <help>Hardcopy PostScript map output utility.</help>
+	  <keywords>postscript,map,printing</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>ps.map</command>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>E&amp;xit</label>
 	  <help>Exit GUI</help>
@@ -562,12 +628,14 @@
 	    <menuitem>
 	      <label>Display region</label>
 	      <help>Manages the boundary definitions for the geographic region.</help>
+	      <keywords>general</keywords>
 	      <handler>self.RunMenuCmd</handler>
 	      <command>g.region -p</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Set region</label>
 	      <help>Manages the boundary definitions for the geographic region.</help>
+	      <keywords>general</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.region -p</command>
 	    </menuitem>
@@ -584,36 +652,42 @@
 	    <menuitem>
 	      <label>Change working environment</label>
 	      <help>Change current mapset.</help>
+	      <keywords>general,settings</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.mapset</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>User access</label>
 	      <help>Controls access to the current mapset for other users on the system.</help>
+	      <keywords>general</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.access</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Show settings</label>
 	      <help>Outputs and modifies the user's current GRASS variable settings.</help>
+	      <keywords>general</keywords>
 	      <handler>self.RunMenuCmd</handler>
 	      <command>g.gisenv --v</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Change settings</label>
 	      <help>Outputs and modifies the user's current GRASS variable settings.</help>
+	      <keywords>general</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.gisenv</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Change default GUI</label>
 	      <help>Changes the default GRASS graphical user interface (GUI) setting.</help>
+	      <keywords>general,gui</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.change.gui.py</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Version</label>
 	      <help>Displays version and copyright information.</help>
+	      <keywords>general</keywords>
 	      <handler>self.RunMenuCmd</handler>
 	      <command>g.version -c</command>
 	    </menuitem>
@@ -625,19 +699,22 @@
 	    <menuitem>
 	      <label>Manage projections</label>
 	      <help>Converts co-ordinate system descriptions (i.e. projection information) between various formats (including GRASS format). Can also be used to create GRASS locations.</help>
+	      <keywords>general</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>g.proj</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Projection for current location</label>
-	      <help>Create/edit projection information for current location</help>
+	      <help>Interactively reset the location's projection settings.</help>
+	      <keywords>general,projection</keywords>
 	      <handler>self.OnXTerm</handler>
 	      <command>g.setproj</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Convert coordinates</label>
 	      <help>Convert coordinates from one projection to another (cs2cs frontend).</help>
+	      <keywords>miscellaneous,projection</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>m.proj</command>
 	    </menuitem>
@@ -658,71 +735,82 @@
 	  <items>
 	    <menuitem>
 	      <label>Digitize raster (requires XTerm)</label>
-	      <help>Digitize raster map</help>
+	      <help>Interactive tool used to draw and save vector features on a graphics monitor using a pointing device (mouse) and save to a raster map.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnXTerm</handler>
 	      <command>r.digit</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Compress/decompress</label>
 	      <help>Compresses and decompresses raster maps.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.compress</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Region boundaries</label>
 	      <help>Sets the boundary definitions for a raster map.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.region</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Manage NULL values</label>
-	      <help>Creates explicitly the NULL-value bitmap file.</help>
+	      <help>Manages NULL-values of given raster map.</help>
+	      <keywords>raster,null data</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.null</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Quantization</label>
 	      <help>Produces the quantization file for a floating-point map.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.quant</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Timestamp</label>
 	      <help>Print/add/remove a timestamp for a raster map.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.timestamp</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Resample using aggregate statistics</label>
-	      <help>Resamples raster map layers using aggregation.</help>
+	      <help>Resamples raster map layers to a coarser grid using aggregation.</help>
+	      <keywords>raster,resample</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.resamp.stats</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Resample using multiple methods</label>
-	      <help>Resamples raster map layers using interpolation.</help>
+	      <help>Resamples raster map layers to a finer grid using interpolation.</help>
+	      <keywords>raster,resample</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.resamp.interp</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Resample using nearest neighbor</label>
 	      <help>GRASS raster map layer data resampling capability.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.resample</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Resample using spline tension</label>
 	      <help>Reinterpolates and optionally computes topographic analysis from input raster map to a new raster map (possibly with different resolution) using regularized spline with tension and smoothing.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.resamp.rst</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Support file maintenance</label>
 	      <help>Allows creation and/or modification of raster map layer support files.</help>
+	      <keywords>raster,metadata</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.support</command>
 	    </menuitem>
@@ -732,23 +820,26 @@
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.support.stats</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Link to GDAL</label>
 	      <help>Link GDAL supported raster file to a binary raster map layer.</help>
+	      <keywords>raster,import</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.external</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Reproject raster</label>
 	      <help>Re-projects a raster map from one location to the current location.</help>
+	      <keywords>raster,projection</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.proj</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Tiling</label>
 	      <help>Produces tilings of the source projection for use in the destination region and projection.</help>
+	      <keywords>raster,tiling</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.tileset</command>
 	    </menuitem>
@@ -760,37 +851,43 @@
 	    <menuitem>
 	      <label>Color tables</label>
 	      <help>Creates/modifies the color table associated with a raster map layer.</help>
+	      <keywords>raster,color table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.colors</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Color tables (stddev)</label>
 	      <help>Set color rules based on stddev from a map's mean value.</help>
+	      <keywords>raster,color table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.colors.stddev</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Color rules</label>
-	      <help>Set colors interactively by entering color rules</help>
+	      <help>Creates/modifies the color table associated with a raster map layer.</help>
+	      <keywords>raster,color table</keywords>
 	      <handler>self.RulesCmd</handler>
 	      <command>r.colors</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Blend 2 color rasters</label>
 	      <help>Blends color components of two raster maps by a given ratio.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.blend</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Create RGB</label>
-	      <help>Combines red, green and blue map layers into a single composite map layer.</help>
+	      <help>Combines red, green and blue raster maps into a single composite raster map.</help>
+	      <keywords>raster,composite</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.composite</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>RGB to HIS</label>
 	      <help>Generates red, green and blue raster map layers combining hue, intensity and saturation (HIS) values from user-specified input raster map layers.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.his</command>
 	    </menuitem>
@@ -799,25 +896,29 @@
 	<menuitem>
 	  <label>Query by coordinates</label>
 	  <help>Queries raster map layers on their category values and category labels.</help>
+	  <keywords>raster</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>r.what</command>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Buffer rasters</label>
 	  <help>Creates a raster map layer showing buffer zones surrounding cells that contain non-NULL category values.</help>
+	  <keywords>raster,buffer</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>r.buffer</command>
 	</menuitem>
 	<menuitem>
 	  <label>Closest points</label>
 	  <help>Locates the closest points between objects in two raster maps.</help>
+	  <keywords>raster</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>r.distance</command>
 	</menuitem>
 	<menuitem>
 	  <label>Mask</label>
 	  <help>Create a MASK for limiting raster operation</help>
+	  <keywords>raster,mask</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>r.mask</command>
 	</menuitem>
@@ -832,12 +933,14 @@
 	    <menuitem>
 	      <label>Moving window</label>
 	      <help>Makes each cell category value a function of the category values assigned to the cells around it, and stores new cell values in an output raster map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.neighbors</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Neighborhood points</label>
 	      <help>Makes each cell value a function of the attribute values assigned to the vector points or centroids around it, and stores new cell values in an output raster map layer.</help>
+	      <keywords>vector,raster,aggregation</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.neighbors</command>
 	    </menuitem>
@@ -849,25 +952,29 @@
 	    <menuitem>
 	      <label>Cross product</label>
 	      <help>Creates a cross product of the category values from multiple raster map layers.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.cross</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Raster series</label>
 	      <help>Makes each output cell value a function of the values assigned to the corresponding cells in the input raster map layers.</help>
+	      <keywords>raster,series</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.series</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Patch raster maps</label>
 	      <help>Creates a composite raster map layer by using known category values from one (or more) map layer(s) to fill in areas of "no data" in another map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.patch</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Statistical overlay</label>
 	      <help>Calculates category or object oriented statistics.</help>
+	      <keywords>raster,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.statistics</command>
 	    </menuitem>
@@ -878,13 +985,15 @@
 	  <items>
 	    <menuitem>
 	      <label>Solar irradiance and irradiation</label>
-	      <help>Computes direct (beam), diffuse and reflected solar irradiation raster maps for given day, latitude, surface and atmospheric conditions. Solar parameters (e.g. sunrise, sunset times, declination, extraterrestrial irradiance, daylight length) are saved in the map history file. Alternatively, a local time can be specified to compute solar incidence angle and/or irradiance raster maps. The shadowing effect of the topography is optionally incorporated.</help>
+	      <help>Solar irradiance and irradiation model.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.sun</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Shadows map</label>
 	      <help>Calculates cast shadow areas from sun position and DEM. Either A: exact sun position is specified, or B: date/time to calculate the sun position by r.sunmask itself.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.sunmask</command>
 	    </menuitem>
@@ -896,64 +1005,74 @@
 	    <menuitem>
 	      <label>Cumulative movement costs</label>
 	      <help>Outputs a raster map layer showing the anisotropic cumulative cost of moving between different geographic locations on an input elevation raster map layer whose cell category values represent elevation combined with an input raster map layer whose cell values represent friction cost.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.walk</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Cost surface</label>
-	      <help>Outputs a raster map layer showing the cumulative cost of moving between different geographic locations on an input raster map layer whose cell category values represent cost.</help>
+	      <help>Creates a raster map showing the cumulative cost of moving between different geographic locations on an input raster map whose cell category values represent cost.</help>
+	      <keywords>raster,cost surface,cumulative costs</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.cost</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Least cost route or flow</label>
-	      <help>Traces a flow through an elevation model on a raster map layer.</help>
+	      <help>Traces a flow through an elevation model on a raster map.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.drain</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Shaded relief</label>
 	      <help>Creates shaded relief map from an elevation map (DEM).</help>
+	      <keywords>raster,elevation</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.shaded.relief</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Slope and aspect</label>
 	      <help>Generates raster map layers of slope, aspect, curvatures and partial derivatives from a raster map layer of true elevation values. Aspect is calculated counterclockwise from east.</help>
+	      <keywords>raster,terrain analysis</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.slope.aspect</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Terrain parameters</label>
-	      <help>Uses a multi-scale approach by taking fitting quadratic parameters to any size window (via least squares).</help>
+	      <help>Extracts terrain parameters from a DEM.</help>
+	      <keywords>raster,geomorphology</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.param.scale</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Textural features</label>
 	      <help>Generate images with textural features from a raster map.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.texture</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Visibility</label>
 	      <help>Line-of-sight raster analysis program.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.los</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Distance to features</label>
 	      <help>Generates a raster map layer of distance to features in input layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.grow.distance</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Horizon angle</label>
 	      <help>Horizon angle computation from a digital elevation model.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.horizon</command>
 	    </menuitem>
@@ -964,44 +1083,50 @@
 	  <items>
 	    <menuitem>
 	      <label>Clump</label>
-	      <help>Recategorizes data in a raster map layer by grouping cells that form physically discrete areas into unique categories.</help>
+	      <help>Recategorizes data in a raster map by grouping cells that form physically discrete areas into unique categories.</help>
+	      <keywords>raster,statistics,reclass</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.clump</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Grow</label>
 	      <help>Generates a raster map layer with contiguous areas grown by one cell.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.grow</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Thin</label>
 	      <help>Thins non-zero cells that denote linear features in a raster map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.thin</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Hydrologic modeling</label>
 	  <items>
 	    <menuitem>
 	      <label>Carve stream channels</label>
 	      <help>Takes vector stream data, transforms it to raster and subtracts depth from the output DEM.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.carve</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Fill lake</label>
-	      <help>Fills lake from seed at given level</help>
+	      <help>Fills lake from seed at given level.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.lake</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Depressionless map and flowlines</label>
 	      <help>Filters and generates a depressionless elevation map and a flow direction map from a given elevation layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.fill.dir</command>
 	    </menuitem>
@@ -1014,45 +1139,52 @@
 	    <menuitem>
 	      <label>Flow lines</label>
 	      <help>Construction of slope curves (flowlines), flowpath lengths, and flowline densities (upslope areas) from a raster digital elevation model (DEM)</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.flow</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>SIMWE Overland flow modeling</label>
 	      <help>Overland flow hydrologic simulation using path sampling method (SIMWE)</help>
+	      <keywords>raster,flow,hydrology</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.sim.water</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>SIMWE Sediment flux modeling</label>
 	      <help>Sediment transport and erosion/deposition simulation using path sampling method (SIMWE)</help>
+	      <keywords>raster,sediment flow,erosion,deposition</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.sim.sediment</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Topographic index map</label>
 	      <help>Creates topographic index [ln(a/tan(beta))] map from elevation map.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.topidx</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>TOPMODEL simulation</label>
 	      <help>Simulates TOPMODEL which is a physically based hydrologic model.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.topmodel</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Watershed subbasins</label>
 	      <help>Generates a raster map layer showing watershed subbasins.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.basins.fill</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Watershed analysis</label>
 	      <help>Watershed basin analysis program.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.watershed</command>
 	    </menuitem>
@@ -1069,26 +1201,30 @@
 	  <items>
 	    <menuitem>
 	      <label>Set up (requires XTerm)</label>
-	      <help>Set up sampling and analysis framework</help>
+	      <help>Interactive tool used to setup the sampling and analysis framework that will be used by the other r.le programs.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnXTerm</handler>
 	      <command>r.le.setup</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Analyze landscape</label>
 	      <help>Contains a set of measures for attributes, diversity, texture, juxtaposition, and edge.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.le.pixel</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Analyze patches</label>
 	      <help>Calculates attribute, patch size, core (interior) size, shape, fractal dimension, and perimeter measures for sets of patches in a landscape.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.le.patch</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Output</label>
 	      <help>Displays the boundary of each r.le patch and shows how the boundary is traced, displays the attribute, size, perimeter and shape indices for each patch and saves the data in an output file.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.le.trace</command>
 	    </menuitem>
@@ -1100,88 +1236,102 @@
 	    <menuitem>
 	      <label>Set up sampling and analysis framework</label>
 	      <help>Configuration editor for r.li.'index'</help>
+	      <keywords>raster,landscape structure analysis</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.setup</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Edge density</label>
 	      <help>Calculates edge density index on a raster map, using a 4 neighbour algorithm</help>
+	      <keywords>raster,landscape structure analysis,patch index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.edgedensity</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Contrast weighted edge density</label>
 	      <help>Calculates contrast weighted edge density index on a raster map</help>
+	      <keywords>raster,landscape structure analysis,patch index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.cwed</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Patch area mean</label>
 	      <help>Calculates mean patch size index on a raster map, using a 4 neighbour algorithm</help>
+	      <keywords>raster,landscape structure analysis,patch index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.mps</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Patch area range</label>
 	      <help>Calculates range of patch area size on a raster map</help>
+	      <keywords>raster,landscape structure analysis,patch index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.padrange</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Patch area Std Dev</label>
 	      <help>Calculates standard deviation of patch area a raster map</help>
+	      <keywords>raster,landscape structure analysis,patch index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.padsd</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Patch area Coeff Var</label>
 	      <help>Calculates coefficient of variation of patch area on a raster map</help>
+	      <keywords>raster,landscape structure analysis,patch index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.padcv</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Patch density</label>
 	      <help>Calculates patch density index on a raster map, using a 4 neighbour algorithm</help>
+	      <keywords>raster,landscape structure analysis,patch index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.patchdensity</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Patch number</label>
 	      <help>Calculates patch number index on a raster map, using a 4 neighbour algorithm.</help>
+	      <keywords>raster,landscape structure analysis,patch index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.patchnum</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Dominance's diversity</label>
 	      <help>Calculates dominance's diversity index on a raster map</help>
+	      <keywords>raster,landscape structure analysis,diversity index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.dominance</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Shannon's diversity</label>
 	      <help>Calculates Shannon's diversity index on a raster map</help>
+	      <keywords>raster,landscape structure analysis,diversity index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.shannon</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Simpson's diversity</label>
 	      <help>Calculates Simpson's diversity index on a raster map</help>
+	      <keywords>raster,landscape structure analysis,diversity index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.simpson</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Richness</label>
 	      <help>Calculates dominance's diversity index on a raster map</help>
+	      <keywords>raster,landscape structure analysis,dominance index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.richness</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Shape index</label>
 	      <help>Calculates shape index on a raster map</help>
+	      <keywords>raster,landscape structure analysis,patch index</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.li.shape</command>
 	    </menuitem>
@@ -1193,56 +1343,64 @@
 	    <menuitem>
 	      <label>Rate of spread</label>
 	      <help>Generates three, or four raster map layers showing 1) the base (perpendicular) rate of spread (ROS), 2) the maximum (forward) ROS, 3) the direction of the maximum ROS, and optionally 4) the maximum potential spotting distance.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.ros</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Least-cost spread paths</label>
 	      <help>Recursively traces the least cost path backwards to cells from which the cumulative cost was determined.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.spreadpath</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Anisotropic spread simulation</label>
-	      <help>It optionally produces raster maps to contain backlink UTM coordinates for tracing spread paths.</help>
+	      <help>Simulates elliptically anisotropic spread on a graphics window and generates a raster map of the cumulative time of spread, given raster maps containing the rates of spread (ROS), the ROS directions and the spread origins.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.spread</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Change category values and labels</label>
 	  <items>
 	    <menuitem>
 	      <label>Interactively edit category values</label>
 	      <help>Interactively edit cell values in a raster map.</help>
+	      <keywords>display,raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>d.rast.edit</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Reclassify by size</label>
-	      <help>Reclasses a raster map greater or less than user specified area size (in hectares)</help>
+	      <help>Reclasses a raster map greater or less than user specified area size (in hectares).</help>
+	      <keywords>raster,statistics,aggregation</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.reclass.area</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Reclassify interactively</label>
-	      <help>Reclassify raster categories interactively by entering reclass rules</help>
+	      <help>Creates a new map layer whose category values are based upon a reclassification of the categories in an existing raster map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.RulesCmd</handler>
 	      <command>r.reclass</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Reclassify using rules file</label>
 	      <help>Creates a new map layer whose category values are based upon a reclassification of the categories in an existing raster map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.reclass</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Recode interactively</label>
-	      <help>Recode raster categories interactively by entering recode rules (create new raster map)</help>
+	      <help>Recodes categorical raster maps.</help>
+	      <keywords>raster,recode category</keywords>
 	      <handler>self.RulesCmd</handler>
 	      <command>r.recode</command>
 	    </menuitem>
@@ -1252,25 +1410,28 @@
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.recode.file</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Rescale</label>
 	      <help>Rescales the range of category values in a raster map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.rescale</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Rescale with histogram</label>
 	      <help>Rescales histogram equalized the range of category values in a raster map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.rescale.eq</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Concentric circles</label>
 	  <help>Creates a raster map containing concentric rings around a given point.</help>
+	  <keywords>raster</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>r.circle</command>
 	</menuitem>
@@ -1280,12 +1441,14 @@
 	    <menuitem>
 	      <label>Random cells</label>
 	      <help>Generates random cell values with spatial dependence.</help>
+	      <keywords>raster,random,cell</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.random.cells</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Random cells and vector points</label>
-	      <help>Creates a raster map layer and vector point map containing randomly located sites.</help>
+	      <help>Creates a raster map layer and vector point map containing randomly located points.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.random</command>
 	    </menuitem>
@@ -1297,39 +1460,45 @@
 	    <menuitem>
 	      <label>Fractal surface</label>
 	      <help>Creates a fractal surface of a given fractal dimension.</help>
+	      <keywords>raster,DEM,fractal</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.surf.fractal</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Gaussian kernel density surface</label>
 	      <help>Generates a raster density map from vector points data using a moving 2D isotropic Gaussian kernel or optionally generates a vector density map on vector network with a 1D kernel.</help>
+	      <keywords>vector,kernel density</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.kernel</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Gaussian deviates surface</label>
 	      <help>GRASS module to produce a raster map layer of gaussian deviates whose mean and standard deviation can be expressed by the user. It uses a gaussian random number generator.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.surf.gauss</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Plane</label>
 	      <help>Creates raster plane map given dip (inclination), aspect (azimuth) and one point.</help>
+	      <keywords>raster,elevation</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.plane</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Random deviates surface</label>
 	      <help>Produces a raster map layer of uniform random deviates whose range can be expressed by the user.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.surf.random</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Random surface with spatial dependence</label>
 	      <help>Generates random surface(s) with spatial dependence.</help>
+	      <keywords>raster,random,surface</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.random.surface</command>
 	    </menuitem>
@@ -1337,7 +1506,8 @@
 	</menu>
 	<menuitem>
 	  <label>Generate contour lines</label>
-	  <help>Produces a vector map layer of specified contours from a raster map layer.</help>
+	  <help>Produces a vector map of specified contours from a raster map.</help>
+	  <keywords>raster,DEM,contours,vector</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>r.contour</command>
 	</menuitem>
@@ -1347,144 +1517,166 @@
 	    <menuitem>
 	      <label>Bilinear from raster points</label>
 	      <help>Bilinear interpolation utility for raster map layers.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.bilinear</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Bilinear and bicubic from vector points</label>
 	      <help>Bicubic or bilinear spline interpolation with Tykhonov regularization.</help>
+	      <keywords>vector,interpolation</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.surf.bspline</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>IDW from raster points</label>
-	      <help>Surface interpolation utility for raster map layers.</help>
+	      <help>Surface interpolation utility for raster map.</help>
+	      <keywords>raster,interpolation</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.surf.idw</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>IDW from vector points</label>
 	      <help>Surface interpolation from vector point data by Inverse Distance Squared Weighting.</help>
+	      <keywords>vector,interpolation</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.surf.idw</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Raster contours</label>
 	      <help>Surface generation program from rasterized contours.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.surf.contour</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Regularized spline tension</label>
 	      <help>Spatial approximation and topographic analysis from given point or isoline data in vector format to floating point raster format using regularized spline with tension.</help>
+	      <keywords>vector</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.surf.rst</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Fill NULL cells</label>
 	      <help>Fills no-data areas in raster maps using v.surf.rst splines interpolation</help>
+	      <keywords>raster,elevation,interpolation</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.fillnulls</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Report and statistics</label>
 	  <items>
 	    <menuitem>
 	      <label>Basic raster metadata</label>
 	      <help>Output basic information about a raster map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.info</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Manage category information</label>
 	      <help>Manages category values and labels associated with user-specified raster map layers.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.category</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>General statistics</label>
 	      <help>Generates area statistics for raster map layers.</help>
+	      <keywords>raster,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.stats</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Quantiles for large data sets</label>
 	      <help>Compute quantiles using two passes.</help>
+	      <keywords>raster,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.quantile</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Range of category values</label>
 	      <help>Prints terse list of category values found in a raster map layer.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.describe</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Sum category values</label>
 	      <help>Sums up the raster cell values.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.sum</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Sum area by raster map and category</label>
 	      <help>Reports statistics for raster map layers.</help>
+	      <keywords>raster,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.report</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Statistics for clumped cells</label>
 	      <help>Calculates the volume of data "clumps", and (optionally) produces a GRASS vector points map containing the calculated centroids of these clumps.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.volume</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Total corrected area</label>
 	      <help>Surface area estimation for rasters.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.surf.area</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Univariate raster statistics</label>
 	      <help>Calculates univariate statistics from the non-null cells of a raster map.</help>
+	      <keywords>raster,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.univar</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Sample transects</label>
 	      <help>Outputs the raster map layer values lying on user-defined line(s).</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.profile</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Sample transects (bearing/distance)</label>
 	      <help>Outputs raster map layer values lying along user defined transect line(s).</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.transect</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Covariance/correlation</label>
 	      <help>Outputs a covariance/correlation matrix for user-specified raster map layer(s).</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.covar</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Linear regression</label>
 	      <help>Calculates linear regression from two raster maps: y = a + b*x</help>
+	      <keywords>raster,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.regression.line</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Mutual category occurrences</label>
 	      <help>Tabulates the mutual occurrence (coincidence) of categories for two raster map layers.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.coin</command>
 	    </menuitem>
@@ -1506,105 +1698,121 @@
 	    <menuitem>
 	      <label>Edit vector map (non-interactively)</label>
 	      <help>Edits a vector map, allows adding, deleting and modifying selected vector features.</help>
+	      <keywords>vector,editing,geometry</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.edit</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Create or rebuild topology</label>
 	      <help>Creates topology for GRASS vector map.</help>
+	      <keywords>vector,topology</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.build</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Clean vector map</label>
 	      <help>Toolset for cleaning topology of vector map.</help>
+	      <keywords>vector,topology</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.clean</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Smooth or simplify</label>
-	      <help>Smooth or simplify lines/boundaries (remove vertices).</help>
+	      <help>Vector based generalization.</help>
+	      <keywords>vector,generalization,simplification,smoothing,displacement,network generalization</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.generalize</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Convert object types</label>
 	      <help>Change the type of geometry elements.</help>
+	      <keywords>vector,geometry</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.type_wrapper.py</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Add centroids</label>
 	      <help>Adds missing centroids to closed boundaries.</help>
+	      <keywords>vector,centroid,area</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.centroids</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Build polylines</label>
 	      <help>Builds polylines from lines or boundaries.</help>
+	      <keywords>vector,geometry,topology</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.build.polylines</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Split polylines</label>
 	      <help>Creates points/segments from input vector lines and positions.</help>
+	      <keywords>vector,geometry</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.segment</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Parallel lines</label>
-	      <help>Create parallel line to input lines</help>
+	      <help>Creates parallel line to input vector lines.</help>
+	      <keywords>vector,geometry</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.parallel</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Dissolve boundaries</label>
 	      <help>Dissolves boundaries between adjacent areas sharing a common category number or attribute.</help>
+	      <keywords>vector,area,dissolve</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.dissolve</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Create 3D vector over raster</label>
 	      <help>Converts vector map to 3D by sampling of elevation raster map.</help>
+	      <keywords>vector,geometry,sampling</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.drape</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Extrude 3D vector map</label>
 	      <help>Extrudes flat vector object to 3D with defined height.</help>
+	      <keywords>vector,geometry,3D</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.extrude</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Link to OGR</label>
 	      <help>Creates a new vector as a read-only link to OGR layer.</help>
+	      <keywords>vector</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.external</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Create labels</label>
 	      <help>Creates paint labels for a vector map from attached attributes.</help>
+	      <keywords>vector,paint labels</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.label</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Reposition vector map</label>
 	      <help>Performs an affine transformation (shift, scale and rotate, or GPCs) on vector map.</help>
+	      <keywords>vector,transformation</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.transform</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Reproject vector map</label>
 	      <help>Allows projection conversion of vector maps.</help>
+	      <keywords>vector,projection</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.proj</command>
 	    </menuitem>
@@ -1616,6 +1824,7 @@
 	    <menuitem>
 	      <label>Color tables</label>
 	      <help>Set color rules for features in a vector using a numeric attribute column.</help>
+	      <keywords>vector,color table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.colors</command>
 	    </menuitem>
@@ -1627,29 +1836,33 @@
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Query with attributes</label>
 	  <help>Selects vector objects from an existing vector map and creates a new map containing only the selected objects.</help>
+	  <keywords>vector,extract</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.extract</command>
 	</menuitem>
 	<menuitem>
 	  <label>Query with coordinate(s)</label>
 	  <help>Queries a vector map layer at given locations.</help>
+	  <keywords>vector,querying</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.what</command>
 	</menuitem>
 	<menuitem>
 	  <label>Query with another vector map</label>
-	  <help>Select features from ainput by features from binput</help>
+	  <help>Selects features from vector map (A) by features from other vector map (B).</help>
+	  <keywords>vector,spatial query</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.select</command>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Buffer vectors</label>
 	  <help>Creates a buffer around features of given type (areas must contain centroid).</help>
+	  <keywords>vector,buffer</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.buffer</command>
 	</menuitem>
@@ -1659,18 +1872,21 @@
 	    <menuitem>
 	      <label>Detect edges</label>
 	      <help>Detects the object's edges from a LIDAR data set.</help>
+	      <keywords>vector,LIDAR,edges</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.lidar.edgedetection</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Detect interiors</label>
 	      <help>Building contour determination and Region Growing algorithm for determining the building inside</help>
+	      <keywords>vector,LIDAR</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.lidar.growing</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Correct and reclassify objects</label>
 	      <help>Correction of the v.lidar.growing output. It is the last of the three algorithms for LIDAR filtering.</help>
+	      <keywords>vector,LIDAR</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.lidar.correction</command>
 	    </menuitem>
@@ -1682,24 +1898,28 @@
 	    <menuitem>
 	      <label>Create LRS</label>
 	      <help>Create Linear Reference System</help>
+	      <keywords>vector,LRS,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.lrs.create</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Create stationing</label>
 	      <help>Create stationing from input lines, and linear reference system</help>
+	      <keywords>vector,LRS,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.lrs.label</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Create points/segments</label>
 	      <help>Creates points/segments from input lines, linear reference system and positions read from stdin or a file.</help>
+	      <keywords>vector,LRS,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.lrs.segment</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Find line id and offset</label>
 	      <help>Finds line id and real km+offset for given points in vector map using linear reference system.</help>
+	      <keywords>vector,LRS,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.lrs.where</command>
 	    </menuitem>
@@ -1708,6 +1928,7 @@
 	<menuitem>
 	  <label>Nearest features</label>
 	  <help>Finds the nearest element in vector map 'to' for elements in vector map 'from'.</help>
+	  <keywords>vector,database,attribute table</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.distance</command>
 	</menuitem>
@@ -1716,49 +1937,57 @@
 	  <items>
 	    <menuitem>
 	      <label>Allocate subnets</label>
-	      <help>Centre node must be opened (costs &gt;= 0). Costs of centre node are used in calculation</help>
+	      <help>Allocate subnets for nearest centres (direction from centre).</help>
+	      <keywords>vector,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.net.alloc</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Network maintenance</label>
-	      <help>Network maintenance.</help>
+	      <help>Performs network maintenance.</help>
+	      <keywords>vector,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.net</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Visibility network</label>
 	      <help>Visibility graph construction.</help>
+	      <keywords>vector,path,visibility</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.net.visibility</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Shortest path</label>
 	      <help>Finds shortest path on vector network.</help>
+	      <keywords>vector,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.net.path</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Display shortest route (requires XTerm)</label>
-	      <help>Display shortest route along network between 2 nodes (visualization only, requires XTerm))</help>
+	      <help>Finds shortest path for selected starting and ending node.</help>
+	      <keywords>display,networking</keywords>
 	      <handler>self.OnXTerm</handler>
 	      <command>d.path</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Split net</label>
-	      <help>Splits net to bands between cost isolines (direction from centre). Centre node must be opened (costs &gt;= 0). Costs of centre node are used in calculation.</help>
+	      <help>Splits net by cost isolines.</help>
+	      <keywords>vector,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.net.iso</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Steiner tree</label>
-	      <help>Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm is used in this module so the result may be sub optimal</help>
+	      <help>Create Steiner tree for the network and given terminals</help>
+	      <keywords>vector,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.net.steiner</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Traveling salesman analysis</label>
-	      <help>Note that TSP is NP-hard, heuristic algorithm is used by this module and created cycle may be sub optimal</help>
+	      <help>Creates a cycle connecting given nodes (Traveling salesman problem).</help>
+	      <keywords>vector,networking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.net.salesman</command>
 	    </menuitem>
@@ -1770,45 +1999,51 @@
 	    <menuitem>
 	      <label>Overlay vector maps</label>
 	      <help>Overlays two vector maps.</help>
+	      <keywords>vector,geometry</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.overlay</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Patch vector maps</label>
 	      <help>Create a new vector map layer by combining other vector map layers.</help>
+	      <keywords>vector</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.patch</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Change attributes</label>
 	  <items>
 	    <menuitem>
 	      <label>Manage or report categories</label>
 	      <help>Attach, delete or report vector categories to map geometry.</help>
+	      <keywords>vector,category</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.category</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Reclassify objects interactively</label>
-	      <help>Reclassify vector objects interactively by entering SQL rules</help>
+	      <help>Changes vector category values for an existing vector map according to results of SQL queries or a value in attribute table column.</help>
+	      <keywords>vector,reclass,attributes</keywords>
 	      <handler>self.RulesCmd</handler>
 	      <command>v.reclass</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Reclassify objects using rules file</label>
 	      <help>Changes vector category values for an existing vector map according to results of SQL queries or a value in attribute table column.</help>
+	      <keywords>vector,reclass,attributes</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.reclass</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Generate area for current region</label>
 	  <help>Create a new vector from the current region.</help>
+	  <keywords>vector</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.in.region</command>
 	</menuitem>
@@ -1818,18 +2053,21 @@
 	    <menuitem>
 	      <label>Convex hull</label>
 	      <help>Uses a GRASS vector points map to produce a convex hull vector map.</help>
+	      <keywords>vector,geometry</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.hull</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Delaunay triangles</label>
 	      <help>Creates a Delaunay triangulation from an input vector map containing points or centroids.</help>
+	      <keywords>vector</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.delaunay</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Voronoi diagram/Thiessen polygons</label>
 	      <help>Creates a Voronoi diagram from an input vector map containing points or centroids.</help>
+	      <keywords>vector</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.voronoi</command>
 	    </menuitem>
@@ -1838,6 +2076,7 @@
 	<menuitem>
 	  <label>Generate grid</label>
 	  <help>Creates a GRASS vector map of a user-defined grid.</help>
+	  <keywords>vector</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.mkgrid</command>
 	</menuitem>
@@ -1847,52 +2086,60 @@
 	    <menuitem>
 	      <label>Generate from database</label>
 	      <help>Creates new vector (points) map from database table containing coordinates.</help>
+	      <keywords>vector,import,database,points</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.in.db</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Generate points along lines</label>
 	      <help>Create points along input lines in new vector with 2 layers.</help>
+	      <keywords>vector,geometry</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.to.points</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Generate random points</label>
 	      <help>Randomly generate a 2D/3D vector points map.</help>
+	      <keywords>vector,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.random</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Perturb points</label>
 	      <help>Random location perturbations of GRASS vector points</help>
+	      <keywords>vector</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.perturb</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Remove outliers in point sets</label>
 	  <help>Removes outliers from vector point data.</help>
+	  <keywords>vector,statistics</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.outlier</command>
 	</menuitem>
 	<menuitem>
 	  <label>Test/training point sets</label>
 	  <help>Randomly partition points into test/train sets.</help>
+	  <keywords>vector,statistics</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.kcv</command>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Update area attributes from raster</label>
 	  <help>Calculates univariate statistics from a GRASS raster map based on vector polygons and uploads statistics to new attribute columns.</help>
+	  <keywords>vector,raster,statistics</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.rast.stats</command>
 	</menuitem>
 	<menuitem>
 	  <label>Update point attributes from areas</label>
 	  <help>Uploads vector values at positions of vector points to the table.</help>
+	  <keywords>vector,database,attribute table</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.what.vect</command>
 	</menuitem>
@@ -1902,57 +2149,65 @@
 	    <menuitem>
 	      <label>Sample raster maps at point locations</label>
 	      <help>Uploads raster values at positions of vector points to the table.</help>
+	      <keywords>vector,raster,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.what.rast</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Sample raster neighborhood around points</label>
 	      <help>Samples a raster map at vector point locations.</help>
+	      <keywords>vector</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.sample</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Reports and statistics</label>
 	  <items>
 	    <menuitem>
 	      <label>Basic vector metadata</label>
-	      <help>Outputs basic information about a user-specified vector map layer.</help>
+	      <help>Outputs basic information about a user-specified vector map.</help>
+	      <keywords>vector,metadata,history</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.info</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Report topology by category</label>
 	      <help>Reports geometry statistics for vectors.</help>
+	      <keywords>vector,report,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.report</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Upload or report topology</label>
-	      <help>Populate database values from vector features.</help>
+	      <help>Populates database values from vector features.</help>
+	      <keywords>vector,database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.to.db</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Univariate attribute statistics</label>
 	      <help>Calculates univariate statistics for attribute. Variance and standard deviation is calculated only for points if specified.</help>
+	      <keywords>vector,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.univar</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Quadrat indices</label>
 	      <help>Indices for quadrat counts of sites lists.</help>
+	      <keywords>vector,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.qcount</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Test normality</label>
 	      <help>Tests for normality for points.</help>
+	      <keywords>vector,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.normal</command>
 	    </menuitem>
@@ -1969,19 +2224,22 @@
 	    <menuitem>
 	      <label>Create/edit group</label>
 	      <help>Creates, edits, and lists groups and subgroups of imagery files.</help>
+	      <keywords>imagery</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.group</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Target group</label>
 	      <help>Targets an imagery group to a GRASS location and mapset.</help>
+	      <keywords>imagery</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.target</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Mosaic images</label>
 	      <help>Mosaics up to 4 images and extends colormap; creates map *.mosaic</help>
+	      <keywords>raster,imagery,mosaicking</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.image.mosaic</command>
 	    </menuitem>
@@ -1992,19 +2250,22 @@
 	  <items>
 	    <menuitem>
 	      <label>Color balance for RGB</label>
-	      <help>Auto-balancing of colors for LANDSAT images</help>
+	      <help>Performs auto-balancing of colors for LANDSAT images.</help>
+	      <keywords>raster,imagery,colors</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.landsat.rgb</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>HIS to RGB</label>
-	      <help>Hue-intensity-saturation (his) to red-green-blue (rgb) raster map color transformation function.</help>
+	      <help>Transforms raster maps from HIS (Hue-Intensity-Saturation) color space to RGB (Red-Green-Blue) color space.</help>
+	      <keywords>imagery,color transformation,RGB,HIS</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.his.rgb</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>RGB to HIS</label>
-	      <help>Red-green-blue (rgb) to hue-intensity-saturation (his) raster map color transformation function</help>
+	      <help>Transforms raster maps from RGB (Red-Green-Blue) color space to HIS (Hue-Intensity-Saturation) color space.</help>
+	      <keywords>imagery,color transformation,RGB,HIS</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.rgb.his</command>
 	    </menuitem>
@@ -2012,20 +2273,23 @@
 	</menu>
 	<menuitem>
 	  <label>Rectify image or raster</label>
-	  <help>Rectifies an image by computing a coordinate transformation for each pixel in the image based on the control points</help>
+	  <help>Rectifies an image by computing a coordinate transformation for each pixel in the image based on the control points.</help>
+	  <keywords>imagery,rectify</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>i.rectify</command>
 	</menuitem>
 	<menuitem>
 	  <label>Ortho photo rectification (requires Xterm)</label>
-	  <help>Ortho Photo rectification</help>
+	  <help>Menu driver for the photo imagery programs.</help>
+	  <keywords>imagery,orthorectify</keywords>
 	  <handler>self.OnXTerm</handler>
 	  <command>i.ortho.photo</command>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>Brovey sharpening</label>
 	  <help>Brovey transform to merge multispectral and high-res panchromatic channels</help>
+	  <keywords>imagery,fusion,Brovey</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>i.fusion.brovey</command>
 	</menuitem>
@@ -2034,39 +2298,45 @@
 	  <items>
 	    <menuitem>
 	      <label>Clustering input for unsupervised classification</label>
-	      <help>The resulting signature file is used as input for i.maxlik, to generate an unsupervised image classification.</help>
+	      <help>Generates spectral signatures for land cover types in an image using a clustering algorithm.</help>
+	      <keywords>imagery,classification,signatures</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.cluster</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Maximum likelihood classification (MLC)</label>
-	      <help>Classification is based on the spectral signature information generated by either i.cluster, i.class, or i.gensig.</help>
+	      <help>Classifies the cell spectral reflectances in imagery data.</help>
+	      <keywords>imagery,classification,MLC</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.maxlik</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Sequential maximum a posteriori classification (SMAP)</label>
 	      <help>Performs contextual image classification using sequential maximum a posteriori (SMAP) estimation.</help>
+	      <keywords>imagery,classification,supervised,SMAP</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.smap</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Interactive input for supervised classification (requires Xterm)</label>
-	      <help>Interactive input for supervised classification</help>
+	      <help>Generates spectral signatures for an image by allowing the user to outline regions of interest.</help>
+	      <keywords>imagery</keywords>
 	      <handler>self.OnXTerm</handler>
 	      <command>i.class</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Input for supervised MLC</label>
-	      <help>Generates statistics for i.maxlik from raster map layer.</help>
+	      <help>Generates statistics for i.maxlik from raster map.</help>
+	      <keywords>imagery,classification,supervised,MLC</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.gensig</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Input for supervised SMAP</label>
-	      <help>Generate statistics for i.smap from raster map layer.</help>
+	      <help>Generates statistics for i.smap from raster map.</help>
+	      <keywords>imagery,classification,supervised,SMAP</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.gensigset</command>
 	    </menuitem>
@@ -2078,12 +2348,14 @@
 	    <menuitem>
 	      <label>Edge detection</label>
 	      <help>Zero-crossing "edge detection" raster function for image processing.</help>
+	      <keywords>imagery</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.zc</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Matrix/convolving filter</label>
 	      <help>Raster map matrix filter.</help>
+	      <keywords>raster,map algebra</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.mfilter.fp</command>
 	    </menuitem>
@@ -2096,13 +2368,15 @@
 	</menuitem>
 	<menuitem>
 	  <label>Spectral response</label>
-	  <help>displays spectral response at user specified locations in group or images</help>
+	  <help>Displays spectral response at user specified locations in group or images.</help>
+	  <keywords>imagery,raster,multispectral</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>i.spectral</command>
 	</menuitem>
 	<menuitem>
 	  <label>Tasseled cap vegetation index</label>
 	  <help>Tasseled Cap (Kauth Thomas) transformation for LANDSAT-TM data</help>
+	  <keywords>raster,imagery</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>i.tasscap</command>
 	</menuitem>
@@ -2112,24 +2386,28 @@
 	    <menuitem>
 	      <label>Canonical correlation</label>
 	      <help>Canonical components analysis (cca) program for image processing.</help>
+	      <keywords>imagery</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.cca</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Principal components</label>
 	      <help>Principal components analysis (pca) program for image processing.</help>
+	      <keywords>imagery,image transformation,PCA</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.pca</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Fast Fourier</label>
 	      <help>Fast Fourier Transform (FFT) for image processing.</help>
+	      <keywords>imagery,FFT</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.fft</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Inverse Fast Fourier</label>
 	      <help>Inverse Fast Fourier Transform (IFFT) for image processing.</help>
+	      <keywords>imagery,FFT</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.ifft</command>
 	    </menuitem>
@@ -2138,28 +2416,32 @@
 	<menuitem>
 	  <label>Atmospheric correction</label>
 	  <help>Performs atmospheric correction using the 6S algorithm.</help>
+	  <keywords>imagery,atmospheric correction</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>i.atcorr</command>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Report and statistics</label>
 	  <items>
 	    <menuitem>
 	      <label>Bit pattern comparison </label>
 	      <help>Compares bit patterns with a raster map.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.bitpattern</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Kappa analysis</label>
 	      <help>Calculate error matrix and kappa parameter for accuracy assessment of classification result.</help>
+	      <keywords>raster</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r.kappa</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>OIF for LandSat TM</label>
 	      <help>Calculates Optimum-Index-Factor table for LANDSAT TM bands 1-5, &amp; 7</help>
+	      <keywords>raster,imagery,statistics</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>i.oif</command>
 	    </menuitem>
@@ -2176,21 +2458,24 @@
 	    <menuitem>
 	      <label>Manage 3D NULL values</label>
 	      <help>Explicitly create the 3D NULL-value bitmap file.</help>
+	      <keywords>raster3d,voxel</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r3.null</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Manage timestamp</label>
 	      <help>Print/add/remove a timestamp for a 3D raster map</help>
+	      <keywords>raster3d,voxel</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r3.timestamp</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menuitem>
 	  <label>3D Mask</label>
 	  <help>Establishes the current working 3D raster mask.</help>
+	  <keywords>raster3d,voxel</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>r3.mask</command>
 	</menuitem>
@@ -2202,22 +2487,25 @@
 	<menuitem>
 	  <label>Cross section</label>
 	  <help>Creates cross section 2D raster map from 3d raster map based on 2D elevation map</help>
+	  <keywords>raster3d,voxel</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>r3.cross.rast</command>
 	</menuitem>
 	<menuitem>
 	  <label>Interpolate volume from points</label>
 	  <help>Interpolates point data to a G3D grid volume using regularized spline with tension (RST) algorithm.</help>
+	  <keywords>vector</keywords>
 	  <handler>self.OnMenuCmd</handler>
 	  <command>v.vol.rst</command>
 	</menuitem>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Report and Statistics</label>
 	  <items>
 	    <menuitem>
 	      <label>Basic volume metadata</label>
 	      <help>Outputs basic information about a user-specified 3D raster map layer.</help>
+	      <keywords>raster3d,voxel</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>r3.info</command>
 	    </menuitem>
@@ -2234,87 +2522,100 @@
 	    <menuitem>
 	      <label>Describe table</label>
 	      <help>Describes a table in detail.</help>
+	      <keywords>database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.describe</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>List columns</label>
 	      <help>List all columns for a given table.</help>
+	      <keywords>database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.columns</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>List drivers</label>
 	      <help>List all database drivers.</help>
+	      <keywords>database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.drivers</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>List tables</label>
 	      <help>Lists all tables for a given database.</help>
+	      <keywords>database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.tables</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Manage databases</label>
 	  <items>
 	    <menuitem>
 	      <label>Connect</label>
 	      <help>Prints/sets general DB connection for current mapset and exits.</help>
+	      <keywords>database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.connect</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Login</label>
 	      <help>Sets user/password for driver/database.</help>
+	      <keywords>database,SQL</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.login</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Copy table</label>
-	      <help>Copy a table. Either 'from_table' (optionally with 'where') can be used or 'select' option, but not 'from_table' and 'select' at the same time.</help>
+	      <help>Copy a table.</help>
+	      <keywords>database,attribute table,SQL</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.copy</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>New table</label>
 	      <help>Creates and adds a new attribute table to a given layer of an existing vector map.</help>
+	      <keywords>vector,database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.db.addtable</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Remove table</label>
 	      <help>Drops an attribute table.</help>
+	      <keywords>database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.droptable</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Add columns</label>
 	      <help>Adds one or more columns to the attribute table connected to a given vector map.</help>
+	      <keywords>vector,database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.db.addcol</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Change values</label>
 	      <help>Allows to update a column in the attribute table connected to a vector map.</help>
+	      <keywords>vector,database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.db.update</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Rename column</label>
 	      <help>Renames a column in the attribute table connected to a given vector map.</help>
+	      <keywords>vector,database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.db.renamecol</command>
 	    </menuitem>
-	    <separator/>
+	    <separator />
 	    <menuitem>
 	      <label>Test</label>
 	      <help>Test database driver, database must exist and set by db.connect.</help>
+	      <keywords>database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.test</command>
 	    </menuitem>
@@ -2326,36 +2627,41 @@
 	    <menuitem>
 	      <label>Query any table</label>
 	      <help>Selects data from table.</help>
+	      <keywords>database,attribute table,SQL</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.select</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Query vector attribute data</label>
 	      <help>Prints vector map attributes.</help>
+	      <keywords>vector,database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.db.select</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>SQL statement</label>
 	      <help>Executes any SQL statement.</help>
+	      <keywords>database,attribute table,SQL</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>db.execute</command>
 	    </menuitem>
 	  </items>
 	</menu>
-	<separator/>
+	<separator />
 	<menu>
 	  <label>Vector database connections</label>
 	  <items>
 	    <menuitem>
 	      <label>Reconnect vector to database</label>
 	      <help>Reconnects vectors to a new database.</help>
+	      <keywords>vector,database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.db.reconnect.all</command>
 	    </menuitem>
 	    <menuitem>
 	      <label>Set vector map - database connection</label>
 	      <help>Prints/sets DB connection for a vector map to attribute table.</help>
+	      <keywords>vector,database,attribute table</keywords>
 	      <handler>self.OnMenuCmd</handler>
 	      <command>v.db.connect</command>
 	    </menuitem>
@@ -2369,12 +2675,14 @@
 	<menuitem>
 	  <label>GRASS GIS help</label>
 	  <help>Display the HTML man pages of GRASS</help>
+	  <keywords>general,manual,help</keywords>
 	  <handler>self.RunMenuCmd</handler>
 	  <command>g.manual -i</command>
 	</menuitem>
 	<menuitem>
 	  <label>GRASS GIS GUI help</label>
 	  <help>Display the HTML man pages of GRASS</help>
+	  <keywords>general,manual,help</keywords>
 	  <handler>self.RunMenuCmd</handler>
 	  <command>g.manual wxGUI</command>
 	</menuitem>



More information about the grass-commit mailing list