/*************************************************************************** * xhtmlgenerator.cpp - description * * ------------------- * * copyright : (C) 2006 by Gael de Chalendar (aka Kleag) * * (C) 2006 Umbrello UML Modeller Authors * *************************************************************************** * * * 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. * * * ***************************************************************************/ #include "xhtmlgenerator.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "uml.h" #include "umldoc.h" #include "umlviewimageexportermodel.h" #include "docbookgenerator.h" extern int xmlLoadExtDtdDefaultValue; XhtmlGenerator::XhtmlGenerator() { } XhtmlGenerator::~XhtmlGenerator() {} bool XhtmlGenerator::generateXhtmlForProject() { UMLApp *app = UMLApp::app(); UMLDoc* umlDoc = app->getDocument(); KURL url = umlDoc->URL(); TQString fileName = url.fileName(); fileName.replace(TQRegExp(".xmi$"),""); url.setFileName(fileName); kDebug() << "Exporting to directory: " << url << endl; return generateXhtmlForProjectInto(url); } bool XhtmlGenerator::generateXhtmlForProjectInto(const KURL& destDir) { kDebug() << "First convert to docbook" << endl; m_destDir = destDir; // KURL url(TQString("file://")+m_tmpDir.name()); TDEIO::Job* docbookJob = DocbookGenerator().generateDocbookForProjectInto(destDir); if (docbookJob == 0) { return false; } kDebug() << "Connecting..." << endl; connect(docbookJob, TQT_SIGNAL(result( TDEIO::Job * )), this, TQT_SLOT(slotDocbookToXhtml( TDEIO::Job *))); return true; } void XhtmlGenerator::slotDocbookToXhtml(TDEIO::Job * docbookJob) { kDebug() << "Now convert docbook to html..." << endl; if ( docbookJob->error() ) { docbookJob->showErrorDialog( 0L ); return; } UMLApp* app = UMLApp::app(); UMLDoc* umlDoc = app->getDocument(); const KURL& url = umlDoc->URL(); TQString docbookName = url.fileName(); docbookName.replace(TQRegExp(".xmi$"),".docbook"); // KURL docbookUrl(TQString("file://")+m_tmpDir.name()); KURL docbookUrl = m_destDir; docbookUrl.addPath(docbookName); xsltStylesheetPtr cur = NULL; xmlDocPtr doc, res; const char *params[16 + 1]; int nbparams = 0; params[nbparams] = NULL; TQString xsltFileName(TDEGlobal::dirs()->findResource("appdata","docbook2xhtml.xsl")); kDebug() << "XSLT file is'"<findResource("data","ksgmltools2/docbook/xsl/html/docbook.xsl"); kDebug() << "Local xsl is'"<close(); xmlSubstituteEntitiesDefault(1); xmlLoadExtDtdDefaultValue = 1; kDebug() << "Parsing stylesheet " << tmpXsl.name() << endl; cur = xsltParseStylesheetFile((const xmlChar *)tmpXsl.name().latin1()); kDebug() << "Parsing file " << docbookUrl.path() << endl; doc = xmlParseFile((const char*)(docbookUrl.path().utf8())); kDebug() << "Applying stylesheet " << endl; res = xsltApplyStylesheet(cur, doc, params); KTempFile tmpXhtml; tmpXhtml.setAutoDelete(false); kDebug() << "Writing HTML result to temp file: " << tmpXhtml.file()->name() << endl; xsltSaveResultToFile(tmpXhtml.fstream(), res, cur); xsltFreeStylesheet(cur); xmlFreeDoc(res); xmlFreeDoc(doc); xsltCleanupGlobals(); xmlCleanupParser(); TQString xhtmlName = url.fileName(); xhtmlName.replace(TQRegExp(".xmi$"),".html"); KURL xhtmlUrl = m_destDir; xhtmlUrl.addPath(xhtmlName); kDebug() << "Copying HTML result to: " << xhtmlUrl << endl; TDEIO::Job* job = TDEIO::file_copy(tmpXhtml.file()->name(),xhtmlUrl,-1,true,false,false); job->setAutoErrorHandlingEnabled(true); connect (job, TQT_SIGNAL(result( TDEIO::Job* )), this, TQT_SLOT(slotHtmlCopyFinished( TDEIO::Job* ))); TQString cssFileName(TDEGlobal::dirs()->findResource("appdata","xmi.css")); kDebug() << "CSS file is'"<setAutoErrorHandlingEnabled(true); } void XhtmlGenerator::slotHtmlCopyFinished( TDEIO::Job* ) { kDebug() << "HTML copy finished: emiting finished" << endl; emit(finished()); } #include "xhtmlgenerator.moc"