diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/plugins/scripting/scripts/exportxhtml | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/plugins/scripting/scripts/exportxhtml')
3 files changed, 208 insertions, 0 deletions
diff --git a/kexi/plugins/scripting/scripts/exportxhtml/ExportXHTML.py b/kexi/plugins/scripting/scripts/exportxhtml/ExportXHTML.py new file mode 100644 index 00000000..cace0340 --- /dev/null +++ b/kexi/plugins/scripting/scripts/exportxhtml/ExportXHTML.py @@ -0,0 +1,196 @@ +""" +Export table or query data. + +Description: +This script exports a KexiDB table or query to different fileformats. + +Author: +Sebastian Sauer <mail@dipe.org> + +Copyright: +Dual-licensed under LGPL v2+higher and the BSD license. +""" + +class Datasource: + def __init__(self): + import kexiapp + keximainwindow = kexiapp.get("KexiAppMainWindow") + + try: + self.connection = keximainwindow.getConnection() + except: + raise "No connection established. Please open a project before." + + self.schema = None + + def getSources(self): + sources = [] + for table in self.connection.tableNames(): + sources.append("Tables/%s" % table) + for query in self.connection.queryNames(): + sources.append("Queries/%s" % query) + sources.sort() + return sources + + def setSource(self, source): + s = source.split("/",1) + if s[0] == "Tables": + self.schema = self.connection.tableSchema( s[1] ) + self.queryschema = self.schema.query() + elif s[0] == "Queries": + self.schema = self.connection.querySchema( s[1] ) + self.queryschema = self.schema + self.cursor = None + return self.schema != None + + def name(self): + return self.schema.name() + + def caption(self): + return self.schema.caption() + + def description(self): + return self.schema.description() + + def header(self): + h = [] + for field in self.schema.fieldlist().fields(): + s = field.caption() + if s == None or s == "": + s = field.name() + h.append(s) + return h + + def getNext(self): + if not self.cursor: + self.cursor = self.connection.executeQuerySchema( self.queryschema ) + if not self.cursor: + raise "Failed to execute queryschema." + if not self.cursor.moveFirst(): + raise "Failed to move cursor to first record." + if self.cursor.eof(): + self.cursor = None + return None + items = [] + for i in range( self.cursor.fieldCount() ): + items.append( self.cursor.value(i) ) + self.cursor.moveNext() + return items + +class HtmlExporter: + def __init__(self, datasource): + self.datasource = datasource + + def htmlescape(self, text): + import string + return string.replace(string.replace(string.replace(str(text),'&','&'),'<','<'),'>','>') + + def write(self, output, style): + name = self.datasource.name() + + output.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n") + output.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n") + output.write("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n") + output.write("<head><title>%s</title>\n" % name) + output.write("<style type=\"text/css\">\n<!--\n") + if style == "Paper": + output.write("html { background-color:#efefef; }") + output.write("body { background-color:#fafafa; color:#303030; margin:1em; padding:1em; border:#606060 1px solid; }") + elif style == "Blues": + output.write("html { background-color:#0000aa; }") + output.write("body { background-color:#000066; color:#efefff; margin:1em; padding:1em; border:#00f 1px solid; }") + output.write("h1 { color:#0000ff; }") + output.write("th { color:#0000aa; }") + else: + output.write("html { background-color:#ffffff; color:#000; }") + output.write("body { margin:1em; }") + output.write("\n//-->\n</style>\n") + output.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n") + output.write("</head><body><h1>%s</h1>\n" % name) + + caption = self.datasource.caption() + if caption and caption != name: + output.write("caption: %s<br />\n" % caption) + + description = self.datasource.description() + if description: + output.write("description: %s<br />\n" % description) + + #import datetime + #output.write("date: %s<br />" % datetime.datetime.now()) + + output.write("<table border='1'>\n") + + output.write("<tr>") + for h in self.datasource.header(): + output.write("<th>%s</th>" % h) + output.write("</tr>") + + while 1 == 1: + items = self.datasource.getNext() + if items == None: break + output.write("<tr>") + for item in items: + u = unicode(str(self.htmlescape(item)),"latin-1") + output.write("<td>%s</td>" % u.encode("utf-8")) + output.write("</tr>\n") + output.write("</table>\n") + output.write("</body></html>\n") + +class GuiApp: + def __init__(self, datasource): + self.datasource = datasource + + try: + import gui + except: + raise "Import of the Kross GUI module failed." + + self.dialog = gui.Dialog("Export XHTML") + self.dialog.addLabel(self.dialog, "Export a table- or query-datasource to a XHTML-file.") + + datasourceitems = self.datasource.getSources() + self.datasourcelist = self.dialog.addList(self.dialog, "Datasource:", datasourceitems) + + styleitems = ["Plain", "Paper", "Blues"] + self.stylelist = self.dialog.addList(self.dialog, "Style:", styleitems) + + #queryframe = Tkinter.Frame(frame) + #queryframe.pack() + #Tkinter.Label(queryframe, text="Table or query to export:").pack(side=Tkinter.LEFT) + #self.querycontent = Tkinter.StringVar() + #self.query = apply(Tkinter.OptionMenu, (queryframe, self.querycontent) + tuple( self.datasource.getSources() )) + #self.query.pack(side=Tkinter.LEFT) + + self.file = self.dialog.addFileChooser(self.dialog, + "File:", + gui.getHome() + "/kexidata.xhtml", + (('XHTML files', '*.xhtml'),('All files', '*'))) + + btnframe = self.dialog.addFrame(self.dialog) + self.dialog.addButton(btnframe, "Export", self.doExport) + self.dialog.addButton(btnframe, "Cancel", self.dialog.close) + + self.dialog.show() + + def doExport(self): + file = str( self.file.get() ) + query = str( self.datasourcelist.get() ) + print "Exporting '%s' to file '%s' ..." % (query,file) + + if not self.datasource.setSource(query): + raise "Invalid datasource selected." + #return + + style = str( self.stylelist.get() ) + + f = open(file, "w") + global HtmlExporter + exporter = HtmlExporter(self.datasource) + exporter.write(f, style) + f.close() + + print "Successfully exported '%s' to file %s" % (query,file) + self.dialog.close() + +GuiApp( Datasource() ) diff --git a/kexi/plugins/scripting/scripts/exportxhtml/ExportXHTML.rc b/kexi/plugins/scripting/scripts/exportxhtml/ExportXHTML.rc new file mode 100644 index 00000000..11c1dcdf --- /dev/null +++ b/kexi/plugins/scripting/scripts/exportxhtml/ExportXHTML.rc @@ -0,0 +1,8 @@ +<KrossScripting> + <ScriptAction + name="exportxhtml" + text="Export Data to XHTML File" + icon="fileexport" + interpreter="python" + file="ExportXHTML.py" /> +</KrossScripting> diff --git a/kexi/plugins/scripting/scripts/exportxhtml/Makefile.am b/kexi/plugins/scripting/scripts/exportxhtml/Makefile.am new file mode 100644 index 00000000..1c7b9ca6 --- /dev/null +++ b/kexi/plugins/scripting/scripts/exportxhtml/Makefile.am @@ -0,0 +1,4 @@ +include $(top_srcdir)/kexi/Makefile.global + +scriptsdir = $(kde_datadir)/kexi/scripts/exportxhtml +scripts_SCRIPTS = ExportXHTML.py ExportXHTML.rc |