summaryrefslogtreecommitdiffstats
path: root/src/tools/qdoc/generator.cpp
Commit message (Collapse)AuthorAgeFilesLines
* qdoc: Introduce codeprefix & codesuffix, re-introduce codeindentTopi Reinio2015-09-071-1/+4
| | | | | | | | | | | | | | | | | In order to provide acceptable results for styling the documentation for rendering using QTextBrowser (instead of a full browser engine), QDoc needs flexibility in adjusting the generated HTML. This commit introduces and documents codeprefix and codesuffix variables for qdocconf, and re-introduces the once-removed support for codeindent. The default codeindent value is reset to 0. These changes have no effect to the generated output unless the above variables are defined. Change-Id: I6eb40dc0700725622e5a525ef19b5626b3b2b6a5 Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: allow 'void' function parameter without a parameter nameTopi Reinio2015-08-261-0/+1
| | | | | | | | | | | | | There are a few functions using a C-style function declaration: void foo(void); meaning that foo() takes no parameters. This change allows this for QDoc, making it successfully match documented \fn blocks with the correct declaration, and not print out warnings. Change-Id: I8191c55094371431b0e9c2ad22d19cadcb7facfb Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Allow formal parameters in link targetsMartin Smith2015-08-161-9/+9
| | | | | | | | | | | | | | This update allows qdoc to handle \l commands for linking to functions, where the formal parameters are included in the link target. For example, \l {QWidget::find(QString name)} will only match a member function of QWidget that has a single parameter of type QString. The parameter name is not used in the search. Change-Id: I8a31c9a7ed632f12a0e6d8a33cbb5cd361098317 Task-number: QTBUG-47286 Reviewed-by: Martin Smith <martin.smith@digia.com>
* Merge remote-tracking branch 'origin/5.5' into devFrederik Gladhorn2015-08-061-1/+3
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: doc/global/qt-cpp-defines.qdocconf src/3rdparty/forkfd/forkfd.c src/corelib/codecs/qtextcodec.cpp src/corelib/kernel/qmetatype.cpp src/corelib/tools/qset.qdoc src/gui/accessible/qaccessible.cpp src/gui/image/qpixmapcache.cpp src/opengl/qgl.cpp src/tools/qdoc/generator.cpp src/widgets/kernel/qwidget.cpp tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp Change-Id: I4fbe1fa756a54c6843aa75f4ef70a1069ba7b085
| * qdoc: Add images used in examples into .qhpTopi Reinio2015-07-311-1/+3
| | | | | | | | | | | | | | | | | | Images used as resources in examples were missing from the generated .qch files. Change-Id: I7cdfc65b646a418e3de0b22d9a075e9a413aca29 Task-number: QTBUG-46635 Reviewed-by: Martin Smith <martin.smith@digia.com>
* | qdoc: Improve customization of generated html file namesVenugopal Shivashankar2015-07-241-23/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce 'outputsuffixes' QDoc configuration variable, which allows defining a module name suffix inserted into the generated html file names. The suffix can currently be applied to QML and JS documentation. This is useful in cases where we have multiple versions of a module as part of the documentation build, and writing to a common output directory would otherwise result in file name clashes. Change-Id: I1437874fad09f041e506b93b62b6a4a8cae49ec9 Reviewed-by: Martin Smith <martin.smith@digia.com>
* | qdoc: Improve documentation for propertiesMartin Smith2015-06-101-10/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This update changes how qdoc handles getter, setter, resetter, and notifier functions for properties. With this update, if you provide documentation for any of these functions associated with a property, links to that function will go to the documentation for that function, instead of to the associated property. Additionally, the documentation for the function will have a note added, e.g. "Note: Notifier signal for property fubar," where the fubar property name is a link to the documentation for property fubar. Change-Id: I1f821fd4a6c2de142da4718ef3bdde314dc59627 Task-number: QTBUG-45620 Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com> Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* | qdoc: Related non-members are now linked correctlyMartin Smith2015-06-101-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was harder to fix this tan you might think, but the fix cleans up the overload mechanism a lot, so if no regressions are introduced by the fix, the code will be easier to manage. The related non-members are now added to the class node's list of secondary (overload) functions. This way, they get an overload number just like overloaded member functions. Change-Id: I68d7a314b0bb5ec0fbba15dc1fd40a5b870c659d Task-number: QTBUG-46148 Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com> Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* | Documentation: Show an example for each overloaded signalOlivier Goffart2015-05-101-1/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | The new connection syntax is a bit tricky to use, when the signal or the slot is overloaded, because one must explicitly cast to the correct signal type. This patch adds an example to the documentation of each overloaded signal. The example shows how to do the cast to the correct signal type. Change-Id: Ifc9f28d05c2ae126a674d2ca5887935fc59cd83b Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* | Merge remote-tracking branch 'origin/5.5' into devLiang Qi2015-04-271-2/+55
|\| | | | | | | | | | | | | | | Conflicts: src/tools/qdoc/tree.cpp tests/auto/gui/painting/qcolor/tst_qcolor.cpp Change-Id: Iaa78f601a63191fa643aabf853520f913f2f0fdc
| * qdoc: Sanitize anchors in URLs for functionsTopi Reinio2015-04-271-2/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When QDoc constructs the full path to a documentation node, it must construct a clean anchor reference. Intra-page links use a different code path, so the links e.g. from Member Functions list to their detailed descriptions always work, but using the link command to link to functions with certain characters (such as 'operator==') failed because the node name was used as-is and not sanitized ('operator-eq-eq'). This change moves HtmlGenerator::cleanRef() static function to its parent class, Generator, and takes it into use in Generator::fullDocumentLocation(). Change-Id: Ic939ffa3ae0f4495ef2a30eff0d4a1de65ea3e8f Task-number: QTBUG-45629 Reviewed-by: Martin Smith <martin.smith@digia.com>
* | Merge remote-tracking branch 'origin/5.5' into devLiang Qi2015-04-221-2/+19
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/corelib/statemachine/qstatemachine.cpp src/corelib/statemachine/qstatemachine_p.h src/gui/painting/qdrawhelper.cpp src/plugins/platforms/xcb/qxcbnativeinterface.cpp src/plugins/platforms/xcb/qxcbwindow.cpp src/plugins/platforms/xcb/qxcbwindow.h src/testlib/qtestblacklist.cpp src/tools/qdoc/node.cpp src/tools/qdoc/node.h tests/auto/gui/painting/qcolor/tst_qcolor.cpp Change-Id: I6c78b7b162001712d5774293f501b06b4ff32684
| * qdoc: Properly document "private" signalsMartin Smith2015-04-161-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | When a signal declaration is marked with QSignalPrivate, This note is included in its documentation: "Note: This is a private signal. It must not be emitted by the user." For Notifier signals, [see note] is appended to the signature line, and the Note is printed below the list. Change-Id: Ie792894ace56cda47fd9a45af9c732f408ac45f6 Task-number: QTBUG-45535 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
| * qdoc: Don't end sentences with a full stop in requisite tablesTopi Reinio2015-04-151-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | This is a minor visual change that stops QDoc from ending the sentences with a full stop in the tables for class/QML type requisites (Inherits, Inherited by, etc). This ensures a uniform look for the table, as some of the fields were already omitting the full stop. Change-Id: I37b39ed0a5e273b40b24f24602042194d069ed00 Reviewed-by: Martin Smith <martin.smith@digia.com>
* | qdoc: Changing InnerNode to AggregateMartin Smith2015-04-131-18/+18
| | | | | | | | | | | | | | | | An Aggregate node is a tree node that is not a leaf. Change-Id: I4a3964865fb653a217ee75d0b21e563f7f990a1c Task-number: QTBUG-45450 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* | qdoc: More data member name changesMartin Smith2015-04-111-9/+9
| | | | | | | | | | | | | | | | | | | | | | In preparation for refactoring the Node class hierarchy, the names of a few enum types and the functions that set and get them are changed so that they will not be confused with other uses of the word Type. Change-Id: I0496b46e5d7adffccadcb464aedb2806728e781d Task-number: QTBUG-45450 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* | qdoc: Data member name changesMartin Smith2015-04-081-4/+5
| | | | | | | | | | | | | | | | | | | | | | In preparation for refactoring the Node class hierarchy, several data member names and some getter and setter names in the Node hierarchy have been changed to make them more readable. Change-Id: Id76ce21c960e4033673f5cf0684aa70e701957b1 Task-number: QTBUG-45450 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* | qdoc: No longer creates empty subdirectoriesMartin Smith2015-04-071-28/+34
|/ | | | | | | | | | | | qdoc was creating the scripts and used-in-examples subdirectories whether or not there were any scripts or images used in examples. Now qdoc creates these subdirectories only if there is something to put in them. Change-Id: Ied0e1b38ee28973313c68754c821b34edfd5f505 Task-number: QTBUG-44655 Reviewed-by: Topi Reiniö <topi.reinio@digia.com> Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>
* qdoc: No internal qmlabstract types in the "inherited by" listMartin Smith2015-03-271-1/+0
| | | | | | | | | | | This update ensures that there are no internal QML types in a QML type's "inherited by" list. It also fixes a bug that caused the "inherited by" lists to be empty when running qdoc in the single-exec mode. Change-Id: Iee8b9dbcd56a09b7a49ec8a703b5d861f0b1f0ec Task-number: QTBUG-44004 Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Update for classes in namespacesMartin Smith2015-03-271-1/+2
| | | | | | | | | | | | | | | | | | | | The resolving of namespaces across module boundaries was moving all the nodes for elements contained in the namespace into the namespace node for the \namespace command for that namespace. But moving class and namespace nodes is wrong because they are actually in different modules where they should also be output. This update to the fix for the original bug leaves the class and nested namespace nodes where they are but adds them as special "orphan" nodes to the namespace node that has the \namespace command. These orphan nodes are then included in the namespace content list when it is written out. Change-Id: I0eee368ed39f28129b5b43bb4a16963961f53db3 Task-number: QTBUG-44688 Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Remove obsolete stuff from the qdoc manualMartin Smith2015-03-251-1/+0
| | | | | | | | | Remove the \service and \mainclass commands, and the ditamap stuff. Also remove all reverences to these commands from qdoc itself. Change-Id: I8d150acdd56d40e6a4198a021e50f5fe3f3b1194 Task-number: QTBUG-45143 Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Support documentation of JavaScriptMartin Smith2015-02-201-37/+52
| | | | | | | | | | | | | | | | | | | | | This update provides the actual support for documenting JavaScript. It has been tested with JavaScript commands in qdoc comments in .qdoc files but not in .js files. Currently, we have the use case of needing to document JavaScript using qdoc comments in .qdoc files. For each qdoc command for QML, i.e. \qmltype, \qmlproperty, etc, there is now a corresponding JavaScript command, i.e. \jstype, \jsproperty, etc. Some of these might not be needed, but they are all provided. Briefly, document JavaScript in a .qdoc file the same way you would document QML in a .qdoc file, but instead of using the \qmlxxx commands, use \jsxxx commands. Change-Id: Ib68a5f66c16472af87d9f776db162332ca13fbb7 Task-number: QTBUG-43715 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* qdoc: Clear the list of output files during generator initTopi Reinio2015-02-161-0/+1
| | | | | | | | | | | | | QDoc keeps a list of files it generates (or copies) to the output directory, for writing it to a .qhp file later on. In single-exec mode, QDoc processes several qdocconf files without deleting the generator in between. Therefore, we need to clear the list of files whenever the generator is initialized, to avoid duplicating the filenames across multiple .qhp files. Change-Id: Ibc2a6b171466aa1db6cfe3da9a820d5ba2845004 Reviewed-by: Martin Smith <martin.smith@digia.com>
* Update copyright headersJani Heikkinen2015-02-111-7/+7
| | | | | | | | | | | | | | | | | | Qt copyrights are now in The Qt Company, so we could update the source code headers accordingly. In the same go we should also fix the links to point to qt.io. Outdated header.LGPL removed (use header.LGPL21 instead) Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing combination. New header.LGPL-COMM taken in the use file which were using old header.LGPL3 (src/plugins/platforms/android/extract.cpp) Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license combination Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
* qdoc: Change uses of module and qmlModuleMartin Smith2015-02-031-6/+6
| | | | | | | | | | | | | | | | | The uses of moduleName and qmlModuleName are changed to physicalModuleName and logicalModuleName respectively. A few other names are also changed in the same way. These changes are being done both to support documentation of javascript but also to emphasize that moduleName is really the name of the physical library module the entity is part of, and qmlModuleName is really the name of a collection of logical entities that is versionable and that may contain entities located in different physical modules. Change-Id: If49392aabf5950dc7b97c84f8134e9369e76dd1b Task-number: QTBUG-43715 Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Change name of node typeMartin Smith2015-01-221-9/+6
| | | | | | | | | | | | QmlClassNode is renamed to QmlTypeNode. This is done in preparation for implementing qdoc support for documenting javascript code. Next, QmlTypeNode will be renamed to JsTypeNode, and a new QmlTypeNode will be declared that will inherit JsTypeNode. Change-Id: Ia5d0c367d06c26cb43f887927bbcb096afcb7301 Task-number: QTBUG-43715 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* qdoc: Remove support for DITA XMLMartin Smith2015-01-211-1/+0
| | | | | | | | This update makes removes Qdoc's DITA XML generator. Change-Id: Ibcfd013ace00e56a23268a2a5d850e6c9ea093d0 Task-number: QTBUG-43174 Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Fixed broken links for abstract QML typesMartin Smith2015-01-171-0/+1
| | | | | | | | | | | | | | | When a QML base type is abstract, the documentation for its properties is supposed to appear on the reference page for each QML type that inherits the abstract type. And then links to those properties from within the property documentation must refer to the documentation for that property on the reference page for the particular inheriting QML type. These links were dead, but this fix corrects the problem. Change-Id: Icaf01d67edf44567099f5a6a59fd6348de8df380 Task-number: QTBUG-43200 Reviewed-by: Nico Vertriest <nico.vertriest@digia.com> Reviewed-by: Tero Kojo <tero.kojo@digia.com> Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* qdoc: Generate QA pagesMartin Smith2014-10-171-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | qdoc has a new command line option, -write-qa-pages. Using this flag on the command line will tell qdoc to generate a QA html page in each module's output directory. The QA page contains information that is useful for Quality Assurance checking of the module's docs. The QA file name begins with "aaa" so it will always be listed at the top of the output directory. The file name for the QA file for QtCore, for example, is aaa-qtcore-qa-page.html. Currently, the QA page only contains a report listing the intermodule link count for each module that is the target of links from the documented module. The link report can be used to optimize the search order qdoc uses when resolving inter-module links. By default, the search order is the same as the ordering of the modules in the depends list in the .qdocconf file. Using the report, the user can reorder that list according to the number of links found in each module. i.e. in descending order of link count. The modules are listed in descending order of link count. Additionally, an actual depends variable is printed. It can be cut and pasted into the module's qdocconf file. Change-Id: I442596aeb54dcdd5db4a0821096a5273c15627e6 Task-number: QTBUG-41850 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* qdoc: qdoc was too slowMartin Smith2014-10-171-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The hard-coded search order is now removed. The search order is now constructed from the depends variable in the qdocconf file. The basic idea is that qdoc is run once. It gets a list of all the qdocconf files for the modules in Qt5. First, qdoc runs in -prepare mode for each qdocconf file in the list. It generates the index file for each module, but these index files are never used. At the end of the -prepare phase for each module, qdoc keeps the tree structure for the module in a collection of trees. Second, qdoc runs in -generate mode for each qdocconf file in the list. But now it uses the existing tree for that module, so it doesn't have to read the sources files again, and it doesn't have to read any index files. Now it generates the docs for each module. The runtime for qdoc has been reduced by 90% when running qdoc for all of Qt5 on a not so new iMac. Before this update, qdoc took about 10 minutes to generate docs for Qt5. Now it takes a little over 1 minute. The new way to run qdoc is described in the Qt bug report referenced here. Note that running qdoc this new (old) way also generates fewer qdoc errors than when running qdoc the old way. This indicates that the index files qdoc uses when running the old way are incomplete. Note also that the old way of running qdoc is not affected by this update. The old way is still required for running qdoc in the current qmake/make system. That process must be changed to be able to use the faster qdoc. The details are provided in the Qt bug report. Change-Id: Ibec41d6fbaa9fc8cd070a05d04357bd02c4478f0 Task-number: QTBUG-41705 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* Update license headers and add new license filesMatti Paaso2014-09-241-19/+11
| | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 - Removed LICENSE.GPL Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2 Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
* qdoc: Enable listing of example files with .html extensionTopi Reinio2014-08-261-1/+1
| | | | | | | | | | | | | If a (non-external) link string ends in '.html', qdoc assumed it is a direct link to a generated html page. However, it could also refer to an example file with .html extension. This commit fixes a corner case where links to an example file page were broken for such files. Task-number: QTBUG-40831 Change-Id: I31acc141970b6768f0a93964723be82611d37a3d Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* qdoc: Write all generated files to .qhpTopi Reinio2014-08-261-7/+4
| | | | | | | | | | | | | | | | | | | | | When writing the Qt Help Project XML file, QDoc traverses the documentation nodes recursively, adding html filenames for each node to the XML. The logic that QDoc uses for this process is not perfect, and needs to be kept up to date whenever the internal structure of the node tree changes. This often leads to problems where some pages are generated but not added to the .qhp, resulting in missing pages in the offline documentation. This change fixes this problem by having the generator keep track of the created filenames, and passing that to the help project writer. Task-number: QTBUG-40572 Change-Id: Ife60a30724183a2b6dcd2397ea79bfbdc2addd04 Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* qdoc: Remove all collision node stuff from qdocMartin Smith2014-08-221-104/+45
| | | | | | | | | | | | Now that the qdoc link command has ability to tell qdoc which module contains a link target or whether to link to a QML or CPP entity, collision pages should no longer be necessary. In fact, qdoc hasn't been generating any collisions for some time. This task removes all the collision node code from qdoc. Task-number: QTBUG-40506 Change-Id: I34d1980ca1c0fe4bb5ad27dd4b00e61fa7e6e335 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* qdoc: Distinguish between QML property and attached propertyTopi Reinio2014-08-121-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | A recent change in qtdeclarative (60ed6a43) added an attached property 'Window' to Item type, with property names identical to the ones already available in Window. This caused QDoc to report warnings for duplicate documentation for QML properties, because there was no distiction between a QML property and an attached property. This change fixes the issue by: - Allowing identical names for \qmlproperty and \qmlattachedproperty - Using distinct URLs/UUIDs/anchor references for them - Marking attached properties with '[attached]' qualifier in 'All Members' page. This doesn't solve the issue of disambiguating between a similarly named QML property and attached property when linking from an external location. However, these can be solved with the help of the \target command. Task-number: QTBUG-40674 Change-Id: Icc74de237366e9897334689fe354ab83e4af0356 Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
* qdoc: Give documenter more control of linkingMartin Smith2014-06-011-46/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | This update is preparation for implementing the actual task described in the bug. To implement it required converting the QML type node and the QML basic type node to be first order tree nodes instead of subtypes of the documentation node. This cleans up a lot of messy logic in some places. It was also necessary to split the getLink() function in the html output generator into two functions, one still called getLink(), which handles the \l command, and one called qetAutoLink() which is called for generating auto links. This should make qdoc run faster. The basic infrastructure was also added for parsing the string in the square brackets for the \l command. There will be a further update to complete this task. Note that some autolinks might not be generated due to this change. I haven't seen any yet, but I believe there will be some. This can be fixed later, if it is a problem. Task-number: QTBUG-39221 Change-Id: I8135229984398408205ba901b9ef95ceac74683c Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* qdoc: attaching type of attached properties was missingMartin Smith2014-05-021-9/+10
| | | | | | | | | | | | | This bug was probably intoroduced when the QmlPropertyGroup became a first class Node type. Otherwise, there is no way to explain how it worked at all. But now qdoc includes the attaching type. Some debugging code was also cleaned up. Task-number: QTBUG-35559 Change-Id: I478efb7f4356d51015af9f33c893958d4b4ae301 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* qdoc: Simplify config code for reading file pathsTopi Reinio2014-05-021-11/+11
| | | | | | | | | | | | | | | | | | | | This change greatly simplifies the code used for reading paths from config files: near-identical functions Config::getCanonicalPathList() and Config::getPathList() are combined into one, and the use of Config::getCleanPathList() is replaced with the above. Effectively, all paths read from the config files are now converted into canonical ones. It also adds support for absolute paths in config files. Task-number: QTBUG-36193 Change-Id: I2dc1ee6a67a400e056404ec1c09c6e81f643aa77 Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
* qdoc: Unexplained empty ref attributes in qhp filesMartin Smith2014-03-311-4/+6
| | | | | | | | | | | | | | | This update fixes a bug introduced by the extensive changes for QTBUG-35377. Three node subtypes - Group, Module, and QML module, were promoted to be first line node types in the update for QTBUG-35377. This broke the file name construction routine for those node subtypes, which used to have the DocNode node type. This caused empty ref attributes to appear for those keyword elements in the qhp file. The file name construction routine has now been corrected to account for this. Task-number: QTBUG-37658 Change-Id: I307979255fdfd48493b3a4cebaf996b2130bc2c7 Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: fix inheritance information for some QML typesMartin Smith2014-03-311-4/+4
| | | | | | | | | | | | | | | This update fixes a bug introduced by the extensive changes for QTBUG-35377. For a QML base type loaded from an index file, its QML base type was not being resolved. This resulted in the "All members" page for some QML types to be incomplete because the pointer to the base type was 0 when it should have been set. This change also introduces the concept of "just in time" resolution for base type pointers, which appears to speed up qdoc a little. Task-number: QTBUG-37326 Change-Id: I5f09336ec70ba84029b44b245c56f7f8fe349757 Reviewed-by: Martin Smith <martin.smith@digia.com>
* doc: Remove "current child" codeMartin Smith2014-03-311-11/+1
| | | | | | | | | | | | | | | | The current child concept was added to the Name Collision Node to heuristically provide better linking when a link operation reached a collision node. It is doubtful that this improved linking much, but now that qdoc uses multiple trees, it is much less likely that collision nodes will occur. In fact, there are none in in the current Qt5. Therefore, the current child code is hereby removed from qdoc. Task-number: QTBUG-37067 Change-Id: I33aea5d550afb7ceaf941d49112e02c21d44f6dc Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Teach qdoc to use multiple trees (part 3)Martin Smith2014-03-311-13/+53
| | | | | | | | | | | | | | | | | | With this update, qdoc is now ready for testing with multiple trees. In making this change to using multiple trees, it has become clear that qdoc does not really need trees the way it currently uses them. Each C++ class or namespace, or QML type is naturally a tree tree structure, but above that level, what we currently call a tree in qdoc should really be called a collection of maps. This change has moved qdoc in that direction. It remains to replace the Tree class with a class that encapsulates a set of maps, one for each major node type. That can be implemented later. Task-number: QTBUG-35377 Change-Id: I39068a0cb26c01f14ec0e4621742d727efb913bf Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Teach qdoc to use multiple trees (part 2)Martin Smith2014-03-311-6/+10
| | | | | | | | | | | | | | | | | | | qdoc now knows how to search the forrest of node trees in an optimal order. But there remain some problems with specific searches that cross module boundaries. These include group membership and C++ and QML module membership, as well ass C++ base class resolution. Part 3 will be concerned with fixing these remaining bugs. With this update, qdoc now takes less time to generate the docs for Qt 5. Testing indicates that qdoc run time has dropped from about 14 minutes to about 7.5 minutes on an iMac. Task-number: QTBUG-35377 Change-Id: I6bded6ef54124b4f6e5914cad4548f0b600209b0 Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Teach qdoc to use multiple treesMartin Smith2014-03-311-18/+21
| | | | | | | | | | | | | | | | | | | | | | | qdoc now builds a separate Node Tree for each index file it parsed. The main Node Tree now contains only the Nodes of things being documented in the current module. This should make qdoc run a little faster. qdoc now uses these separate trees to make intra-module and inter-module linking more robust by searching the trees in an order that depends on the type of link it is searching for. The tree for the current module is always searched first. Then qdoc searches the trees for either the C++ modules or the QML modules, depending on whether it is looking for a C++ link or a QML link. In preparation for this update, qdoc was also simplified a lot. Many functions became obsolete and were removed. Others were combined. Task-number: QTBUG-35377 Change-Id: Iea4e49869ff6a6ff0f4d53090728770d40d892f3 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* QDoc: Do not warn about a file overwritting while writing to /dev/nullJędrzej Nowacki2014-03-061-1/+1
| | | | | | Change-Id: I7d23edf5a73d521bad361f1007be0750acd4c1e9 Reviewed-by: Topi Reiniö <topi.reinio@digia.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
* qdoc: fix memory leaks, unchecked open(), hardcoded path - in debugging codeDavid Faure2014-02-101-6/+5
| | | | | | | Change-Id: I3b065dd18f60214a858543d062dfb2f0f1dc1b36 Reviewed-by: Laurent Montel <laurent.montel@kdab.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Fix crash in Generator::generateInnerNodeAlbert Astals Cid2014-01-221-5/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using an iterator is not a good idea since the generateInnerNode can end up adding new items to the childrenNode list and thus the iterator becomes invalid Without this patch i was getting this trace in valgrind ==19251== Invalid read of size 8 ==19251== at 0x474350: Generator::generateInnerNode(InnerNode*) (generator.cpp:1018) ==19251== by 0x4A422D: HtmlGenerator::generateTree() (htmlgenerator.cpp:276) ==19251== by 0x4AC369: processQdocconfFile(QString const&) (main.cpp:515) ==19251== by 0x40B894: main (main.cpp:669) ==19251== Address 0x943c1c0 is 0 bytes after a block of size 32 free'd ==19251== at 0x4C2C72E: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19251== by 0x51676F2: QListData::realloc(int) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.2.0) ==19251== by 0x51677EE: QListData::append(int) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.2.0) ==19251== by 0x439BAB: QList<Node*>::append(Node* const&) (qlist.h:533) ==19251== by 0x4B46B3: InnerNode::addChild(Node*) (node.cpp:1262) ==19251== by 0x4B48DC: Node::Node(Node::Type, InnerNode*, QString const&) (node.cpp:179) ==19251== by 0x4B539F: InnerNode::InnerNode(Node::Type, InnerNode*, QString const&) (node.cpp:1193) ==19251== by 0x4B54EB: DocNode::DocNode(InnerNode*, QString const&, Node::SubType, Node::PageType) (node.cpp:1608) ==19251== by 0x4C0C5E: QDocDatabase::findQmlModule(QString const&) (node.h:535) ==19251== by 0x497EEA: HtmlGenerator::generateQmlRequisites(QmlClassNode*, CodeMarker*) (htmlgenerator.cpp:2005) ==19251== by 0x4995B9: HtmlGenerator::generateDocNode(DocNode*, CodeMarker*) (htmlgenerator.cpp:1533) ==19251== by 0x474508: Generator::generateInnerNode(InnerNode*) (generator.cpp:1010) ==19251== by 0x474372: Generator::generateInnerNode(InnerNode*) (generator.cpp:1019) ==19251== by 0x4A422D: HtmlGenerator::generateTree() (htmlgenerator.cpp:276) ==19251== by 0x4AC369: processQdocconfFile(QString const&) (main.cpp:515) ==19251== by 0x40B894: main (main.cpp:669) Change-Id: I7a6ae0a689ea5edddacf7f27f9dce95b26a441df Reviewed-by: Martin Smith <martin.smith@digia.com>
* qdoc: Fix output filenames for QML basic type documentationTopi Reinio2013-12-041-8/+8
| | | | | | | | | | | | | | | qdoc intends to prepend all html files related to QML with a 'qml-' prefix. This doesn't work for basic QML types, as those nodes do not have valid qml module name information. This change fixes the issue by removing the requirement for a qml module name, thereby always using the qml prefix for a qml (basic) type. Task-number: QTBUG-35229 Change-Id: If61572b2dc8a39be08140c37aa59646b88e99b29 Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* qdoc: Fix output file name generation for examplesTopi Reinio2013-11-071-1/+5
| | | | | | | | | | | | | | | | When generating output file names for examples, qdoc prepends a module-specific prefix. Unless already defined, it defaults to the project name defined in .qdocconf file. This leads to wrong prefix being used in some cases - specifically, on pages in qtdoc module listing examples in other modules. This change takes the modulename prefix from the node, and only uses the project name as a fallback. Task-number: QTBUG-34581 Change-Id: Ia0a940cbc05ed819ff36c328cf9c1e30e2c65b5e Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* qdoc: Don't output docs for internal thingsMartin Smith2013-11-011-0/+4
| | | | | | | | | | | | This update to the Generator base class prevents qdoc from writing an html file for anything that is marked \internal if the user has not set the showinternal flag. Task-number: QTBUG-34269 Change-Id: Ia60109d4568447501370bb9d4c1344a48f9b6113 Reviewed-by: Topi Reiniö <topi.reinio@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com> Reviewed-by: Nico Vertriest <nico.vertriest@digia.com>