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 2317 of file xmlgen.cpp.

2318{
2319 // + classes
2320 // + concepts
2321 // + namespaces
2322 // + files
2323 // + groups
2324 // + related pages
2325 // - examples
2326
2327 QCString outputDirectory = Config_getString(XML_OUTPUT);
2328 Dir xmlDir(outputDirectory.str());
2329 createSubDirs(xmlDir);
2330
2331 ResourceMgr::instance().copyResource("xml.xsd",outputDirectory);
2332 ResourceMgr::instance().copyResource("index.xsd",outputDirectory);
2333
2334 QCString fileName=outputDirectory+"/compound.xsd";
2335 std::ofstream f = Portable::openOutputStream(fileName);
2336 if (!f.is_open())
2337 {
2338 err("Cannot open file {} for writing!\n",fileName);
2339 return;
2340 }
2341 {
2342 TextStream t(&f);
2343
2344 // write compound.xsd, but replace special marker with the entities
2345 QCString compound_xsd = ResourceMgr::instance().getAsString("compound.xsd");
2346 const char *startLine = compound_xsd.data();
2347 while (*startLine)
2348 {
2349 // find end of the line
2350 const char *endLine = startLine+1;
2351 while (*endLine && *(endLine-1)!='\n') endLine++; // skip to end of the line including \n
2352 int len=static_cast<int>(endLine-startLine);
2353 if (len>0)
2354 {
2355 QCString s(startLine,len);
2356 if (s.find("<!-- Automatically insert here the HTML entities -->")!=-1)
2357 {
2359 }
2360 else
2361 {
2362 t.write(startLine,len);
2363 }
2364 }
2365 startLine=endLine;
2366 }
2367 }
2368 f.close();
2369
2370 fileName=outputDirectory+"/doxyfile.xsd";
2371 f = Portable::openOutputStream(fileName);
2372 if (!f.is_open())
2373 {
2374 err("Cannot open file {} for writing!\n",fileName);
2375 return;
2376 }
2377 {
2378 TextStream t(&f);
2379
2380 // write doxyfile.xsd, but replace special marker with the entities
2381 QCString doxyfile_xsd = ResourceMgr::instance().getAsString("doxyfile.xsd");
2382 const char *startLine = doxyfile_xsd.data();
2383 while (*startLine)
2384 {
2385 // find end of the line
2386 const char *endLine = startLine+1;
2387 while (*endLine && *(endLine-1)!='\n') endLine++; // skip to end of the line including \n
2388 int len=static_cast<int>(endLine-startLine);
2389 if (len>0)
2390 {
2391 QCString s(startLine,len);
2392 if (s.find("<!-- Automatically insert here the configuration settings -->")!=-1)
2393 {
2395 }
2396 else
2397 {
2398 t.write(startLine,len);
2399 }
2400 }
2401 startLine=endLine;
2402 }
2403 }
2404 f.close();
2405
2406 fileName=outputDirectory+"/Doxyfile.xml";
2407 f = Portable::openOutputStream(fileName);
2408 if (!f.is_open())
2409 {
2410 err("Cannot open file {} for writing\n",fileName);
2411 return;
2412 }
2413 else
2414 {
2415 TextStream t(&f);
2417 }
2418 f.close();
2419
2420 fileName=outputDirectory+"/index.xml";
2421 f = Portable::openOutputStream(fileName);
2422 if (!f.is_open())
2423 {
2424 err("Cannot open file {} for writing!\n",fileName);
2425 return;
2426 }
2427 else
2428 {
2429 TextStream t(&f);
2430
2431 // write index header
2432 t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n";
2433 t << "<doxygenindex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
2434 t << "xsi:noNamespaceSchemaLocation=\"index.xsd\" ";
2435 t << "version=\"" << getDoxygenVersion() << "\" ";
2436 t << "xml:lang=\"" << theTranslator->trISOLang() << "\"";
2437 t << ">\n";
2438
2439 for (const auto &cd : *Doxygen::classLinkedMap)
2440 {
2441 generateXMLForClass(cd.get(),t);
2442 }
2443 for (const auto &cd : *Doxygen::conceptLinkedMap)
2444 {
2445 msg("Generating XML output for concept {}\n",cd->displayName());
2446 generateXMLForConcept(cd.get(),t);
2447 }
2448 for (const auto &nd : *Doxygen::namespaceLinkedMap)
2449 {
2450 msg("Generating XML output for namespace {}\n",nd->displayName());
2451 generateXMLForNamespace(nd.get(),t);
2452 }
2453 for (const auto &fn : *Doxygen::inputNameLinkedMap)
2454 {
2455 for (const auto &fd : *fn)
2456 {
2457 msg("Generating XML output for file {}\n",fd->name());
2458 generateXMLForFile(fd.get(),t);
2459 }
2460 }
2461 for (const auto &gd : *Doxygen::groupLinkedMap)
2462 {
2463 msg("Generating XML output for group {}\n",gd->name());
2464 generateXMLForGroup(gd.get(),t);
2465 }
2466 for (const auto &pd : *Doxygen::pageLinkedMap)
2467 {
2468 msg("Generating XML output for page {}\n",pd->name());
2469 generateXMLForPage(pd.get(),t,FALSE);
2470 }
2471 for (const auto &req : RequirementManager::instance().requirements())
2472 {
2473 if (req->getTagFile().isEmpty())
2474 {
2475 msg("Generating XML output for requirement {}\n", req->id());
2477 }
2478 }
2479 for (const auto &dd : *Doxygen::dirLinkedMap)
2480 {
2481 msg("Generate XML output for dir {}\n",dd->name());
2482 generateXMLForDir(dd.get(),t);
2483 }
2484 for (const auto &mod : ModuleManager::instance().modules())
2485 {
2486 msg("Generating XML output for module {}\n",mod->name());
2487 generateXMLForModule(mod.get(),t);
2488 }
2489 for (const auto &pd : *Doxygen::exampleLinkedMap)
2490 {
2491 msg("Generating XML output for example {}\n",pd->name());
2492 generateXMLForPage(pd.get(),t,TRUE);
2493 }
2495 {
2496 msg("Generating XML output for the main page\n");
2498 }
2499
2500 //t << " </compoundlist>\n";
2501 t << "</doxygenindex>\n";
2502 }
2503
2505 clearSubDirs(xmlDir);
2506}
Class representing a directory in the file system.
Definition dir.h:75
static NamespaceLinkedMap * namespaceLinkedMap
Definition doxygen.h:115
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:127
static GroupLinkedMap * groupLinkedMap
Definition doxygen.h:114
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:103
const std::string & str() const
Definition qcstring.h:556
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:176
static RequirementManager & instance()
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:648
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
void clearSubDirs(const Dir &d)
Definition util.cpp:3688
void createSubDirs(const Dir &d)
Definition util.cpp:3661
static void generateXMLForGroup(const GroupDef *gd, TextStream &ti)
Definition xmlgen.cpp:1957
static void generateXMLForClass(const ClassDef *cd, TextStream &ti)
Definition xmlgen.cpp:1464
static void generateXMLForFile(FileDef *fd, TextStream &ti)
Definition xmlgen.cpp:1841
static void generateXMLForNamespace(const NamespaceDef *nd, TextStream &ti)
Definition xmlgen.cpp:1768
static void generateXMLForRequirement(const RequirementIntf *req, TextStream &ti)
Definition xmlgen.cpp:2288
static void generateXMLForModule(const ModuleDef *mod, TextStream &ti)
Definition xmlgen.cpp:1712
static void generateXMLForConcept(const ConceptDef *cd, TextStream &ti)
Definition xmlgen.cpp:1634
static void generateXMLForDir(DirDef *dd, TextStream &ti)
Definition xmlgen.cpp:2027
static void generateXMLForPage(PageDef *pd, TextStream &ti, bool isExample)
Definition xmlgen.cpp:2121
static void writeCombineScript()
Definition xmlgen.cpp:139

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(), generateXMLForRequirement(), ResourceMgr::getAsString(), Doxygen::groupLinkedMap, Doxygen::inputNameLinkedMap, HtmlEntityMapper::instance(), ModuleManager::instance(), RequirementManager::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().