diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:18:55 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:18:55 (GMT) |
commit | e5fcad302d86d316390c6b0f62759a067313e8a9 (patch) | |
tree | c2afbf6f1066b6ce261f14341cf6d310e5595bc1 /examples/xmlpatterns/xquery/globalVariables | |
download | Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2 |
Long live Qt 4.5!
Diffstat (limited to 'examples/xmlpatterns/xquery/globalVariables')
5 files changed, 259 insertions, 0 deletions
diff --git a/examples/xmlpatterns/xquery/globalVariables/globalVariables.pro b/examples/xmlpatterns/xquery/globalVariables/globalVariables.pro new file mode 100644 index 0000000..8ca900b --- /dev/null +++ b/examples/xmlpatterns/xquery/globalVariables/globalVariables.pro @@ -0,0 +1,9 @@ +# We don't have any C++ files to build, so in order to trick qmake which +# doesn't understand that, we use the subdirs template, but without specifying +# any subdirs. +TEMPLATE = subdirs + +target.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/xquery/globalVariables +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.cpp *.pro *.xq *.html globals.gccxml +sources.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/xquery/globalVariables +INSTALLS += target sources diff --git a/examples/xmlpatterns/xquery/globalVariables/globals.cpp b/examples/xmlpatterns/xquery/globalVariables/globals.cpp new file mode 100644 index 0000000..7ecd9ed --- /dev/null +++ b/examples/xmlpatterns/xquery/globalVariables/globals.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + 1. int mutablePrimitive1; + 2. int mutablePrimitive2; + 3. const int constPrimitive1 = 4; + 4. const int constPrimitive2 = 3; + 5. + 6. class ComplexClass + 7. { + 8. public: + 9. ComplexClass(); +10. ComplexClass(const ComplexClass &); +11. ~ComplexClass(); +12. }; +13. +14. ComplexClass mutableComplex1; +15. ComplexClass mutableComplex2; +16. const ComplexClass constComplex1; +17. const ComplexClass constComplex2; +18. +19. int main() +20. { +22. int localVariable; +23. localVariable = 0; +24. return localVariable; +25. } +//! [0] diff --git a/examples/xmlpatterns/xquery/globalVariables/globals.gccxml b/examples/xmlpatterns/xquery/globalVariables/globals.gccxml new file mode 100644 index 0000000..81bcb22 --- /dev/null +++ b/examples/xmlpatterns/xquery/globalVariables/globals.gccxml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<GCC_XML> + <Namespace id="_1" name="::" members="_3 _4 _5 _6 _7 _8 _9 _10 _11 _12 _13 _14 _15 " mangled="_Z2::"/> + <Namespace id="_2" name="std" context="_1" members="" mangled="_Z3std"/> + <Function id="_3" name="_GLOBAL__D_globals.cppwVRo3a" returns="_16" context="_1" location="f0:14" file="f0" line="14" endline="14"/> + <Function id="_4" name="_GLOBAL__I_globals.cppwVRo3a" returns="_16" context="_1" location="f0:14" file="f0" line="14" endline="14"/> + <Function id="_5" name="__static_initialization_and_destruction_0" returns="_16" context="_1" mangled="_Z41__static_initialization_and_destruction_0ii" location="f0:23" file="f0" line="23" endline="14"> + <Argument name="__initialize_p" type="_17"/> + <Argument name="__priority" type="_17"/> + </Function> + <Function id="_6" name="main" returns="_17" context="_1" location="f0:20" file="f0" line="20" endline="24"/> + <Variable id="_7" name="constComplex2" type="_11c" context="_1" location="f0:17" file="f0" line="17"/> + <Variable id="_8" name="constComplex1" type="_11c" context="_1" location="f0:16" file="f0" line="16"/> + <Variable id="_9" name="mutableComplex2" type="_11" context="_1" location="f0:15" file="f0" line="15"/> + <Variable id="_10" name="mutableComplex1" type="_11" context="_1" location="f0:14" file="f0" line="14"/> + <Class id="_11" name="ComplexClass" context="_1" mangled="12ComplexClass" location="f0:7" file="f0" line="7" members="_19 _20 _21 " bases=""/> + <Variable id="_12" name="constPrimitive2" type="_17c" init="3" context="_1" location="f0:4" file="f0" line="4"/> + <Variable id="_13" name="constPrimitive1" type="_17c" init="4" context="_1" location="f0:3" file="f0" line="3"/> + <Variable id="_14" name="mutablePrimitive2" type="_17" context="_1" location="f0:2" file="f0" line="2"/> + <Variable id="_15" name="mutablePrimitive1" type="_17" context="_1" location="f0:1" file="f0" line="1"/> + <FundamentalType id="_16" name="void"/> + <FundamentalType id="_17" name="int"/> + <CvQualifiedType id="_11c" type="_11" const="1"/> + <Constructor id="_19" name="ComplexClass" context="_11" mangled="_ZN12ComplexClassC1Ev *INTERNAL* " location="f0:9" file="f0" line="9" extern="1"/> + <Constructor id="_20" name="ComplexClass" context="_11" mangled="_ZN12ComplexClassC1ERKS_ *INTERNAL* " location="f0:10" file="f0" line="10" extern="1"> + <Argument type="_23"/> + </Constructor> + <Destructor id="_21" name="ComplexClass" context="_11" mangled="_ZN12ComplexClassD1Ev *INTERNAL* " location="f0:11" file="f0" line="11" extern="1"> + </Destructor> + <CvQualifiedType id="_17c" type="_17" const="1"/> + <ReferenceType id="_23" type="_11c"/> + <File id="f0" name="globals.cpp"/> +</GCC_XML> diff --git a/examples/xmlpatterns/xquery/globalVariables/globals.html b/examples/xmlpatterns/xquery/globalVariables/globals.html new file mode 100644 index 0000000..d8affc8 --- /dev/null +++ b/examples/xmlpatterns/xquery/globalVariables/globals.html @@ -0,0 +1,40 @@ +<html xmlns="http://www.w3.org/1999/xhtml/" xml:lang="en" lang="en"> + <head> + <title>Global variables report for globals.gccxml</title> + </head> + <style type="text/css"> + .details + { + text-align: center; + font-size: 80%; + color: blue + } + .variableName + { + font-family: courier; + color: blue + } + </style> + <body> + <p class="details">Start report: 2008-12-16T13:43:49.65Z</p> + <p>Global variables with complex types:</p> + <ol> + <li> + <span class="variableName">mutableComplex1</span> in globals.cpp at line 14</li> + <li> + <span class="variableName">mutableComplex2</span> in globals.cpp at line 15</li> + <li> + <span class="variableName">constComplex1</span> in globals.cpp at line 16</li> + <li> + <span class="variableName">constComplex2</span> in globals.cpp at line 17</li> + </ol> + <p>Mutable global variables with primitives types:</p> + <ol> + <li> + <span class="variableName">mutablePrimitive1</span> in globals.cpp at line 1</li> + <li> + <span class="variableName">mutablePrimitive2</span> in globals.cpp at line 2</li> + </ol> + <p class="details">End report: 2008-12-16T13:43:49.65Z</p> + </body> +</html> diff --git a/examples/xmlpatterns/xquery/globalVariables/reportGlobals.xq b/examples/xmlpatterns/xquery/globalVariables/reportGlobals.xq new file mode 100644 index 0000000..026679d --- /dev/null +++ b/examples/xmlpatterns/xquery/globalVariables/reportGlobals.xq @@ -0,0 +1,110 @@ +(: + This XQuery loads a GCC-XML file and reports the locations of all + global variables in the original C++ source. To run the query, + use the command line: + + xmlpatterns reportGlobals.xq -param fileToOpen=globals.gccxml -output globals.html + + "fileToOpen=globals.gccxml" binds the file name "globals.gccxml" + to the variable "fileToOpen" declared and used below. +:) + +declare variable $fileToOpen as xs:anyURI external; +declare variable $inDoc as document-node() := doc($fileToOpen); + +(: + This function determines whether the typeId is a complex type, + e.g. QString. We only check whether it's a class. To be strictly + correct, we should check whether the class has a non-synthesized + constructor. We accept both mutable and const types. +:) +declare function local:isComplexType($typeID as xs:string) as xs:boolean +{ + exists($inDoc/GCC_XML/Class[@id = $typeID]) + or + exists($inDoc/GCC_XML/Class[@id = $inDoc/GCC_XML/CvQualifiedType[@id = $typeID]/@type]) +}; + +(: + This function determines whether the typeId is a primitive type. +:) +declare function local:isPrimitive($typeId as xs:string) as xs:boolean +{ + exists($inDoc/GCC_XML/FundamentalType[@id = $typeId]) +}; + +(: + This function constructs a line for the report. The line contains + a variable name, the source file, and the line number. +:) +declare function local:location($block as element()) as xs:string +{ + concat($inDoc/GCC_XML/File[@id = $block/@file]/@name, " at line ", $block/@line) +}; + +(: + This function generates the report. Note that it is called once + in the <body> element of the <html> output. + + It ignores const variables of simple types but reports all others. +:) +declare function local:report() as element()+ +{ + let $complexVariables as element(Variable)* := $inDoc/GCC_XML/Variable[local:isComplexType(@type)] + return if (exists($complexVariables)) + then (<p xmlns="http://www.w3.org/1999/xhtml/">Global variables with complex types:</p>, + <ol xmlns="http://www.w3.org/1999/xhtml/"> + { + (: For each Variable in $complexVariables... :) + $complexVariables/<li><span class="variableName">{string(@name)}</span> in {local:location(.)}</li> + } + </ol>) + else <p xmlns="http://www.w3.org/1999/xhtml/">No complex global variables found.</p> + + , + + let $primitiveVariables as element(Variable)+ := $inDoc/GCC_XML/Variable[local:isPrimitive(@type)] + return if (exists($primitiveVariables)) + then (<p xmlns="http://www.w3.org/1999/xhtml/">Mutable global variables with primitives types:</p>, + <ol xmlns="http://www.w3.org/1999/xhtml/"> + { + (: For each Variable in $complexVariables... :) + $primitiveVariables/<li><span class="variableName">{string(@name)}</span> in {local:location(.)}</li> + } + </ol>) + else <p xmlns="http://www.w3.org/1999/xhtml/">No mutable primitive global variables found.</p> +}; + +(: + This is where the <html> report is output. First + there is some style stuff, then the <body> element, + which contains the call to the \c{local:report()} + declared above. +:) +<html xmlns="http://www.w3.org/1999/xhtml/" xml:lang="en" lang="en"> + <head> + <title>Global variables report for {$fileToOpen}</title> + </head> + <style type="text/css"> + .details + {{ + text-align: left; + font-size: 80%; + color: blue + }} + .variableName + {{ + font-family: courier; + color: blue + }} + </style> + + <body> + <p class="details">Start report: {current-dateTime()}</p> + { + local:report() + } + <p class="details">End report: {current-dateTime()}</p> + </body> + +</html> |