#!/usr/bin/env python3 """ Created on Thu Aug 9 14:04:12 2012 @author: lucadelu """ # utilities for generating REST indices # utilities for generating HTML indices # (c) 2003-2022 by the GRASS Development Team, Markus Neteler, Glynn Clements, Luca Delucchi import sys import os import string ## TODO: better fix this in include/Make/Rest.make, see bug RT #5361 # exclude following list of modules from help index: exclude_mods = [ "i.find", "r.watershed.ram", "r.watershed.seg", "v.topo.check", "helptext.html"] # these modules don't use G_parser() desc_override = { "g.parser": "Provides automated parser, GUI, and help support for GRASS scipts.", "r.li.daemon": "Support module for r.li landscape index calculations." } ############################################################################ header2_tmpl = string.Template(\ r""" ================================================================== GRASS GIS ${grass_version} Reference Manual ================================================================== .. figure:: grass_logo.png :align: center :alt: GRASS logo GRASS GIS ${grass_version} Reference Manual -------------------------------------------------------------------- **Geographic Resources Analysis Support System**, commonly referred to as `GRASS GIS `_, is a `Geographic Information System `_ (GIS) used for geospatial data management and analysis, image processing, graphics/maps production, spatial modeling, and visualization. GRASS is currently used in academic and commercial settings around the world, as well as by many governmental agencies and environmental consulting companies. This reference manual details the use of modules distributed with Geographic Resources Analysis Support System (GRASS), an open source (`GNU GPLed `_), image processing and geographic information system (GIS). """) overview_tmpl = string.Template(\ r""" Quick Introduction ~~~~~~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 How to start with GRASS Intro projections and spatial transformations Intro 2D raster map processing Intro 3D raster map (voxel) processing Intro image processing Intro vector map processing and network analysis Intro database management Intro temporal data processing Display/Graphical User Interfaces ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 wxGUI wxPython-based GUI frontend Display commands manual Display drivers nviz 3D visualization and animation tool Raster and 3D raster processing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 Raster commands manual 3D raster (voxel) commands manual Image processing ~~~~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 Imagery commands manual Vector processing ~~~~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 Vector commands manual GRASS ASCII vector format specification Database ~~~~~~~~~ .. toctree:: :maxdepth: 1 SQL support in GRASS GIS Database commands manual General ~~~~~~~~~ .. toctree:: :maxdepth: 1 GRASS startup manual page General commands manual Miscellaneous & Variables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 Miscellaneous commands manual GRASS variables and environment variables Temporal processing ~~~~~~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 Temporal commands manual Printing ~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 PostScript commands manual """) #TODO add copyright symbol footer_tmpl = string.Template(\ r""" -------------- :doc:`Manual main page ` \| :doc:`Full Index ` 2003-2022 `GRASS Development Team `_, GRASS GIS ${grass_version} Reference Manual """) cmd1_tmpl = string.Template(\ r"""*`$cmd.\* <${cmd}>` *""") cmd2_tmpl = string.Template(\ r""" ${cmd}.* commands: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 1 """) desc1_tmpl = string.Template(\ r""" ${basename} - ${desc} <${basename}> """) sections = \ r""" +-----------------------------+-------------------------------+ |`d.* `_ | `display commands` | +-----------------------------+-------------------------------+ |`db.* `_ | `database commands` | +-----------------------------+-------------------------------+ |`g.* `_ | `general commands` | +-----------------------------+-------------------------------+ |`i.* `_ | `imagery commands` | +-----------------------------+-------------------------------+ |`m.* `_ | `miscellaneous commands` | +-----------------------------+-------------------------------+ |`ps.* `_ | `postscript commands` | +-----------------------------+-------------------------------+ |`r.* `_ | `raster commands` | +-----------------------------+-------------------------------+ |`r3.* `_ | `raster3D commands` | +-----------------------------+-------------------------------+ |`t.* `_ | `temporal commands` | +-----------------------------+-------------------------------+ |`v.* `_ | `vector commands` | +-----------------------------+-------------------------------+ |`nviz `_ | `visualization suite` | +-----------------------------+-------------------------------+ |`wxGUI `_ | `wxPython-based GUI frontend` | +-----------------------------+-------------------------------+ """ modclass_intro_tmpl = string.Template(\ r"""Go to :doc:`${modclass} introduction <${modclass_lower}intro>` """) #" modclass_tmpl = string.Template(\ r"""Go :doc:`back to help overview` **${modclass} commands:** .. toctree:: :maxdepth: 1 """) #" desc2_tmpl = string.Template(\ r""" ${basename} - ${desc} <${basename}> """) #" full_index_header = \ r"""Go :doc:`back to help overview` Full command index: ~~~~~~~~~~~~~~~~~~~~ """ #" message_tmpl = string.Template(\ r"""Generated HTML docs in ${rest_dir}/index.txt ---------------------------------------------------------------------- Following modules are missing the 'modulename.txt' file in src code: """) def check_for_desc_override(basename): return desc_override.get(basename) def read_file(name): f = open(name, 'r') s = f.read() f.close() return s def write_file(name, contents): f = open(name, 'w') f.write(contents) f.close() def try_mkdir(path): try: os.mkdir(path) except OSError as e: pass def replace_file(name): temp = name + ".tmp" if os.path.exists(name) and os.path.exists(temp) and read_file(name) == read_file(temp): os.remove(temp) else: try: os.remove(name) except OSError as e: pass os.rename(temp, name) def copy_file(src, dst): write_file(dst, read_file(src)) def rest_files(cls = None): for cmd in sorted(os.listdir(rest_dir)): if cmd.endswith(".txt") and \ (cls in [None, '*'] or cmd.startswith(cls + ".")) and \ (cls != '*' or len(cmd.split('.')) >= 3) and \ cmd not in ["full_index.txt", "index.txt"] and \ cmd not in exclude_mods and \ not cmd.startswith("wxGUI."): yield cmd def write_rest_header(f, title, ismain = False): f.write(header2_tmpl.substitute(grass_version = grass_version)) def write_rest_cmd_overview(f): box_color = "#e1ecd0" f.write(overview_tmpl.substitute(box_color = box_color)) def write_rest_footer(f, index_url): f.write(footer_tmpl.substitute(grass_version = grass_version, index_url = index_url)) def get_desc(cmd): f = open(cmd, 'r') while True: line = f.readline() if not line: return "" if "NAME" in line: break while True: line = f.readline() if not line: return "" if "SYNOPSIS" in line: break if "*" in line: sp = line.split('-',1) if len(sp) > 1: return sp[1].strip() else: return None return "" ############################################################################ arch_dist_dir = os.environ['ARCH_DISTDIR'] rest_dir = os.path.join(arch_dist_dir, "docs", "rest") gisbase = os.environ['GISBASE'] ver = read_file(os.path.join(gisbase, "etc", "VERSIONNUMBER")) try: grass_version = ver.split()[0].strip() except IndexError: grass_version = ver.split().strip() ############################################################################