[Sugar-devel] [PATCH InfoSlicer] Change encoding to UTF8 SL #3607
Walter Bender
walter.bender at gmail.com
Tue May 15 15:01:44 EDT 2012
On Tue, May 15, 2012 at 2:50 PM, Manuel Kaufmann <humitos at gmail.com> wrote:
> I had to change the encoding to UTF8 of xol.py because it was DOS and
> the "genpot" command from setup.py (xgettext) was failing with string
> with multiple lines. So, it was detecting just the first line of the
> multiple lines strings and then the translation string weren't
> matching with the source code strings.
Not sure what you did. I would have assumed that simply adding
# -*- coding: utf-8 -*-
to the top of the file would have fixed the problem.
-walter
>
> Signed-off-by: Manuel Kaufmann <humitos at gmail.com>
> ---
> xol.py | 416 ++++++++++++++++++++++++++++++++--------------------------------
> 1 file changed, 208 insertions(+), 208 deletions(-)
>
> diff --git a/xol.py b/xol.py
> index bbe2ce5..d4774ef 100644
> --- a/xol.py
> +++ b/xol.py
> @@ -1,208 +1,208 @@
> -# Copyright (C) IBM Corporation 2008
> -#
> -# This program is free software; you can redistribute it and/or modify
> -# it under the terms of the GNU General Public License as published by
> -# the Free Software Foundation; either version 2 of the License, or
> -# (at your option) any later version.
> -#
> -# This program is distributed in the hope that it will be useful,
> -# but WITHOUT ANY WARRANTY; without even the implied warranty of
> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> -# GNU General Public License for more details.
> -#
> -# You should have received a copy of the GNU General Public License
> -# along with this program; if not, write to the Free Software
> -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> -
> -import os
> -import gtk
> -import zipfile
> -import uuid
> -import logging
> -from glob import glob
> -from gettext import gettext as _
> -
> -from sugar.activity.activity import get_bundle_path, get_activity_root, get_bundle_name
> -from sugar.datastore import datastore
> -from sugar import activity
> -
> -from infoslicer.processing.NewtifulSoup import NewtifulStoneSoup \
> - as BeautifulStoneSoup
> -import book
> -
> -logger = logging.getLogger('infoslicer')
> -
> -def publish(activity, force=False):
> - if not [i for i in book.custom.index if i['ready']]:
> - activity.notify_alert(
> - _('Nothing to publish'),
> - _('Mark arcticles from "Custom" panel and try again.'))
> - return
> -
> - title = activity.metadata['title']
> - jobject = datastore.find({
> - 'activity_id': activity.get_id(),
> - 'activity' : book.custom.uid})[0] or None
> -
> - logger.debug('publish: title=%s jobject=%s force=%s' \
> - % (title, jobject and jobject[0].metadata['activity'], force))
> -
> - if jobject:
> - if force:
> - jobject = jobject[0]
> - else:
> - try:
> - # check for 0.84 code
> - from jarabe import config
> - except:
> - # 0.82 couldn't override .xol bundles
> - activity.notify_alert(
> - _('Bundle exists'),
> - _('A bundle by "%s" name already exists. Please ' \
> - 'click "Erase" in the Journal. You can click ' \
> - '"Publish" again afterwards.') % \
> - jobject[0].metadata['title'])
> - return
> -
> - activity.confirmation_alert(
> - _('Overwrite existed bundle?'),
> - _('A bundle for current object was already created. ' \
> - 'Click "OK" to overwrite it.'),
> - publish, activity, True)
> - jobject[0].destroy()
> - return
> - else:
> - jobject = datastore.create()
> - jobject.metadata['activity_id'] = activity.get_id()
> - jobject.metadata['activity'] = book.custom.uid
> - jobject.metadata['mime_type'] = 'application/vnd.olpc-content'
> - jobject.metadata['description'] = \
> - 'This is a bundle containing articles on %s.\n' \
> - 'To view these articles, open the \'Browse\' Activity.\n' \
> - 'Go to \'Books\', and select \'%s\'.' % (title, title)
> -
> - book.custom.sync_article()
> - book.custom.revision += 1
> -
> - jobject.metadata['title'] = title
> - _publish(title, jobject)
> - jobject.destroy()
> -
> - book.custom.sync_index()
> -
> -"""
> - at author: Matthew Bailey
> -
> -This class deals with the creation of content packages, comprised of articles from
> -themes, with are zipped up and installed in the relevant OS specific location. From
> -here they can be distributed to the consumers
> -"""
> -def _publish(title, jobject):
> - zipfilename = '/tmp/infoslicer.xol'
> - zip = zipfile.ZipFile(zipfilename, 'w')
> -
> - uid = book.custom.uid
> -
> - for i in glob(os.path.join(get_bundle_path(), 'Stylesheets', '*')):
> - zip.write(i, os.path.join(uid, 'slicecontent', os.path.basename(i)))
> -
> - _info_file(zip, uid, title)
> - _index_redirect(zip, uid)
> - _dita_management(zip, uid, title)
> -
> - zip.close()
> -
> - jobject.set_file_path(zipfilename)
> - datastore.write(jobject, transfer_ownership=True)
> -
> -def _dita_management(zip, uid, title):
> - """
> - Creates a DITA map, and copies the requested articles and their associated images into the zipped directories
> - """
> - map = [ '<?xml version=\'1.0\' encoding=\'utf-8\'?>',\
> - '<!DOCTYPE map PUBLIC "-//IBM//DTD DITA IBM Map//EN" ' \
> - '"ibm-map.dtd">',\
> - '<?xml-stylesheet type="text/xsl" href="mapstylesheet.xsl"?>',\
> - '<map title="%s">' % title ]
> -
> - images = {}
> -
> - for entry in book.custom.index:
> - if not entry['ready']:
> - continue
> -
> - atitle = entry['title']
> - auid = entry['uid']
> -
> - content = BeautifulStoneSoup(book.custom._load(auid))
> -
> - for image in content.findAll('image'):
> - image_path = book.wiki.root + '/' + image['href']
> - image_name = os.path.basename(image_path)
> - image_ext = os.path.splitext(image_name)[1]
> -
> - image_num = images.get(image_name, len(images))
> - images[image_name] = image_num
> - image_name = ('%08d%s' % (image_num, image_ext)).encode('CP437')
> -
> - zip.write(image_path, os.path.join(uid, 'slicecontent', image_name))
> - image['href'] = image_name
> -
> - content.insert(1, '<?xml-stylesheet type="text/xsl" ' \
> - 'href="ditastylesheet.xsl"?>')
> - zipstr(zip, os.path.join(uid, 'slicecontent', '%s.dita' % auid),
> - content.prettify())
> -
> - map.append('<topicref href="%s.dita" navtitle="%s">' % (auid, atitle))
> - map.append('</topicref>')
> -
> - map.append('</map>')
> - zipstr(zip, os.path.join(uid, 'slicecontent', 'librarymap.ditamap'),
> - "\n".join(map))
> -
> -def _index_redirect(zip, uid):
> - """
> - Creates the redirecting index.html
> - """
> - redirect_loc = 'slicecontent/librarymap.ditamap'
> -
> - html = ['<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">',\
> - '<html>',\
> - '<head>',\
> - '<title>Redirecting to index</title>',\
> - '<meta http-equiv="REFRESH" content="0;url=%s">' % redirect_loc,\
> - '</head>',\
> - '<body>',\
> - '</body>',\
> - '</html>']
> -
> - zipstr(zip, os.path.join(uid, 'index.html'), "\n".join(html))
> -
> -def _info_file(zip, uid, title):
> - """
> - Creates the library.info file
> - """
> - libraryfile = ['[Library]',\
> - 'name = %s' % title,\
> - 'bundle_class = %s' % uid,\
> - 'global_name = info.slice.%s' % title,\
> - 'long_name = %s' % title,\
> - 'library_version = %d' % book.custom.revision,\
> - 'host_version = 1',\
> - 'l10n = false',\
> - 'locale = en',\
> - 'category = books',\
> - 'subcategory = slice',\
> - 'icon = book.png',\
> - 'activity = Web',\
> - 'activity_start = index.html']
> -
> - zipstr(zip, os.path.join(uid, 'library', 'library.info'),
> - "\n".join(libraryfile))
> -
> -# XXX setup mode_t for files written by writestr()
> -def zipstr(zip, arcname, str):
> - import copy
> - zipinfo = copy.copy(zip.infolist()[0])
> - zipinfo.filename = arcname
> - zip.writestr(zipinfo, str)
> +# Copyright (C) IBM Corporation 2008
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 2 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> +
> +import os
> +import gtk
> +import zipfile
> +import uuid
> +import logging
> +from glob import glob
> +from gettext import gettext as _
> +
> +from sugar.activity.activity import get_bundle_path, get_activity_root, get_bundle_name
> +from sugar.datastore import datastore
> +from sugar import activity
> +
> +from infoslicer.processing.NewtifulSoup import NewtifulStoneSoup \
> + as BeautifulStoneSoup
> +import book
> +
> +logger = logging.getLogger('infoslicer')
> +
> +def publish(activity, force=False):
> + if not [i for i in book.custom.index if i['ready']]:
> + activity.notify_alert(
> + _('Nothing to publish'),
> + _('Mark arcticles from "Custom" panel and try again.'))
> + return
> +
> + title = activity.metadata['title']
> + jobject = datastore.find({
> + 'activity_id': activity.get_id(),
> + 'activity' : book.custom.uid})[0] or None
> +
> + logger.debug('publish: title=%s jobject=%s force=%s' \
> + % (title, jobject and jobject[0].metadata['activity'], force))
> +
> + if jobject:
> + if force:
> + jobject = jobject[0]
> + else:
> + try:
> + # check for 0.84 code
> + from jarabe import config
> + except:
> + # 0.82 couldn't override .xol bundles
> + activity.notify_alert(
> + _('Bundle exists'),
> + _('A bundle by "%s" name already exists. Please ' \
> + 'click "Erase" in the Journal. You can click ' \
> + '"Publish" again afterwards.') % \
> + jobject[0].metadata['title'])
> + return
> +
> + activity.confirmation_alert(
> + _('Overwrite existed bundle?'),
> + _('A bundle for current object was already created. '
> + 'Click "OK" to overwrite it.'),
> + publish, activity, True)
> + jobject[0].destroy()
> + return
> + else:
> + jobject = datastore.create()
> + jobject.metadata['activity_id'] = activity.get_id()
> + jobject.metadata['activity'] = book.custom.uid
> + jobject.metadata['mime_type'] = 'application/vnd.olpc-content'
> + jobject.metadata['description'] = \
> + 'This is a bundle containing articles on %s.\n' \
> + 'To view these articles, open the \'Browse\' Activity.\n' \
> + 'Go to \'Books\', and select \'%s\'.' % (title, title)
> +
> + book.custom.sync_article()
> + book.custom.revision += 1
> +
> + jobject.metadata['title'] = title
> + _publish(title, jobject)
> + jobject.destroy()
> +
> + book.custom.sync_index()
> +
> +"""
> + at author: Matthew Bailey
> +
> +This class deals with the creation of content packages, comprised of articles from
> +themes, with are zipped up and installed in the relevant OS specific location. From
> +here they can be distributed to the consumers
> +"""
> +def _publish(title, jobject):
> + zipfilename = '/tmp/infoslicer.xol'
> + zip = zipfile.ZipFile(zipfilename, 'w')
> +
> + uid = book.custom.uid
> +
> + for i in glob(os.path.join(get_bundle_path(), 'Stylesheets', '*')):
> + zip.write(i, os.path.join(uid, 'slicecontent', os.path.basename(i)))
> +
> + _info_file(zip, uid, title)
> + _index_redirect(zip, uid)
> + _dita_management(zip, uid, title)
> +
> + zip.close()
> +
> + jobject.set_file_path(zipfilename)
> + datastore.write(jobject, transfer_ownership=True)
> +
> +def _dita_management(zip, uid, title):
> + """
> + Creates a DITA map, and copies the requested articles and their associated images into the zipped directories
> + """
> + map = [ '<?xml version=\'1.0\' encoding=\'utf-8\'?>',\
> + '<!DOCTYPE map PUBLIC "-//IBM//DTD DITA IBM Map//EN" ' \
> + '"ibm-map.dtd">',\
> + '<?xml-stylesheet type="text/xsl" href="mapstylesheet.xsl"?>',\
> + '<map title="%s">' % title ]
> +
> + images = {}
> +
> + for entry in book.custom.index:
> + if not entry['ready']:
> + continue
> +
> + atitle = entry['title']
> + auid = entry['uid']
> +
> + content = BeautifulStoneSoup(book.custom._load(auid))
> +
> + for image in content.findAll('image'):
> + image_path = book.wiki.root + '/' + image['href']
> + image_name = os.path.basename(image_path)
> + image_ext = os.path.splitext(image_name)[1]
> +
> + image_num = images.get(image_name, len(images))
> + images[image_name] = image_num
> + image_name = ('%08d%s' % (image_num, image_ext)).encode('CP437')
> +
> + zip.write(image_path, os.path.join(uid, 'slicecontent', image_name))
> + image['href'] = image_name
> +
> + content.insert(1, '<?xml-stylesheet type="text/xsl" ' \
> + 'href="ditastylesheet.xsl"?>')
> + zipstr(zip, os.path.join(uid, 'slicecontent', '%s.dita' % auid),
> + content.prettify())
> +
> + map.append('<topicref href="%s.dita" navtitle="%s">' % (auid, atitle))
> + map.append('</topicref>')
> +
> + map.append('</map>')
> + zipstr(zip, os.path.join(uid, 'slicecontent', 'librarymap.ditamap'),
> + "\n".join(map))
> +
> +def _index_redirect(zip, uid):
> + """
> + Creates the redirecting index.html
> + """
> + redirect_loc = 'slicecontent/librarymap.ditamap'
> +
> + html = ['<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">',\
> + '<html>',\
> + '<head>',\
> + '<title>Redirecting to index</title>',\
> + '<meta http-equiv="REFRESH" content="0;url=%s">' % redirect_loc,\
> + '</head>',\
> + '<body>',\
> + '</body>',\
> + '</html>']
> +
> + zipstr(zip, os.path.join(uid, 'index.html'), "\n".join(html))
> +
> +def _info_file(zip, uid, title):
> + """
> + Creates the library.info file
> + """
> + libraryfile = ['[Library]',\
> + 'name = %s' % title,\
> + 'bundle_class = %s' % uid,\
> + 'global_name = info.slice.%s' % title,\
> + 'long_name = %s' % title,\
> + 'library_version = %d' % book.custom.revision,\
> + 'host_version = 1',\
> + 'l10n = false',\
> + 'locale = en',\
> + 'category = books',\
> + 'subcategory = slice',\
> + 'icon = book.png',\
> + 'activity = Web',\
> + 'activity_start = index.html']
> +
> + zipstr(zip, os.path.join(uid, 'library', 'library.info'),
> + "\n".join(libraryfile))
> +
> +# XXX setup mode_t for files written by writestr()
> +def zipstr(zip, arcname, str):
> + import copy
> + zipinfo = copy.copy(zip.infolist()[0])
> + zipinfo.filename = arcname
> + zip.writestr(zipinfo, str)
> --
> 1.7.10
>
--
Walter Bender
Sugar Labs
http://www.sugarlabs.org
More information about the Sugar-devel
mailing list