[GRASS-dev] [GRASS-SVN] r59812 - in grass/branches/releasebranch_7_0: man tools

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: 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"“”

- +

@@ -249,7 +249,7 @@
r"“”

- +

GRASS logo


Topics

@@ -261,7 +261,7 @@ r""" - +

GRASS logo


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 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 @@

""")

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’)
    • 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))
      • indent += 4
      • in_h3 = True
      • elif not first:
      • fd.write(‘
      • \n’)
      • if tag == ‘h2’ and in_h3:
      • indent -= 4
      • fd.write(‘%s
    • \n’ % (’ ’ * indent))
    • in_h3 = False
    • fd.write(‘%s
    • %s’ % \
    • (’ ’ * indent, href, text))
    • first = False
    • fd.write(‘
    • \n
    \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

Hi,

2014-04-19 22:55 GMT+02:00 Vaclav Petras <wenzeslaus@gmail.com>:

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

well, the goal was to introduce TOC to beta2. But you are right, it
should be tested in the better way, there is none strong request for
beta2: in beta1 addons are broken. Martin

2014-04-19 23:00 GMT+02:00 Martin Landa <landa.martin@gmail.com>:

well, the goal was to introduce TOC to beta2. But you are right, it

better to say a wish... Martin

--
Martin Landa * http://geo.fsv.cvut.cz/gwiki/Landa

Hi Vaclav,

On Sat, Apr 19, 2014 at 10:55 PM, Vaclav Petras <wenzeslaus@gmail.com> wrote:

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

Martin was so kind to backport in upon my wish-request. So blame me :slight_smile:

We tested it on different browsers and different Linuxes, online and offline.
Also, it is important to get beta2 out, and it should come with a better manual.

No problem to them come up with a different approach as suggested by
you and redo it again. But we don't know if JS will work while we have
tested things with <div> so far. Small steps...

So, don't worry that anyone wants to stop anyone else from revisiting
the TOC mechanism completely :slight_smile: But we need something now (and we have
it). Newer approaches may evolve of course.

Best
Markus

On Sat, Apr 19, 2014 at 5:10 PM, Markus Neteler <neteler@osgeo.org> wrote:

Hi Vaclav,

On Sat, Apr 19, 2014 at 10:55 PM, Vaclav Petras <wenzeslaus@gmail.com>
wrote:
> 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

Martin was so kind to backport in upon my wish-request. So blame me :slight_smile:

We tested it on different browsers and different Linuxes, online and
offline.
Also, it is important to get beta2 out, and it should come with a better
manual.

No problem to them come up with a different approach as suggested by
you and redo it again. But we don't know if JS will work while we have
tested things with <div> so far. Small steps...

So, don't worry that anyone wants to stop anyone else from revisiting
the TOC mechanism completely :slight_smile: But we need something now (and we have
it). Newer approaches may evolve of course.

All right then. I was not asking because of my JS proposal, but mainly

because it is an exception to no-new-features policy.

Anyway, I'm glad you work on manual now.

Vaclav

Best

Markus

On Sat, Apr 19, 2014 at 11:26 PM, Vaclav Petras <wenzeslaus@gmail.com> wrote:
...

All right then. I was not asking because of my JS proposal, but mainly
because it is an exception to no-new-features policy.

I am not aware that we are in feature freeze mode.
We have a beta1 which some people even did not want to see and call it
"tech preview" (whatever that is). Due to the release history the word
"beta" was chosen as it existed since 4.2.1betaX (that was back in
1998 or so).
Some others even don't want the "releasebranch_7_0" at all...

Rather than freezing development altogether, especially keeping the
goodies away from the "normal" user I prefer to keep the ball rolling
and go on. We should really not discuss every minor backport, at least
I have no time for that.

Anyway, I'm glad you work on manual now.

Yes, the scope is to de-ugly-fy it a bit. Much more could be done,
especially adding examples (hey power-users, please donate some, even
here in the list!).

Markus

Hi Vaclav,

2014-04-19 23:26 GMT+02:00 Vaclav Petras <wenzeslaus@gmail.com>:

No problem to them come up with a different approach as suggested by
you and redo it again. But we don't know if JS will work while we have
tested things with <div> so far. Small steps...

So, don't worry that anyone wants to stop anyone else from revisiting
the TOC mechanism completely :slight_smile: But we need something now (and we have
it). Newer approaches may evolve of course.

I finished simple version of TOC and will be happy if you will work on
more fancy TOC in trunk...

All right then. I was not asking because of my JS proposal, but mainly
because it is an exception to no-new-features policy.

Well, we are probably too far from final release to ask for "feature
freeze". I would say that we shouldn't do any major changes in
relbr70, only bug fixes, simple changes and documentation
improvements. Strict "feature freeze" will start I guess with RC1. It
will be much more clear when have fixed release cycle of course.

Martin

--
Martin Landa * http://geo.fsv.cvut.cz/gwiki/Landa