Doxygen
Loading...
Searching...
No Matches
xmlgen.h File Reference
#include "outputgen.h"
Include dependency graph for xmlgen.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  XMLCodeGenerator

Functions

void generateXML ()

Function Documentation

◆ generateXML()

void generateXML ( )

Definition at line 2201 of file xmlgen.cpp.

2202{
2203 // + classes
2204 // + concepts
2205 // + namespaces
2206 // + files
2207 // + groups
2208 // + related pages
2209 // - examples
2210
2211 QCString outputDirectory = Config_getString(XML_OUTPUT);
2212 Dir xmlDir(outputDirectory.str());
2213 createSubDirs(xmlDir);
2214
2215 ResourceMgr::instance().copyResource("xml.xsd",outputDirectory);
2216 ResourceMgr::instance().copyResource("index.xsd",outputDirectory);
2217
2218 QCString fileName=outputDirectory+"/compound.xsd";
2219 std::ofstream f = Portable::openOutputStream(fileName);
2220 if (!f.is_open())
2221 {
2222 err("Cannot open file {} for writing!\n",fileName);
2223 return;
2224 }
2225 {
2226 TextStream t(&f);
2227
2228 // write compound.xsd, but replace special marker with the entities
2229 QCString compound_xsd = ResourceMgr::instance().getAsString("compound.xsd");
2230 const char *startLine = compound_xsd.data();
2231 while (*startLine)
2232 {
2233 // find end of the line
2234 const char *endLine = startLine+1;
2235 while (*endLine && *(endLine-1)!='\n') endLine++; // skip to end of the line including \n
2236 int len=static_cast<int>(endLine-startLine);
2237 if (len>0)
2238 {
2239 QCString s(startLine,len);
2240 if (s.find("<!-- Automatically insert here the HTML entities -->")!=-1)
2241 {
2243 }
2244 else
2245 {
2246 t.write(startLine,len);
2247 }
2248 }
2249 startLine=endLine;
2250 }
2251 }
2252 f.close();
2253
2254 fileName=outputDirectory+"/doxyfile.xsd";
2255 f = Portable::openOutputStream(fileName);
2256 if (!f.is_open())
2257 {
2258 err("Cannot open file {} for writing!\n",fileName);
2259 return;
2260 }
2261 {
2262 TextStream t(&f);
2263
2264 // write doxyfile.xsd, but replace special marker with the entities
2265 QCString doxyfile_xsd = ResourceMgr::instance().getAsString("doxyfile.xsd");
2266 const char *startLine = doxyfile_xsd.data();
2267 while (*startLine)
2268 {
2269 // find end of the line
2270 const char *endLine = startLine+1;
2271 while (*endLine && *(endLine-1)!='\n') endLine++; // skip to end of the line including \n
2272 int len=static_cast<int>(endLine-startLine);
2273 if (len>0)
2274 {
2275 QCString s(startLine,len);
2276 if (s.find("<!-- Automatically insert here the configuration settings -->")!=-1)
2277 {
2279 }
2280 else
2281 {
2282 t.write(startLine,len);
2283 }
2284 }
2285 startLine=endLine;
2286 }
2287 }
2288 f.close();
2289
2290 fileName=outputDirectory+"/Doxyfile.xml";
2291 f = Portable::openOutputStream(fileName);
2292 if (!f.is_open())
2293 {
2294 err("Cannot open file {} for writing\n",fileName);
2295 return;
2296 }
2297 else
2298 {
2299 TextStream t(&f);
2301 }
2302 f.close();
2303
2304 fileName=outputDirectory+"/index.xml";
2305 f = Portable::openOutputStream(fileName);
2306 if (!f.is_open())
2307 {
2308 err("Cannot open file {} for writing!\n",fileName);
2309 return;
2310 }
2311 else
2312 {
2313 TextStream t(&f);
2314
2315 // write index header
2316 t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n";
2317 t << "<doxygenindex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
2318 t << "xsi:noNamespaceSchemaLocation=\"index.xsd\" ";
2319 t << "version=\"" << getDoxygenVersion() << "\" ";
2320 t << "xml:lang=\"" << theTranslator->trISOLang() << "\"";
2321 t << ">\n";
2322
2323 for (const auto &cd : *Doxygen::classLinkedMap)
2324 {
2325 generateXMLForClass(cd.get(),t);
2326 }
2327 for (const auto &cd : *Doxygen::conceptLinkedMap)
2328 {
2329 msg("Generating XML output for concept {}\n",cd->displayName());
2330 generateXMLForConcept(cd.get(),t);
2331 }
2332 for (const auto &nd : *Doxygen::namespaceLinkedMap)
2333 {
2334 msg("Generating XML output for namespace {}\n",nd->displayName());
2335 generateXMLForNamespace(nd.get(),t);
2336 }
2337 for (const auto &fn : *Doxygen::inputNameLinkedMap)
2338 {
2339 for (const auto &fd : *fn)
2340 {
2341 msg("Generating XML output for file {}\n",fd->name());
2342 generateXMLForFile(fd.get(),t);
2343 }
2344 }
2345 for (const auto &gd : *Doxygen::groupLinkedMap)
2346 {
2347 msg("Generating XML output for group {}\n",gd->name());
2348 generateXMLForGroup(gd.get(),t);
2349 }
2350 for (const auto &pd : *Doxygen::pageLinkedMap)
2351 {
2352 msg("Generating XML output for page {}\n",pd->name());
2353 generateXMLForPage(pd.get(),t,FALSE);
2354 }
2355 for (const auto &dd : *Doxygen::dirLinkedMap)
2356 {
2357 msg("Generate XML output for dir {}\n",dd->name());
2358 generateXMLForDir(dd.get(),t);
2359 }
2360 for (const auto &mod : ModuleManager::instance().modules())
2361 {
2362 msg("Generating XML output for module {}\n",mod->name());
2363 generateXMLForModule(mod.get(),t);
2364 }
2365 for (const auto &pd : *Doxygen::exampleLinkedMap)
2366 {
2367 msg("Generating XML output for example {}\n",pd->name());
2368 generateXMLForPage(pd.get(),t,TRUE);
2369 }
2371 {
2372 msg("Generating XML output for the main page\n");
2374 }
2375
2376 //t << " </compoundlist>\n";
2377 t << "</doxygenindex>\n";
2378 }
2379
2381 clearSubDirs(xmlDir);
2382}
Class representing a directory in the file system.
Definition dir.h:75
static NamespaceLinkedMap * namespaceLinkedMap
Definition doxygen.h:114
static ConceptLinkedMap * conceptLinkedMap
Definition doxygen.h:97
static std::unique_ptr< PageDef > mainPage
Definition doxygen.h:100
static FileNameLinkedMap * inputNameLinkedMap
Definition doxygen.h:104
static ClassLinkedMap * classLinkedMap
Definition doxygen.h:95
static PageLinkedMap * exampleLinkedMap
Definition doxygen.h:98
static PageLinkedMap * pageLinkedMap
Definition doxygen.h:99
static DirLinkedMap * dirLinkedMap
Definition doxygen.h:128
static GroupLinkedMap * groupLinkedMap
Definition doxygen.h:113
void writeXMLSchema(TextStream &t)
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
static ModuleManager & instance()
This is an alternative implementation of QCString.
Definition qcstring.h:101
const std::string & str() const
Definition qcstring.h:552
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172
static ResourceMgr & instance()
Returns the one and only instance of this class.
bool copyResource(const QCString &name, const QCString &targetDir) const
Copies a registered resource to a given target directory.
QCString getAsString(const QCString &name) const
Gets the resource data as a C string.
Text streaming class that buffers data.
Definition textstream.h:36
#define Config_getString(name)
Definition config.h:32
Translator * theTranslator
Definition language.cpp:71
#define msg(fmt,...)
Definition message.h:94
#define err(fmt,...)
Definition message.h:127
void writeXMLDoxyfile(TextStream &t)
void writeXSDDoxyfile(TextStream &t)
std::ofstream openOutputStream(const QCString &name, bool append=false)
Definition portable.cpp:649
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
void clearSubDirs(const Dir &d)
Definition util.cpp:3609
void createSubDirs(const Dir &d)
Definition util.cpp:3582
static void generateXMLForGroup(const GroupDef *gd, TextStream &ti)
Definition xmlgen.cpp:1936
static void generateXMLForClass(const ClassDef *cd, TextStream &ti)
Definition xmlgen.cpp:1480
static void generateXMLForFile(FileDef *fd, TextStream &ti)
Definition xmlgen.cpp:1821
static void generateXMLForNamespace(const NamespaceDef *nd, TextStream &ti)
Definition xmlgen.cpp:1748
static void generateXMLForModule(const ModuleDef *mod, TextStream &ti)
Definition xmlgen.cpp:1693
static void generateXMLForConcept(const ConceptDef *cd, TextStream &ti)
Definition xmlgen.cpp:1647
static void generateXMLForDir(DirDef *dd, TextStream &ti)
Definition xmlgen.cpp:2005
static void generateXMLForPage(PageDef *pd, TextStream &ti, bool isExample)
Definition xmlgen.cpp:2043
static void writeCombineScript()
Definition xmlgen.cpp:134

References Doxygen::classLinkedMap, clearSubDirs(), Doxygen::conceptLinkedMap, Config_getString, ResourceMgr::copyResource(), createSubDirs(), QCString::data(), Doxygen::dirLinkedMap, err, Doxygen::exampleLinkedMap, FALSE, QCString::find(), generateXMLForClass(), generateXMLForConcept(), generateXMLForDir(), generateXMLForFile(), generateXMLForGroup(), generateXMLForModule(), generateXMLForNamespace(), generateXMLForPage(), ResourceMgr::getAsString(), Doxygen::groupLinkedMap, Doxygen::inputNameLinkedMap, HtmlEntityMapper::instance(), ModuleManager::instance(), ResourceMgr::instance(), Doxygen::mainPage, msg, Doxygen::namespaceLinkedMap, Portable::openOutputStream(), Doxygen::pageLinkedMap, QCString::str(), theTranslator, TRUE, TextStream::write(), writeCombineScript(), Config::writeXMLDoxyfile(), HtmlEntityMapper::writeXMLSchema(), and Config::writeXSDDoxyfile().

Referenced by generateOutput().