Home · All Namespaces · All Classes · Main Classes · Grouped Classes · Modules · Functions

reportGlobals.xq Example File
xmlpatterns/xquery/globalVariables/reportGlobals.xq

 (:
     This query opens a C++ GCC-XML output file, and outputs a report describing the use
     of globals variables.

     Run it, by invoking:

     xmlpatterns reportGlobals.xq -param fileToOpen=globals.gccxml -output globals.html

     "fileToOpen=globals.gccxml" binds the string "globals.gccxml" to the variable
     "fileToOpen." It identifies the GCC-XML file to open.

 :)
 declare variable $fileToOpen as xs:anyURI external;
 declare variable $inDoc as document-node() := doc($fileToOpen);

 (: Determines whether the type by ID @p typeId is a complex type such as QString. :)
 declare function local:isComplexType($typeID as xs:string) as xs:boolean
 {
     (: We're being a bit crude here and only checks whether it's a class. We
        actually should check whether it has non-synthesized,
         constructors, I believe. :)

     exists($inDoc/GCC_XML/Class[@id = $typeID])
     or
     (: We also want const-qualified variables. :)
     exists($inDoc/GCC_XML/Class[@id = $inDoc/GCC_XML/CvQualifiedType[@id = $typeID]/@type])
 };

 declare function local:isPrimitive($typeId as xs:string) as xs:boolean
 {
     exists($inDoc/GCC_XML/FundamentalType[@id = $typeId])
 };

 (: Returns a string for human consumption that describes
    the location of @p block. :)
 declare function local:location($block as element()) as xs:string
 {
     concat($inDoc/GCC_XML/File[@id = $block/@file]/@name, " at line ", $block/@line)
 };

 declare function local:report() as element()+
 {
             let $complexVariables as element(Variable)* := $inDoc/GCC_XML/Variable[local:isComplexType(@type)]
             return if(exists($complexVariables)) (: Is the length larger than zero? :)

                    then (<p xmlns="http://www.w3.org/1999/xhtml/">The following global, complex variables were found:</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 global variables that are of complex types were found.</p>

             ,

             (: List primitive, mutable types. :)
             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/">The following mutable primitives were found:</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 global variables that are mutable primitives were found.</p>
 };

 <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: center;
             font-size: 80%;
             color: gray
         }}
         .variableName
         {{
             font-family: courier
         }}
     </style>

     <body>
         {
             (: We don't want simple types that are const, but all other types.
                One could frown upon const integers and say enums should be used instead, but
                let's be gentle. :)

             local:report()
         }

         <p class="details">This report was generated on {current-dateTime()}</p>
     </body>

 </html>


Copyright © 2008 Nokia Trademarks
Qt 4.4.3