From 68f125afb0ebb06bd28c6a800d866d369dd4f861 Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Wed, 7 Oct 2009 12:46:21 +0000 Subject: [PATCH] Adding a first version of new XEP generation script. git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@3498 4b5297f7-1745-476d-ba37-a9c6900126ab --- gen.py | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100755 gen.py diff --git a/gen.py b/gen.py new file mode 100755 index 00000000..b68a4228 --- /dev/null +++ b/gen.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python + +# File: all.py +# Version: 0.1 +# Description: a renewed XEP compilation tool +# Last Modified: 2009 +# Author: Tobias Markmann (tm@ayena.de) +# License: public domain +# HowTo: ./all.py + +## LICENSE ## +# +# Copyright (c) 1999 - 2009 XMPP Standards Foundation +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +## END LICENSE ## + +import pickle +import commands +import os +import re +import sys +import getopt + +XEPPATH = "/var/www/vhosts/xmpp.org/extensions" +BUILDDICT = "/var/xsf/xepbuild.dict" + +last_build = {} + +def filebase( filename ): + return os.path.splitext(os.path.basename(filename))[0] + + +def fileHash( filename ): + f = open(filename, "rb") + import hashlib + h = hashlib.sha1() + h.update(f.read()) + hash = h.hexdigest() + f.close() + return hash + +def loadDict( filename ): + try: + f = open(filename, "rb") + di = pickle.load(f) + f.close() + return di + except: + print "failed loading dict." + return {} + +def saveDict( filename, di ): + f = open(filename, "w") + pickle.dump(di, f) + f.close() + +def buildXHTML( file ): + nr = re.match("xep-(\d\d\d\d).xml", file).group(1) + error, desc = commands.getstatusoutput("xsltproc xep.xsl xep-" + nr + ".xml > " + XEPPATH + "/xep-" + nr + ".html") + if error != 0: + return False + + error, desc = commands.getstatusoutput("xsltproc ref.xsl xep-" + nr + ".xml > " + XEPPATH + "/refs/reference.XSF.XEP-" + nr + ".xml") + if error != 0: + return False + + error, desc = commands.getstatusoutput("xsltproc examples.xsl xep-" + nr + ".xml > " + XEPPATH + "/examples/" + nr + ".xml") + if error != 0: + return False + + error, desc = commands.getstatusoutput(" cp xep-" + nr + ".xml " + XEPPATH + "/") + if error != 0: + return False + return True + +def buildPDF( file ): + nr = re.match("xep-(\d\d\d\d).xml", file).group(1) + + error, desc = commands.getstatusoutput("xsltproc -o /tmp/xepbuilder/xep-" + nr + ".tex.xml xep2texml.xsl xep-" + nr + ".xml") + if error != 0: + return False + + error, desc = commands.getstatusoutput("texml -e utf8 /tmp/xepbuilder/xep-" + nr + ".tex.xml /tmp/xepbuilder/xep-" + nr + ".tex") + if error != 0: + return False + + #detect http urls and escape them to make them breakable + error, desc = commands.getstatusoutput('''sed -i 's|\([\s"]\)\(http://[^ "]*\)|\1\\path{\2}|g' /tmp/xepbuilder/xep-''' + nr + ".tex") + if error != 0: + return False + + #adjust references + error, desc = commands.getstatusoutput('''sed -i 's|\\hyperref\[#\([^}]*\)\]|\\hyperref\[\1\]|g' /tmp/xepbuilder/xep-''' + nr + ".tex") + if error != 0: + return False + + error, desc = commands.getstatusoutput('''sed -i 's|\\pageref{#\([^}]*\)}|\\pageref{\1}|g' /tmp/xepbuilder/xep-''' + nr + ".tex") + if error != 0: + return False + + olddir = os.getcwd() + os.chdir("/tmp/xepbuilder") + + error, desc = commands.getstatusoutput("xelatex -interaction=batchmode xep-" + nr + ".tex") + if error != 0: + os.chdir(olddir) + return False + + error, desc = commands.getstatusoutput("xelatex -interaction=batchmode xep-" + nr + ".tex") + if error != 0: + os.chdir(olddir) + return False + + os.chdir(olddir) + + error, desc = commands.getstatusoutput("cp /tmp/xepbuilder/xep-" + nr + ".pdf " + XEPPATH + "/") + if error != 0: + return False + + return True + +def buildXEP( filename ): + print "Building " + filename + ": ", + if buildXHTML( filename ): + print "XHTML(OK) / ", + else: + print "XHTML(ERROR) / ", + + if buildPDF( filename ): + print "PDF(OK)" + else: + print "PDF(ERROR)" + +def main(argv): + try: + options, remainder = getopt.gnu_getopt(argv, "x") + except getopt.GetoptError: + print "Error" + sys.exit(2) + + xep = remainder[0] + + last_build = loadDict(BUILDDICT) + + commands.getstatusoutput("rm /tmp/xepbuilder") + commands.getstatusoutput("mkdir /tmp/xepbuilder") + commands.getstatusoutput("cp ../images/logo.pdf /tmp/xepbuilder/logo.pdf") + + buildXEP( xep ) + + saveDict(BUILDDICT, last_build) + +if __name__ == "__main__": + main(sys.argv[1:]) \ No newline at end of file