Martin, I’m not sure if this [59812] is appropriate because it is not stabilized yet [59816] and overall, it is a new feature although it is just in documentation.
https://trac.osgeo.org/grass/changeset/59812
https://trac.osgeo.org/grass/changeset/59816
···
On Sat, Apr 19, 2014 at 2:38 PM, <svn_grass@osgeo.org> wrote:
Author: martinl
Date: 2014-04-19 11:38:08 -0700 (Sat, 19 Apr 2014)
New Revision: 59812Modified:
grass/branches/releasebranch_7_0/man/build_html.py
grass/branches/releasebranch_7_0/man/grassdocs.css
grass/branches/releasebranch_7_0/tools/mkhtml.py
Log:
Backport TOC manual generation from trunkModified: grass/branches/releasebranch_7_0/man/build_html.py
— grass/branches/releasebranch_7_0/man/build_html.py 2014-04-19 18:33:48 UTC (rev 59811)
- +
+++ grass/branches/releasebranch_7_0/man/build_html.py 2014-04-19 18:38:08 UTC (rev 59812)
@@ -48,7 +48,7 @@
header2_tmpl = string.Template(
r"“”@@ -249,7 +249,7 @@
- +
r"“”
Topics
@@ -261,7 +261,7 @@ r""" - +
Keywords - Index of GRASS GIS modules
Modified: grass/branches/releasebranch_7_0/man/grassdocs.css
— grass/branches/releasebranch_7_0/man/grassdocs.css 2014-04-19 18:33:48 UTC (rev 59811)
+++ grass/branches/releasebranch_7_0/man/grassdocs.css 2014-04-19 18:38:08 UTC (rev 59812)
@@ -14,6 +14,7 @@
background: white;
color: black;
font-family: arial,sans-serif;
- width: 80%;
}h1{
@@ -49,7 +50,7 @@
}div.code{
- width: 95%;
- width: 100%;
color : black;
background-color: rgb(90%, 90%, 90%);
padding-left: 1em;
@@ -86,3 +87,32 @@
td {
padding: 5px;
}+div.toc{
- background-color: transparent;
- position: fixed;
- border: solid 1px rgb(25%, 60%, 25%);
- top: 5px;
- right: 5px;
- width: 17%;
- line-height: 120%;
- font-weight: bold;
- font-size: small;
- font-family: arial,sans-serif;
+}+li.toc {
- margin-left: -15px;
- padding: 3px 3px; 3px; 3px;
- color: rgb(25%, 60%, 25%);
+}+ul.toc {
- margin-top: 3px;
- margin-bottom: 3px;
+}+a.toc {
- color: rgb(25%, 60%, 25%);
- text-decoration: none;
+}Modified: grass/branches/releasebranch_7_0/tools/mkhtml.py
— grass/branches/releasebranch_7_0/tools/mkhtml.py 2014-04-19 18:33:48 UTC (rev 59811)
+++ grass/branches/releasebranch_7_0/tools/mkhtml.py 2014-04-19 18:38:08 UTC (rev 59812)
@@ -2,12 +2,12 @@############################################################################
-# MODULE: mkhtml.py
+# MODULE: Builds manual pagesAUTHOR(S): Markus Neteler
Glynn Clements
Martin Landa <landa.martin gmail.com>
PURPOSE: Create HTML manual page snippets
-# COPYRIGHT: (C) 2007, 2009, 2011-2012 by Glynn Clements
+# COPYRIGHT: (C) 2007-2014 by Glynn Clementsand the GRASS Development Team
This program is free software under the GNU General
@@ -21,6 +21,7 @@
import string
import re
from datetime import datetime
+from HTMLParser import HTMLParserpgm = sys.argv[1]
@@ -61,6 +62,7 @@
""")
def read_file(name):
try:
f = open(name, ‘rb’)
@@ -70,11 +72,101 @@
except IOError:
return “”
+def create_toc(src_data):
- class MyHTMLParser(HTMLParser):
- def init(self):
- self.reset()
- self.idx = 1
- self.tag_curr = ‘’
- self.tag_last = ‘’
- self.process_text = False
- self.data =
- self.tags_allowed = (‘h1’, ‘h2’, ‘h3’)
- self.tags_ignored = (‘img’)
- self.text = ‘’
- def handle_starttag(self, tag, attrs):
- if tag in self.tags_allowed:
- self.process_text = True
- self.tag_last = self.tag_curr
- self.tag_curr = tag
- def handle_endtag(self, tag):
- if tag in self.tags_allowed:
- self.data.append((tag, ‘%s_%d’ % (tag, self.idx),
- self.text))
- self.idx += 1
- self.process_text = False
- self.text = ‘’
- self.tag_curr = self.tag_last
- def handle_data(self, data):
- if not self.process_text:
- return
- if self.tag_curr in self.tags_allowed or self.tag_curr in self.tags_ignored:
- self.text += data
- else:
- self.text += ‘<%s>%s</%s>’ % (self.tag_curr, data, self.tag_curr)
instantiate the parser and fed it some HTML
- parser = MyHTMLParser()
- parser.feed(src_data)
- return parser.data
+def write_toc(data):
- if not data:
- return
- fd = sys.stdout
- fd.write(‘
\n’)- fd.write(‘
\n’)
\n’)- first = True
- in_h3 = False
- indent = 4
- for tag, href, text in data:
- if tag == ‘h3’ and not in_h3:
- fd.write(‘\n%s
\n’ % (’ ’ * indent))\n’ % (’ ’ * indent))
- indent += 4
- in_h3 = True
- elif not first:
- fd.write(‘
\n’)- if tag == ‘h2’ and in_h3:
- indent -= 4
- fd.write(‘%s
- in_h3 = False
- fd.write(‘%s
- %s’ % \
- (’ ’ * indent, href, text))
- first = False
- fd.write(‘
\n- fd.write(‘\n’)
+def update_toc(data):
- ret_data =
- pat = re.compile(r’(<(h\d)>)(.+)(</h\d>)')
- idx = 1
- for line in data.splitlines():
- if pat.search(line):
- xline = pat.split(line)
- line = xline[1] + ‘’ % (xline[2], idx) + xline[3] + ‘’ + xline[4]
- idx += 1
- ret_data.append(line)
- return ‘\n’.join(ret_data)
+# process header
src_data = read_file(src_file)
name = re.search(‘()’, src_data, re.IGNORECASE)
if name:
pgm = name.group(2).strip().split(‘-’, 1)[0].strip()
-desc = re.search(‘()’, src_data, re.IGNORECASE)
+desc = re.search(‘()’, src_data,
- re.IGNORECASE)
if desc:
pgm = desc.group(2).strip()
header_tmpl = string.Template(header_base + header_nopgm)
@@ -84,14 +176,18 @@
if not re.search(‘’, src_data, re.IGNORECASE):
tmp_data = read_file(tmp_file)
if not re.search(‘’, tmp_data, re.IGNORECASE):
- sys.stdout.write(header_tmpl.substitute(PGM = pgm))
- sys.stdout.write(header_tmpl.substitute(PGM=pgm))
if tmp_data:
for line in tmp_data.splitlines(True):
if not re.search(‘|’, line, re.IGNORECASE):
sys.stdout.write(line)-sys.stdout.write(src_data)
+# create TOC
+write_toc(create_toc(src_data))+# process body
+sys.stdout.write(update_toc(src_data))
+if is found, suppose a complete html is provided.
otherwise, generate module class reference:
if re.search(‘’, src_data, re.IGNORECASE):
@@ -112,6 +208,7 @@
‘v’ : ‘vector’
}+# process footer
index = re.search(‘()’, src_data, re.IGNORECASE)
if index:
index_name_cap = index_name = index.group(2).strip()
@@ -120,13 +217,16 @@
index_name = index_names.get(mod_class, ‘’)
index_name_cap = index_name.title()-grass_version = os.getenv(“VERSION_NUMBER”, “unknown”)
+grass_version = os.getenv(“VERSION_NUMBER”, “unknown”)
year = os.getenv(“VERSION_DATE”)
if not year:
year = str(datetime.now().year)if index_name:
- sys.stdout.write(footer_index.substitute(INDEXNAME = index_name, INDEXNAMECAP = index_name_cap,
- YEAR = year, GRASS_VERSION = grass_version))
- sys.stdout.write(footer_index.substitute(INDEXNAME=index_name,
- INDEXNAMECAP=index_name_cap,
- YEAR=year,
- GRASS_VERSION=grass_version))
else:
- sys.stdout.write(footer_noindex.substitute(YEAR = year, GRASS_VERSION = grass_version))
- sys.stdout.write(footer_noindex.substitute(YEAR=year,
- GRASS_VERSION=grass_version))
grass-commit mailing list
grass-commit@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-commit