Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Kaufmann <humitos@gmail.com>2012-05-16 15:31:38 (GMT)
committer Manuel Kaufmann <humitos@gmail.com>2012-05-16 15:31:38 (GMT)
commit496dc1a37ffabc3000b63767c72ae81507106921 (patch)
treedcb0036fe718bd0786cbbb4856de50c593dec960
parent3e0b6d7e5dbd4903272f12e2089742fb7c58015f (diff)
Change end-of-line from DOS to UNIX SL #3607
I had to change the end-of-line[1] to UNIX 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. [1] https://en.wikipedia.org/wiki/Newline Signed-off-by: Manuel Kaufmann <humitos@gmail.com>
-rw-r--r--xol.py416
1 files changed, 208 insertions, 208 deletions
diff --git a/xol.py b/xol.py
index bbe2ce5..b5aa1df 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()
-
-"""
-@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()
+
+"""
+@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)