[GRASS-dev] [GRASS-SVN] r59812 - in grass/branches/releasebranch_7_0: man tools
Vaclav Petras
wenzeslaus at gmail.com
Sat Apr 19 13:55:05 PDT 2014
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 at osgeo.org> wrote:
> Author: martinl
> Date: 2014-04-19 11:38:08 -0700 (Sat, 19 Apr 2014)
> New Revision: 59812
>
> Modified:
> 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 trunk
>
>
> Modified: 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""" <link rel="stylesheet" href="grassdocs.css" type="text/css">
> </head>
> -<body bgcolor="#FFFFFF">
> +<body style="width: 99%">
>
> <!-- this file is generated by man/build_html.py -->
>
> @@ -249,7 +249,7 @@
> r"""
> <link rel="stylesheet" href="grassdocs.css" type="text/css">
> </head>
> -<body bgcolor="white">
> +<body style="width: 99%">
>
> <img src="grass_logo.png" alt="GRASS logo"><hr align=center size=6
> noshade>
> <h2>Topics</h2>
> @@ -261,7 +261,7 @@
> r"""
> <link rel="stylesheet" href="grassdocs.css" type="text/css">
> </head>
> -<body bgcolor="white">
> +<body style="width: 99%">
>
> <img src="grass_logo.png" alt="GRASS logo"><hr align=center size=6
> noshade>
> <h2>Keywords - Index of GRASS GIS modules</h2>
>
> 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 pages
> # AUTHOR(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 Clements
> # and 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 HTMLParser
>
> pgm = sys.argv[1]
>
> @@ -61,6 +62,7 @@
> </html>
> """)
>
> +
> 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('<div class="toc">\n')
> + fd.write('<ul class="toc">\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<ul class="toc">\n' % (' ' * indent))
> + indent += 4
> + in_h3 = True
> + elif not first:
> + fd.write('</li>\n')
> +
> + if tag == 'h2' and in_h3:
> + indent -= 4
> + fd.write('%s</ul></li>\n' % (' ' * indent))
> + in_h3 = False
> +
> + fd.write('%s<li class="toc"><a href="#%s" class="toc">%s</a>' % \
> + (' ' * indent, href, text))
> + first = False
> +
> + fd.write('</li>\n</ul>\n')
> + fd.write('</div>\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] + '<a name="%s_%d">' % (xline[2], idx) +
> xline[3] + '</a>' + xline[4]
> + idx += 1
> + ret_data.append(line)
> +
> + return '\n'.join(ret_data)
> +
> +# process header
> src_data = read_file(src_file)
> name = re.search('(<!-- meta page name:)(.*)(-->)', src_data,
> re.IGNORECASE)
> if name:
> pgm = name.group(2).strip().split('-', 1)[0].strip()
> -desc = re.search('(<!-- meta page description:)(.*)(-->)', src_data,
> re.IGNORECASE)
> +desc = re.search('(<!-- meta page description:)(.*)(-->)', 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('<html>', src_data, re.IGNORECASE):
> tmp_data = read_file(tmp_file)
> if not re.search('<html>', 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('</body>|</html>', 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 </html> is found, suppose a complete html is provided.
> # otherwise, generate module class reference:
> if re.search('</html>', src_data, re.IGNORECASE):
> @@ -112,6 +208,7 @@
> 'v' : 'vector'
> }
>
> +# process footer
> index = re.search('(<!-- meta page index:)(.*)(-->)', 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 at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/grass-commit
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20140419/8f5d7da7/attachment-0001.html>
More information about the grass-dev
mailing list