This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
Functions | |
QString | fixXMLString (QString text) |
Fix strings before exporting to XML such that & becomes &, etc... | |
void | transformXMLtoHTML (QString outputPath, QString theme, bool smallWebExport) |
void | updateXML (QString inputPath) |
QString fixXMLString | ( | QString | text | ) |
Fix strings before exporting to XML such that & becomes &, etc...
Definition at line 36 of file xmlTools.cpp.
Referenced by Album::exportToXML(), Photo::exportToXML(), and Subalbum::exportToXML().
00037 { 00038 //the following checks are necessary before exporting 00039 //strings to XML. see http://hdf.ncsa.uiuc.edu/HDF5/XML/xml_escape_chars.html for details 00040 text.replace("&", "&"); 00041 text.replace("\"","""); 00042 text.replace("'", "'"); 00043 text.replace("<", "<"); 00044 text.replace(">", ">"); 00045 text.replace("\n", " "); 00046 text.replace("\r", " "); 00047 return text; 00048 }
void transformXMLtoHTML | ( | QString | outputPath, | |
QString | theme, | |||
bool | smallWebExport | |||
) |
Definition at line 50 of file xmlTools.cpp.
References THEMES_PATH.
Referenced by Album::exportCompressedWebAlbum(), and Album::exportToDisk().
00051 { 00052 xmlSubstituteEntitiesDefault(1); 00053 xmlLoadExtDtdDefaultValue = 1; 00054 xsltStylesheetPtr cur = xsltParseStylesheetFile( (const xmlChar *) QString(THEMES_PATH + theme + "/theme.xsl").ascii() ); 00055 00056 QString xmlFile = QString(outputPath + "/Album.xml"); 00057 xmlDocPtr doc = xmlParseFile( QFile::encodeName(xmlFile) ); 00058 00059 const char* params[5]; 00060 //-- 00061 params[0] = "outputPath"; 00062 QString quotedPath = outputPath; 00063 00064 //For some reason libxslt has trouble handling filenames with spaces on Unix platforms (OSX, 00065 //Linux, FreeBSD?). this problem can be averted by converting the filename to a URI. Converting it 00066 //to a URI on windows using the qt method mangles the drive name though, so only convert to 00067 //URI on OSX. We need to nail this weirdness at some point and be consistant IMHO but for now 00068 //this works... 00069 #ifndef Q_OS_WIN 00070 quotedPath = QUriDrag::localFileToUri( quotedPath ); 00071 #endif 00072 00073 params[1] = quotedPath.prepend('\"').append('\"').ascii(); 00074 //-- 00075 params[2] = "smallWebExport"; 00076 if(smallWebExport) 00077 params[3] = "1"; 00078 else 00079 params[3] = "0"; 00080 //-- 00081 params[4] = NULL; 00082 xmlDocPtr res = xsltApplyStylesheet( cur, doc, params); 00083 xsltFreeStylesheet( cur ); 00084 xmlFreeDoc( res ); 00085 xmlFreeDoc( doc ); 00086 xsltCleanupGlobals(); 00087 xmlCleanupParser(); 00088 }
void updateXML | ( | QString | inputPath | ) |
Definition at line 90 of file xmlTools.cpp.
References XMLCONVERSION_PATH.
Referenced by Album::importFromDisk().
00091 { 00092 //skip updating the xml file if we can't find the update.xsl file 00093 QDir tmpDir; 00094 if( !tmpDir.exists( XMLCONVERSION_PATH + "update.xsl" ) ) 00095 { 00096 std::cout << "Can't find update.xsl! Skipping auto-update!\n"; 00097 return; 00098 } 00099 00100 xmlSubstituteEntitiesDefault(1); 00101 xmlLoadExtDtdDefaultValue = 1; 00102 00103 xsltStylesheetPtr stylesheet; 00104 xmlDocPtr inputDoc, outputDoc; 00105 00106 stylesheet = xsltParseStylesheetFile( (const xmlChar *) QString(XMLCONVERSION_PATH + "update.xsl").ascii() ); 00107 00108 QString xmlFile = QString( inputPath + "/Album.xml" ); 00109 xmlFile = QDir::convertSeparators( xmlFile ); 00110 inputDoc = xmlParseFile( QFile::encodeName(xmlFile) ); 00111 00112 const char* params[3]; 00113 params[0] = "outputPath"; 00114 00115 QString quotedPath = inputPath; 00116 00117 //For some reason libxslt has trouble handling filenames with spaces on Unix platforms (OSX, 00118 //Linux, FreeBSD?). this problem can be averted by converting the filename to a URI. Converting it 00119 //to a URI on windows using the qt method mangles the drive name though, so only convert to 00120 //URI on OSX. We need to nail this weirdness at some point and be consistant IMHO but for now 00121 //this works... 00122 #ifndef Q_OS_WIN 00123 quotedPath = QUriDrag::localFileToUri( quotedPath ); 00124 #endif 00125 00126 00127 params[1] = quotedPath.prepend('\"').append('\"').ascii(); 00128 00129 params[2] = NULL; 00130 00131 std::cout.flush(); 00132 00133 //iterate until Album.updated file is created 00134 QDir workingDir( inputPath ); 00135 00136 int iterations = 0; 00137 while(true) 00138 { 00139 iterations++; 00140 00141 //apply the stylesheet 00142 outputDoc = xsltApplyStylesheet( stylesheet, inputDoc, params ); 00143 00144 //if Album.updated file now exists we have already completed the last iteration, 00145 //meaning the input document is the most up-to-date so break out of loop 00146 if(workingDir.exists( "Album.updated" )) 00147 break; 00148 00149 //free input doc 00150 xmlFreeDoc( inputDoc ); 00151 00152 //swap input and output 00153 inputDoc = outputDoc; 00154 } 00155 00156 //remove updated file 00157 workingDir.remove( inputPath + "/Album.updated" ); 00158 00159 //if we made more than one iteration then changes were applied 00160 if(iterations > 1) 00161 { 00162 //output updated xml file 00163 FILE* outfile = fopen( QFile::encodeName(xmlFile), "w" ); 00164 xsltSaveResultToFile( outfile, inputDoc, stylesheet); 00165 fclose( outfile ); 00166 } 00167 00168 //memory 00169 xsltFreeStylesheet( stylesheet ); 00170 xmlFreeDoc( inputDoc ); 00171 xmlFreeDoc( outputDoc ); 00172 xsltCleanupGlobals(); 00173 xmlCleanupParser(); 00174 }