summaryrefslogtreecommitdiff
path: root/src/qdoc/xmlgenerator.cpp
Commit message (Collapse)AuthorAgeFilesLines
* QDoc: Move QDoc source files under a further "qdoc" directoryLuca Di Sera2023-04-121-493/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QDoc development under the "qttools" repository is currently performed under the "src/qdoc" directory, which contains all source files and directories relevant to QDoc as direct children. Due to a slow restructuring of how QDoc works, what its dependencies are and certain possible architectural changes, the infrastructure that is expected to be required for the development of QDoc might increase. Some of that infrastructure, which might require some custom effort, is expected to be developed as "independent" "library-like" sub-projects, which QDoc depends on. Albeit developed "independently", such infrastructure would be developed specifically for QDoc and thus should live "adjacent" to it. To allow such a structure a new "qdoc" directory was added under the "src/qdoc" directory. All source files and directory that were previously children of the "src/qdoc" directory were moved under the new "qdoc" directory. This preserves the space for QDoc-related elements and the relative project structure while allowing some space for "adjacent" projects that are intended for QDoc specifically. To support the change, a new "CMakeLists.txt" file was introduced under "src/qdoc", which dispatches to the "CMakeLists.txt" file in the new "src/qdoc/qdoc" directory. QDoc is only built when certain dependencies are found. This is supported through the use of Qt features at the CMake level. The "CMakeLists.txt" file in "src", thus dispatched to the "src/qdoc" directory only when the required features were found. As "independent", "library-like", entities might not have the same requirements as QDoc, the "CMakeLists.txt" file in "src" was modified to always dispatch to the "src/qdoc" directory while the features-check was moved to the new "CMakeLists.txt" files in "src/qdoc", so as to allow non-QDoc but QDoc-specific project to have an independent configuration for building. Certain test projects in "test/auto/qdoc/" depends on QDoc-specific source-files to generate their CMake targets. Those dependencies were generally specified as relative paths. The additional level in the directory structure invalidated the paths and, hence, the relevant "CMakeLists.txt" files for those projects were modified to correctly refer to the new directory structure. Change-Id: I50c7106614428753544eaba5091e1e44d48fd31d Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* In ATOM_LIST_VALUE, don't generate two columns when only one is filledThibaut Cuvelier2022-11-041-0/+21
| | | | | | | | | | The DocBook file is not valid in this case. HTML is not nice to see either (like in https://doc.qt.io/qt-6/qtquickcontrols2-material.html): a column is empty. This doesn't fix the HTML output, though. Change-Id: I5c3c6ce4caeeabf1bea959aad4e8269204d41b60 Reviewed-by: Topi Reiniö <topi.reinio@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* QDoc: Remove unfinished support for documenting javascriptLuca Di Sera2022-09-071-11/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The codebase for QDoc has support for commands related to documenting pure javascript codebases. Generally, given a certain QML specific command, a javascript equivalent is provided. For example, "\jstype" or "\jsmodule". Codewise, the support is bolted on by reusing the exact same code that is used for QML types. The internal structures used to represent QML elements, like `QmlPropertyNode`, were reused for javascript elements, with the sole difference of changing the metaness value, for elements where the metaness is meaningful, and the internal type tag of the node. Code that branched specifically with QML types was modified to branch for javascript types too, with mostly no other difference in the branched code itself. The support for javascript was never finalized, albeit it is supposed to work, lacking, for example, representation in the documentation. As a consequence of this it is not currently used, tested or necessary. Hence, the code supporting the documentation of javascript elements is now removed as dead code. Anything referring to javascript specific elements were removed, from the commands definitions to the categorization functions. "Node::changeType" and "FunctionNode::changeMetaness", that switched the type and metaness, respectively, of an existing node with a new one, albeit implemented in a more general fashion, are now removed as dead code, since they were used specifically to "convert" Qml nodes to "javascript nodes". References to javascript were removed in the documentation for QDoc. Do note that not all javascript related features were removed from the codebase. In particular, the "js" and "endjs" commands, to mark a codeblock as being javascript code, and their supporting code such as `JsCodeMarker`, were currently retained as, albeit no documentation exists, are currently used a couple of time in the current Qt's codebase. The remaining javascript specific code is expected to be addressed and removed in a future commit, unless the current usages are specific enough that they cannot be replaced with qml specific commands. Task-number: QTBUG-106275 Change-Id: I6a199ce97b26d6a3a645c0022e599a8654989a85 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* qdoc: Store BINDABLE property members into PropertyNodeTopi Reinio2022-08-231-1/+1
| | | | | | | | | | | | | | | | | | | | QDoc already recognized the BINDABLE attribute of Q_PROPERTY but did not store the name of the associated member. Store it in the list of a PropertyNode's access functions. This information will be useful later when deciding on whether to generate a warning for missing member functions; functions that are associated with properties can be left undocumented if the property itself is documented. Add a static helper function PropertyNode that returns the names of property access function roles. This is used when writing the access functions into an .index file. Convert access function-related enums to enum classes. Change-Id: Idd59622a965895883acf3ae297297ba3f3cca20e Reviewed-by: Luca Di Sera <luca.disera@qt.io>
* Use registerRef to ensure xml:id validity and unicityThibaut Cuvelier2022-08-221-2/+2
| | | | | | | | | | | | | | | | | | | | Before this change, invalid xml:id were generated: - duplicates (several tags having the same xml:id -- not several ones pointing at the same ID, which is fine) - invalid characters (mostly spaces) - IDs not starting with a letter or an underscore (in particular, digits are not allowed in XML) - colons in IDs. Only few occurrences of this problem: - https://doc.qt.io/qt-6/qglobalstatic.html#operator-QGlobalStatic::Type--2a - https://doc.qt.io/qt-6/qflags.html#operator-QFlags::Int A flag controls the changes that are applied on IDs, so that there should be no changes for HTML IDs (very lax). Furthermore, stop using registerRef when it is not needed and clear the set of generated xml:id for each new document. Pick-to: 6.4 Change-Id: I53b08ae884a4e360ff4287fd486e24fb17b3deb2 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Topi Reiniö <topi.reinio@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Fix a common mistake when setting table sizeThibaut Cuvelier2022-08-111-1/+15
| | | | | | | | | | | | Wrong: \table 100 % Right: \table 100% Parse the first one as if it was the second, with some defense. Change-Id: I418c13c633ec474b5fc689aa9826bc1406a04c6b Pick-to: 6.4 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Improve documentation for XmlGenerator::registerRefThibaut Cuvelier2022-08-091-4/+6
| | | | | Change-Id: Ib6b4286425fe76c3e8065c6d25edd3475ac2957d Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* QDoc: prefer std::pair over QPairPaul Wicking2022-08-091-8/+8
| | | | | | | | | | | Following the replacement in DocBookGenerator, replace the use of QPair with std::pair across QDoc's code base for consistency. Pick-to: 6.4 Change-Id: I2fc9f5f730a1bc570133b07d9eabad56d27ed9e8 Reviewed-by: Luca Di Sera <luca.disera@qt.io> Reviewed-by: Thibaut Cuvelier <cuvelier.thibaut@gmail.com>
* Use SPDX license identifiersLucie Gérard2022-05-191-28/+3
| | | | | | | | | | | Replace the current license disclaimer in files by a SPDX-License-Identifier. Files that have to be modified by hand are modified. License files are organized under LICENSES directory. Task-number: QTBUG-67283 Change-Id: I5335388c0472b0ee554234fc7eca60769e504660 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* QDoc: Apply the FileResolver abstraction to the codeLuca Di Sera2022-05-101-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The recently added `FileResolver` abstraction encapsulate the logic that QDoc uses for finding user-provided files in the documentation that QDoc will need to interface with. Previously, this process was mostly contained in `Doc::resolve_file`. This was considered problematic as `Doc` is an extremely complex class with many responsibilities, coupling the logic with many unrequired preconditions and making testing of this simple logic almost unattainable. Furthermore, a similar logic in QDoc was provided by `Config::findFile`, which was sometimes used instead of `Doc::resolveFile`, fracturing the behavior of the code. To avoid those issues, allow for the testing of the logic for file resolution and to generally simplify the code and make it more consistent, `Doc::resolveFile` was removed and substituted with the `FileResolver` abstraction. A few changes were made to support this new idiom. - An instance of `FileResolver` is now built in `processQdocconfFile` and passed as a reference to systems that require it during construction. A small exception was made for `DocParser` where the instance is passed as a pointer through `DocParser::initialize` to support the current code structure. The required changes to the relevant entities constructors were made to allow for this. - `FileResolver` is provided as an explicit dependency to anything that requires the capability of resolving files, such as generators. Generally during construction. This is intended as a first step in removing the intitialize-terminate idiom, reducing the scope of some of the mutable state and increasing the expliciteness of its provenance. To allow for this, the main routing of QDoc was modified to construct the Generators classes during the production of the documentation in `processQdocconfFile`. This was required as an initialized `FileResolver` is needed for the generators to work. As `FileResolver` instead depends on a parsed configuration, it was not possible anymore to construct the generator once before doing anything else. A small defensive addition to `Generator::terminate` was added, removing all generators from the list of generators. This should not actually be required, but it was added to ensure that the now more limited scope of the generators and the possibility that they would be constructed more than once would not collide with their broader, unrequired global scope. - To take into account the simplified data requirements for `FileResolver`, compared to the previous logic, such the usage of a single list of directories, the extraction of relevant values from the configuration in `processQdocconfFile` was modified to further mold the data into a suitable format for `FileResolver`. - As the data is relevant to searching directories is contained within the `FileResolver` instance that underlying systems use and does not require any processing to be retrieved, some of the caching members in, for example, `Generator` that contained a reference to this data were removed. See, for example, `Generator::s_exampleDirs`. As a consequence of all those changes, `Generator::augmentImageDirs` and `Generator::setImageFileExtensions` were removed as unused. - `Generator::generateExampleFilePage`, was modified from having two overload to a single method with a default argument to reduce the bloat. - `Generator::addImageToCopy` was modified to use a `ResolvedFile`. The method copies an image from the examples to the output directory. This should be done only when the image is available. - Places where `Doc::resolveFile` were called were modified to use `FileResolver::resolve`. Due to this change some underlying methods were modified to require a `ResolvedFile`. `Doc::resolveFile` was removed as a consequence. - `Doc::quoteFromFile`, which previously depended on `Doc::ResolveFile`, was modified to require a `ResolvedFile`. This lightens the responsibility of the method to quoting only, instead of finding the file and quoting, ensuring that it is called only when the quoting can actually happen. Furthermore, it removes the need for some of the error reporting which is bubbled up to the caller during file resolution. This was further required to avoid having `Doc` require a `FileResolver` instance, as `Doc`'s constructor is called in many places. - The usage of a `userFriendlyFilePath` was removed from code using `Config::findFile`. A run of QDoc on the current documentation shows that `userFrinedlyFilePath` is always equal to the original path that was passed to find file except in two cases where `userFriendlyFilePath` would be null. Consumer code didn't seem to make any use of the null state of the `userFriendlyFilePath` and ignoring it doesn't seem to change the output documentation, such that it was considered safe to avoid. It is currently unclear what the original purpose of this element was. As `Doc::resolveFile` implicitly used `Config::findFile` and exposed back the `userFriendlyFilePath`, this is true for all replaced usages of the method too, which allowed ignoring the element in the first place. - A now unused overload of `Config::findFile` taking a series of extensions for the searched for file was removed. - `Config::copyFile` was modified to remove some of the processing done to its input parameters which is now unused. A simplified version of it was retained to handle a known case that is actually used by the code. - `DocParser` was modified to internally make use of `FileResolver` for when resolving files for quoting and some code handling. It previously used a mix of `Doc::quoteFromFile` and its internal `quoteFromFile`. The usages were made consistent depending only on the internal `quoteFromFile`. `quoteFromFile` itself was further changed to take into account the changes in `Doc::quoteFromFile`, now resolving the file itself. - Some of the code was littered with TODO and REMARK comments to keep track of things that were noticed during the change that will not be addressed at this point in time. Change-Id: Ifb2e03696f6de64dac54470f7a969d323a88c0a7 Task-number: QTBUG-100381 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* Rename QML basic types to value typesUlf Hermann2022-01-181-1/+1
| | | | | | | | | | | | | | Internally they've been called value types for a long time and they are not really basic. [ChangeLog][qdoc] QML value types are now marked with the \qmlvaluetype directive, rather than \qmlbasictype. \qmlbasictype still works but is deprecated. So far, all value types are hardcoded into the QML engine, making the directive irrelevant for user projects. This will change. Change-Id: I915ea0388e1de4c18911f7e81ba29559ebf33cb7 Reviewed-by: Kai Koehne <kai.koehne@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
* qdoc: Improve link text formattingTopi Reinio2021-11-031-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QDoc attempts to style links to C++ functions in a specific way, by moving function arguments and the enclosing parentheses out of the link. This was done in a way that had unintended consequences for all link texts that included an opening parenthesis, whether the link target was a function or not. As a fix; * Increase the specificity of the regular expression used for identifying a function-like link text. * Store the Node we're linking to in generator, so we can match the regular expression only to function targets, not all links. This is also a performance improvement. * DocParser: Stop generating AutoLink atoms inside an open (explicit) link. This was useless as it split the input into multiple nested link->autolink atoms, and the nested ones are discarded/treated as strings in the generator anyway. * Refactor related generator functions and remove obsolete debugging code. Pick-to: 6.2 Task-number: QTBUG-97949 Change-Id: I89429a73f13aa9995a79dfd24a8e473c620d6bc6 Done-with: Luca Di Sera <luca.disera@qt.io> Reviewed-by: Luca Di Sera <luca.disera@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* qdoc: Fix assert on empty link targetTopi Reinio2021-10-181-0/+4
| | | | | | | | | Pick-to: 6.2 5.15 Fixes: QTBUG-97562 Change-Id: I9e2b2b3979f9c0ca22f23a1a5fef5296b2a34a00 Done-with: Luca Di Sera <luca.disera@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Luca Di Sera <luca.disera@qt.io>
* qdoc: Stop documenting ignored nodesTopi Reinio2021-06-171-4/+6
| | | | | | | | | | | | | | | | | | | | | | | There were multiple locations in the code where QDoc still generated links to nodes that were marked with \internal or \dontdocument, or generated lists that included entries (with links to non-existing files) representing these nodes. * Set an empty (but non-null) url for ignored nodes. This also speeds up searching for link targets as nodes can be dismissed early based on their url(). * Use Node::isDontDocument() as a conditional in Node::isInAPI(), and filter CollectionNode's members based on the latter - this removes ignored classes/functions from module pages and group listings. * Fix TagFileWriter to drop ignored nodes. Pick-to: 6.2 6.1 Fixes: QTBUG-94555 Change-Id: Icab05f7aa78e455c15ce097b9f99f5fce7267d3f Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* QDoc: Code cleanupPaul Wicking2021-05-031-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Use multiple arguments for QStrings instead of calling .arg() multiple times. * Define trivial constructor/destructor '= default' instead of adding empty implementations. * Remove unreachable code. * Prefer ranged-based for loops. * Initialize with auto from static_cast<>() and new. * Simplify expressions. * Prefer "QList::empty()" over "QList::size() > 0". * Remove unused method. * Return qsizetype instead of int to avoid narrowing conversion. * Remove unused include. * Remove unreachable return statement. * Prefer raw string literals over escaped regexes. * Initialize struct members. * Make variables used as const refs const refs. * Use std::move instead of passing const ref in ctor. * Drop redundant 'virtual' from methods marked 'override'. * Make local copies that arent ever modified const refs to avoid copying. * Turn for-loop into std::any_of. * Made single-argument constructor explicit. * Don't shadow variable names from outer scope if not necessary. * Remove const at top level that does not improve const correctness. * Update copyright notice for affected classes. Task-number: QTBUG-71176 Change-Id: Ia41e5b947b72f594b60d189b6b0ff68587c3afb9 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* qdoc: Stop auto-linking to section titlesTopi Reinio2021-03-221-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | The purpose of the auto-linking feature is to link strings in the text that resemble class or function names to API reference. However, QDoc did not discriminate between the types of the resolved link targets. Therefore, writing \section1 QString on a random \page would potentially redirect all autolinks to QString to that section. To fix, turn Node::Genus into attributes so we can do bitwise operations on the genus, and introduce Node::API that includes all API reference node genera. Node::API is not assigned to nodes directly, but is used in searches to match against any API reference nodes. Pick-to: 6.0 6.1 Task-number: QTBUG-91141 Change-Id: Ic0a22b7105e1278662f5ae7d4132980200638225 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* qdoc: Fix linking to property groupsTopi Reinio2020-11-111-4/+4
| | | | | | | | | Only the members of a property group were written to .index, not the group itself; this made cross-module linking to the group fail. Fixes: QTBUG-88386 Change-Id: I096a2bbdd2b0af00c4d0e9a6974b6dc7dce075a2 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* qdoc: Unify generated documentation between \typedef and \typealiasTopi Reinio2020-11-091-7/+6
| | | | | | | | | | | | | | | | | | | | | | | | \typedef can be used as a substitute for \typealias for documenting aliases. Since they are identical in terms of usage, unify also the way they are documented: - Remove 'typedef' and '(alias)' from both the summary and details sections, making both appear as types. - Remove automatically generated 'This is a type alias for ...' note for type aliases. This typically resulted in duplicate statements. - Use '-typedef' anchor suffix for both. - Use 'typedef' as element for both in .index files and webxml output format. - Add template parameters for type aliases for DocBook generator; these were previously missing. Fixes: QTBUG-87622 Change-Id: I93986a2dc91c3c3dff9e21f5bf5cf19d0b55c4df Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* qdoc: Align group page heading sizes with other pagesTor Arne Vestbø2020-10-141-0/+1
| | | | | | | | The documentation for a group should have the same header sizes as other pages with similar level in the hierarchy. Change-Id: I17f0a3a02b14f6300c66d016450710309caf4e67 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* qdoc: Respect --nolinkerrors when generating warningsTopi Reinio2020-06-151-1/+1
| | | | | | | | | | | | | | | There were multiple instances where QDoc still generated warnings for linking issues even with --nolinkerrors command line option or QDOC_NOLINKERRORS env. variable set. With linking errors disabled, disable warnings also for failures to locate index files; this is required to eliminate false positives when testing documentation builds in the CI as we won't have any .index files available during integration. Task-number: QTBUG-78069 Change-Id: Ib8b9bcbc3f9c3cf31f93f97254ab109d0f5ed22b Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* QDoc: Clean up members in GeneratorPaul Wicking2020-06-051-1/+1
| | | | | | | | | | * Prefer m_ prefix over _ suffix for consistency. * Ensure members are initialized in header. Coverity-Id: 11492 Task-number: QTBUG-79116 Change-Id: I43e5c531e902d27ab5c682fb40b16f4312012fda Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* QDoc: Extract ExampleNode from NodePaul Wicking2020-06-041-0/+1
| | | | | | Task-number: QTBUG-84578 Change-Id: Ieae12d5a75c89470165759fb92c79897d9ad910c Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* QDoc: Extract EnumNode from NodePaul Wicking2020-06-041-0/+1
| | | | | | Task-number: QTBUG-84578 Change-Id: I06f0f91677adc5f0673b1eba414b131def101601 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* QDoc: Extract TypedefNode from NodePaul Wicking2020-06-041-0/+1
| | | | | | Task-number: QTBUG-84578 Change-Id: I8fbe13faefd918b616f8d0d4bc08077a880b6194 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* QDoc: Extract FunctionNode from NodePaul Wicking2020-06-041-0/+2
| | | | | | Task-number: QTBUG-84578 Change-Id: I5967054a1c802ac6daf2622dcd4e4c8c4b3977ac Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* QDoc: Drop half-baked translation effortPaul Wicking2020-06-041-2/+3
| | | | | | | | | | | | | | The current implementation suffers from lack of maintenance. This causes a poor user experience that adds little value, or is even detrimental to perceived value. Work to improve the situation would have to be done at the expense of something else. This patch removes the Q_DECLARE_TR_FUNCTIONS macros from QDoc, and replaces calls to tr() with QStringLiteral(). Fixes: QTBUG-84568 Change-Id: I2df71c27246ca5de816608c887cf359db8f85900 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* Merge remote-tracking branch 'origin/5.15' into devTopi Reinio2020-05-291-0/+6
|\ | | | | | | Change-Id: I8c1fc05462e1b99b16d52e4f43b2b4b1aa645152
| * qdoc: properly implement \typealias commandTopi Reinio2020-04-231-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \typealias was already a command recognized by QDoc, but it was simply treated as a synonym for \typedef and was not documented. Implement proper support for the command: - Add [alias] designation both in type summary and details. - Auto-generate information about the aliased type, including a link if aliasing a public, documented type. - Auto-convert aliases documented with \typedef to type aliases. - Add basic support for aliases also to DocBook and WebXML generators. - Document \typealias. Fixes: QTBUG-82712 Change-Id: Iafa8c7def0a7488d7521fbc2862290a9bb3167ff Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* | QDoc: Cleanup in xmlgeneratorPaul Wicking2020-05-281-7/+3
|/ | | | | | | | | | | * Do not const qualify return type when returning by value. * Remove nullptr checks following nullptr check that returns the method. * Remove unnecessary comment that states the file's name. Task-number: QTBUG-71176 Change-Id: I029bdb3726d60c3ff64c596854acf31dca9c7036 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* clang-format QDocPaul Wicking2019-12-171-27/+18
| | | | | | | | | | | | | | | | This patch is the result of formatting all of QDoc's source with clang-format. The clang-format style is from the qt5 super repo's _clang-format definition. The purpose is unify the style across the code, to avoid spending too much time on style related issues in reviews and cleanup patches. Future changes to QDoc can benefit from using git-clang-format in combination with the git commit hook provided in qtrepotools.git as mentioned in this email to the dev list: https://lists.qt-project.org/pipermail/development/2019-October/037682.html Change-Id: I8af6a051c8334b5f35862a4dcd3becce8ac500c2 Reviewed-by: Martin Smith <martin.smith@qt.io>
* Introduce XmlGenerator to merge common functions for outputsThibaut Cuvelier2019-12-021-0/+478
HTML, WebXML, and the future DocBook output Fixes: QTBUG-80100 Change-Id: Idf373e3b1d76ab808597dcabd8649ecb5e2df0f7 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>