#!/usr/bin/env python3 # generates keywords.html # (c) 2013 by the GRASS Development Team, Luca Delucchi import os import sys import glob from build_html import * blacklist = [ "Display", "Database", "General", "Imagery", "Misc", "Postscript", "Raster", "Raster3D", "Temporal", "Vector", ] path = sys.argv[1] year = os.getenv("VERSION_DATE") keywords = {} htmlfiles = glob.glob1(path, "*.html") char_list = {} for fname in htmlfiles: fil = open(os.path.join(path, fname)) # TODO maybe move to Python re (regex) lines = fil.readlines() # remove empty lines lines = [x for x in lines if x != "\n"] try: index_keys = lines.index("

KEYWORDS

\n") + 1 index_desc = lines.index("

NAME

\n") + 1 except: continue try: keys = lines[index_keys].split(",") except: continue for key in keys: key = key.strip() try: key = key.split(">")[1].split("<")[0] except: pass if not key: exit("Empty keyword from file %s line: %s" % (fname, lines[index_keys])) if key not in keywords.keys(): keywords[key] = [] keywords[key].append(fname) elif fname not in keywords[key]: keywords[key].append(fname) for black in blacklist: try: del keywords[black] except: try: del keywords[black.lower()] except: continue for key in sorted(keywords.keys()): # this list it is useful to create the TOC using only the first # character for keyword firstchar = key[0].lower() if firstchar not in char_list.keys(): char_list[str(firstchar)] = key elif firstchar in char_list.keys(): if key.lower() < char_list[str(firstchar)].lower(): char_list[str(firstchar.lower())] = key keywordsfile = open(os.path.join(path, "keywords.html"), "w") keywordsfile.write( header1_tmpl.substitute( title="GRASS GIS %s Reference " "Manual: Keywords index" % grass_version ) ) keywordsfile.write(headerkeywords_tmpl) keywordsfile.write("
") sortedKeys = sorted(keywords.keys(), key=lambda s: s.lower()) for key in sortedKeys: keyword_line = '
%s
' "
" % ( key, key, ) for value in sorted(keywords[key]): keyword_line += ' %s,' % (value, value.replace(".html", "")) keyword_line = keyword_line.rstrip(",") keyword_line += "
\n" keywordsfile.write(keyword_line) keywordsfile.write("
\n") # create toc toc = '
\n

Table of contents

' test_length = 0 all_keys = len(char_list.keys()) for k in sorted(char_list.keys()): test_length += 1 # toc += '

  • %s
  • ' % (char_list[k], k) if test_length % 4 == 0 and not test_length == all_keys: toc += '\n%s, ' % (char_list[k], k) elif test_length % 4 == 0 and test_length == all_keys: toc += '\n%s' % (char_list[k], k) elif test_length == all_keys: toc += '%s' % (char_list[k], k) else: toc += '%s, ' % (char_list[k], k) toc += "

    \n" keywordsfile.write(toc) write_html_footer(keywordsfile, "index.html", year) keywordsfile.close()