[Sugar-devel] [PATCH InfoSlicer v2] Export content as HTML SL #3608

Walter Bender walter.bender at gmail.com
Wed May 23 12:47:31 EDT 2012


On Wed, May 23, 2012 at 12:12 PM, Manuel Kaufmann <humitos at gmail.com> wrote:
> Added HTML files to the bundle so this content can be opened with Browse
> Activity. The old dita/ditamap files are not removed because they are parsed to
> generate the new HTML files.
>
> Besides, the HTML generation uses these dita files to not be too aggressive
> with the code in this cycle. We will improve this code in the future and we
> will remove completely the dita generation.
>
> Signed-off-by: Manuel Kaufmann <humitos at gmail.com>

Reviewed by Walter Bender <walter at sugarlabs.org>

> ---
>  article.html |    9 +++++++++
>  parse.py     |   61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  xol.py       |    7 ++++++-
>  3 files changed, 76 insertions(+), 1 deletion(-)
>  create mode 100644 article.html
>  create mode 100644 parse.py
>
> diff --git a/article.html b/article.html
> new file mode 100644
> index 0000000..f57266a
> --- /dev/null
> +++ b/article.html
> @@ -0,0 +1,9 @@
> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
> +<html xmlns="http://www.w3.org/1999/xhtml">
> +  <head>
> +    <title>%(title)s</title>
> +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
> +    <link rel="stylesheet" href="ditastyle.css" type="text/css" />
> +  </head>
> +  <body>%(body)s</body>
> +</html>
> diff --git a/parse.py b/parse.py
> new file mode 100644
> index 0000000..96383ac
> --- /dev/null
> +++ b/parse.py
> @@ -0,0 +1,61 @@
> +#!/usr/bin/python
> +# -*- coding: utf-8 -*-
> +from gettext import gettext as _
> +from BeautifulSoup import BeautifulSoup
> +
> +
> +def parse_dita(dita_str):
> +    soup = BeautifulSoup(dita_str)
> +
> +    html = open('article.html', 'r').read().decode('utf-8')
> +
> +    html_tags = []
> +
> +    title = soup.find('title').string.strip()
> +    h1_title = '<h1>%(title)s</h1>' % \
> +        {'title': title}
> +    index_link = '<p><a href="librarymap.html">' + \
> +        _('Return to index') + '</a></p>'
> +
> +    html_tags.append(index_link)
> +    html_tags.append(h1_title)
> +
> +    for section in soup.findAll('section'):
> +        for p in section.findAll('p'):
> +            images = p.findAll('image')
> +            for img in images:
> +                html_tags.append('<img src="%(src)s" />' % \
> +                                      {'src': img.get('href')})
> +            html_tags.append('<p>')
> +            for ph in p.findAll('ph'):
> +                html_tags.append(ph.string.strip())
> +            html_tags.append('</p>')
> +
> +    html = html % {'title': title,
> +                   'body': '\n'.join(html_tags)}
> +    return html
> +
> +
> +def parse_ditamap(ditamap_str):
> +    soup = BeautifulSoup(ditamap_str)
> +    html = open('article.html', 'r').read().decode('utf-8')
> +
> +    html_tags = []
> +
> +    title = soup.find('map').get('title')
> +
> +    h1_title = '<h1>%(title)s</h1>' % \
> +        {'title': title}
> +    html_tags.append(h1_title)
> +
> +    html_tags.append('<li>')
> +    for topic in soup.findAll('topicref'):
> +        dita_path = topic.get('href')
> +        html_tags.append('<ul><a href="%(href)s">%(name)s</a></ul>' % \
> +                             {'href': dita_path.replace('.dita', '.html'),
> +                              'name': topic.get('navtitle')})
> +    html_tags.append('</li>')
> +
> +    html = html % {'title': title,
> +                   'body': '\n'.join(html_tags)}
> +    return html
> diff --git a/xol.py b/xol.py
> index b5aa1df..6b2a34f 100644
> --- a/xol.py
> +++ b/xol.py
> @@ -19,6 +19,7 @@ import gtk
>  import zipfile
>  import uuid
>  import logging
> +import parse
>  from glob import glob
>  from gettext import gettext as _
>
> @@ -152,6 +153,8 @@ def _dita_management(zip, uid, title):
>                 'href="ditastylesheet.xsl"?>')
>         zipstr(zip, os.path.join(uid, 'slicecontent', '%s.dita' % auid),
>                 content.prettify())
> +        zipstr(zip, os.path.join(uid, 'slicecontent', '%s.html' % auid),
> +                parse.parse_dita(content.prettify()))
>
>         map.append('<topicref href="%s.dita" navtitle="%s">' % (auid, atitle))
>         map.append('</topicref>')
> @@ -159,12 +162,14 @@ def _dita_management(zip, uid, title):
>     map.append('</map>')
>     zipstr(zip, os.path.join(uid, 'slicecontent', 'librarymap.ditamap'),
>             "\n".join(map))
> +    zipstr(zip, os.path.join(uid, 'slicecontent', 'librarymap.html'),
> +            parse.parse_ditamap("\n".join(map)))
>
>  def _index_redirect(zip, uid):
>     """
>         Creates the redirecting index.html
>     """
> -    redirect_loc = 'slicecontent/librarymap.ditamap'
> +    redirect_loc = 'slicecontent/librarymap.html'
>
>     html = ['<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">',\
>             '<html>',\
> --
> 1.7.10
>



-- 
Walter Bender
Sugar Labs
http://www.sugarlabs.org


More information about the Sugar-devel mailing list