1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#!/usr/bin/env python
"""
Convert an XML-Dump to platformspecific help files.
Copyright 2011 Timo Richter
This program depends on:
mwlib
python
python-lxml
xsltproc
Microsoft HHC: http://go.microsoft.com/fwlink/?LinkId=14188
"""
import subprocess, tempfile, os, shutil
import mwlib_mods
from hhc import HHC
from mw import MW
from metabook_translated import MetabookTranslated
scriptpath=os.path.dirname(os.path.realpath(__file__) )
class Main(object):
createChm = True # final
keepTmp = True # final
workingDir = "./test" # final
#style=os.path.join(scriptpath,'xsl/htmlhelp/htmlhelp.xsl') # final
style=os.path.join(scriptpath,'htmlhelp.xsl') # final
tmp=None
def ex(self,*cmd):
"""
Execute a program
@cmd Command, args
@return boolean True if succeed
"""
cmd = [elem for elem in cmd]
print cmd
return (subprocess.Popen(cmd).wait() == 0)
def __init__(self):
self.tmp = tempfile.mkdtemp()
self.workingDir = os.path.abspath(self.workingDir)
self.style = os.path.abspath(self.style)
self.hhc = HHC()
self.convert("test2.xml",self.workingDir)
def createDir(self,path):
try:
os.mkdir(path)
except OSError:
pass
@staticmethod
def createMetabook(xmldump,output): # TODO: move to class Metabook
"""
@xmldump String path
@output String path
"""
m = MetabookTranslated()
jsonStructFile = os.path.join(scriptpath,"metabook.json")
with open(jsonStructFile,"r") as f:
m.loadTemplate(f)
m(xmldump)
with open(output,"w") as f:
m.write(f)
def convert(self,source,dest,startpage=None,title="LibreOffice"):
"""
Create the converted files.
@source XML-Dump-file
@dest Directory for output
@startpage Path to an html file
"""
tmp = self.tmp
self.createDir(dest)
shutil.copy(os.path.join(scriptpath,"nfo.json"),tmp)
#names = self.getArtNames(source)
metabook=os.path.join(tmp,"metabook.json")
self.createMetabook(source,metabook)
MW.buildcdb(source,tmp)
#MW.render("--config=%s/wikiconf.txt"%(tmp),
# "-w","docbook","-o",tmp+"/docbook.xml",*names)
MW.render("--config=%s/wikiconf.txt"%(tmp),
"-w","docbook","-o",tmp+"/docbook.xml","-m",metabook,"--title",title)
#and mwlib.apps.render
#self.ex(self.mwpath+"mw-buildcdb","--input",source,"--output",tmp) and \
#self.ex(
# self.mwpath+"mw-render","--config=%s/wikiconf.txt"%(tmp),
# "-w","docbook","-o",tmp+"/docbook.xml",*names) \
(shutil.copy(tmp+'/docbook.xml',dest) or True) \
and self.ex("/usr/bin/xsltproc","--nonet","--novalid","-o",tmp+'/',self.style,tmp+'/docbook.xml') \
and self.setStartpage(startpage) \
and self.createChm \
and (self.hhc(tmp) or True) \
and (shutil.copy(os.path.join(tmp,'htmlhelp.chm'),dest) or True)
def setStartpage(self,startpage):
"""
Private.
Copies @startpage to our tmp dir so that it will be used as the start page.
@return False if @startpage doesnt exist, otherwise True.
"""
if startpage is None: return True
filename="index.html"
if not os.path.exist(startpage): return False
os.remove(os.path.join(self.tmp,filename))
shutil.copy(startpage, os.path.join(self.tmp,filename))
return True
def __del__(self):
if not self.keepTmp:
shutil.rmtree(self.tmp) # remove temp files
if __name__ == '__main__':
Main()
|