From 0312261cc5e114a71cc3f7bd8ee63f8373a654af Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 7 Jan 2012 11:35:35 +0530 Subject: [PATCH] Drop dependency on node.js for compiling coffeescript --- .bzrignore | 1 + .../oeb/display/test-cfi/{test.py => run.py} | 0 src/calibre/utils/coffeescript.py | 88 +++++++++++++++++-- src/calibre/utils/localization.py | 2 +- 4 files changed, 84 insertions(+), 7 deletions(-) rename src/calibre/ebooks/oeb/display/test-cfi/{test.py => run.py} (100%) diff --git a/.bzrignore b/.bzrignore index 88fc9188fc..dc22eddf3c 100644 --- a/.bzrignore +++ b/.bzrignore @@ -15,6 +15,7 @@ resources/scripts.pickle resources/ebook-convert-complete.pickle resources/builtin_recipes.xml resources/builtin_recipes.zip +resources/coffee-script.js.bz2 resources/template-functions.json resources/display/*.js setup/installer/windows/calibre/build.log diff --git a/src/calibre/ebooks/oeb/display/test-cfi/test.py b/src/calibre/ebooks/oeb/display/test-cfi/run.py similarity index 100% rename from src/calibre/ebooks/oeb/display/test-cfi/test.py rename to src/calibre/ebooks/oeb/display/test-cfi/run.py diff --git a/src/calibre/utils/coffeescript.py b/src/calibre/utils/coffeescript.py index a2fc005bb4..3087452096 100644 --- a/src/calibre/utils/coffeescript.py +++ b/src/calibre/utils/coffeescript.py @@ -10,15 +10,68 @@ __docformat__ = 'restructuredtext en' ''' Utilities to help with developing coffeescript based apps ''' -import time, SimpleHTTPServer, SocketServer, os, subprocess +import time, SimpleHTTPServer, SocketServer, os, bz2, sys from io import BytesIO +from PyQt4.QtWebKit import QWebPage + +try: + from calibre.gui2 import must_use_qt + must_use_qt +except ImportError: + import init_calibre + init_calibre + from calibre.gui2 import must_use_qt +from calibre import force_unicode +from calibre.gui2 import FunctionDispatcher + +must_use_qt() + +class Compiler(QWebPage): # {{{ + + def __init__(self): + QWebPage.__init__(self) + self.frame = self.mainFrame() + self.filename = self._src = '' + compiler = bz2.decompress(P('coffee-script.js.bz2', data=True)) + self.frame.evaluateJavaScript(compiler) + self.frame.addToJavaScriptWindowObject("cs_compiler", self) + self.dispatcher = FunctionDispatcher(self.__evalcs, parent=self) + self.errors = [] + + def shouldInterruptJavaScript(self): + return True + + def javaScriptConsoleMessage(self, msg, lineno, sourceid): + sourceid = sourceid or self.filename or '