<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.simply-life.net/cheetah"  xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>ChEeTaH&#039;s blog</title>
 <link>http://www.simply-life.net/cheetah/blogs/cheetah</link>
 <description></description>
 <language>en</language>
<item>
 <title>RTL XL Direct Links</title>
 <link>http://www.simply-life.net/cheetah/blog/2011-03-12/rtl-xl-direct-links</link>
 <description>&lt;p&gt;Dutch (well, officially it&#039;s based in Luxembourgish) TV station RTL has a platform called RTL XL. On this platform they publish their videos. With all the current events in the world, it&#039;s nice to sometimes be able to watch their videos. Unfortunately, RTL XL insists on using Silverlight, even though not all videos are crippled with DRM. Especially the news videos are - thankfully - DRM-free. Still: Silverlight - or Moonlight - on Linux is somewhat troublesome...&lt;/p&gt;
&lt;!--break--&gt;&lt;!--break--&gt;&lt;p&gt;Dutch (well, officially it&#039;s based in Luxembourg) TV station RTL has a platform called RTL XL. On this platform they publish their videos. With all the current events in the world, it&#039;s nice to sometimes be able to watch their videos. Unfortunately, RTL XL insists on using Silverlight, even though not all videos are crippled with DRM. Especially the news videos are - thankfully - DRM-free. Still: Silverlight - or Moonlight - on Linux is somewhat troublesome.&lt;/p&gt;
&lt;p&gt;So I wanted to be able to view those videos without having to install Moonlight on my Linux systems. After a bit of coding, I am now able to get the direct links to videos on RTL.nl and RTL XL. The videos can then be streamed using e.g. &lt;a href=&quot;http://www.videolan.org/&quot;&gt;VLC&lt;/a&gt; or &lt;a href=&quot;http://www.mplayer.org&quot;&gt;MPlayer&lt;/a&gt;. All thanks to &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/748&quot;&gt;GreaseMonkey&lt;/a&gt; and mad coding skillz ;-)&lt;/p&gt;
&lt;p&gt;If you use Firefox, install GreaseMonkey and install &lt;a href=&quot;http://userscripts.org/scripts/show/96085&quot;&gt;the user script&lt;/a&gt;. For other browsers, check &lt;a href=&quot;http://userscripts.org/about/installing&quot;&gt;this page&lt;/a&gt; about possibilities of using the script. The script adds a link to the video when a page on RTL contains a video.&lt;/p&gt;
&lt;p&gt;The code is GPLv3 (I will soon update the license information in the script ;-) ). You can view the Git repository &lt;a href=&quot;http://git.simply-life.net/?a=summary&amp;amp;p=userscripts/rtlnl_media_url&quot;&gt;right here&lt;/a&gt;, or clone it from &lt;a href=&quot;git://git.simply-life.net/simply-life.net/userscripts/rtlnl_media_url&quot;&gt;git://git.simply-life.net/simply-life.net/userscripts/rtlnl_media_url&lt;/a&gt;.&lt;/p&gt;
</description>
 <comments>http://www.simply-life.net/cheetah/blog/2011-03-12/rtl-xl-direct-links#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/rtl-xl">rtl xl</category>
 <category domain="http://www.simply-life.net/cheetah/tag/userscripts">userscripts</category>
 <pubDate>Sat, 12 Mar 2011 13:13:52 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">83 at http://www.simply-life.net/cheetah</guid>
</item>
<item>
 <title>Drupal Development made easier with Qt Assistant - Part 4</title>
 <link>http://www.simply-life.net/cheetah/blog/2011-01-23/drupal-development-made-easier-qt-assistant-part-4</link>
 <description>&lt;p&gt;Welcome to the fourth and final part of this series of blogs. Last time we created and finished our PHP preprocessor, which helped us overcome some quirks in the Drupal documentation. Before that, in &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;part one&lt;/a&gt; we prepared our system and in &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2&quot;&gt;part two&lt;/a&gt; we configured the most important pieces of Doxygen. Read &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-07-27/drupal-development-made-easier-qt-assistant-part-3a&quot;&gt;part 3a&lt;/a&gt; and &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-08-10/drupal-development-made-easier-qt-assistant-part-3b&quot;&gt;part 3b&lt;/a&gt; for the work we did on the PHP Preprocessor. This time, we&#039;ll use my own &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2011-01-22/announcing-doxyassist&quot;&gt;DoxyAssist tool&lt;/a&gt; to have lots of work done for us automatically. Time to make the documentation useful!&lt;/p&gt;
&lt;!--break--&gt;&lt;!--break--&gt;&lt;h4&gt;Good base&lt;/h4&gt;
&lt;p&gt;Having fully configured and fixed most of Doxygen last time, for Drupal in its entirety, there is a nice base to work from. The next step is now to install the &lt;a href=&quot;http://www.simply-life.net/doxyassist/&quot;&gt;DoxyAssist scripts&lt;/a&gt; to a location you like. DoxyAssist will help - especially Drupal projects - to build modular documentation. Rather than just ending up with one big bundle, DoxyAssist will split core and contributed modules from each other. The contributed modules will each get their own Doxygen run which creates separate sets of help pages.&lt;/p&gt;
&lt;p&gt;Next, DoxyAssist automatically combines all those separate files back into one Qt Help Collection. This collection can be used nicely in the Qt Assistant. Making use of filters in the UI of the Assistant, it becomes possible to view all documentation together, or documentation of just the specific modules.&lt;/p&gt;
&lt;h4&gt;Project File&lt;/h4&gt;
&lt;p&gt;DoxyAssist uses projects and subprojects to determine what part of a source code project to include or exclude in each separate run of Doxygen. Special support is available for Drupal, which makes DoxyAssist automatically discover the subprojects (contributed modules, themes, etc) in the &quot;&lt;em&gt;sites&lt;/em&gt;&quot; directory.&lt;/p&gt;
&lt;p&gt;So we create an XML file which tells DoxyAssist where to find the source code, which base Doxyfile it has to use as a base, and which options to override. Additionally it also specifies some options for Qt Assistant. These last options will determine what features are available in the assistant when opening the collection.&lt;/p&gt;
&lt;p&gt;In this example I assume the base Doxyfile is correctly set up for Drupal. See &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-08-10/drupal-development-made-easier-qt-assistant-part-3b&quot;&gt;part 3b&lt;/a&gt; if you want to download the latest version, but make sure you adapt it to your environment. Next open up your text editor, and paste in the following as a start:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;xml geshifilter-xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?xml&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;version&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;encoding&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;DoxyAssist&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;xmlns&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;http://simply-life.net/doxyassist/doxyassist.xsd&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;            &lt;span style=&quot;color: #000066;&quot;&gt;xmlns:da&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;http://simply-life.net/doxyassist/doxyassist.xsd&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;            &lt;span style=&quot;color: #000066;&quot;&gt;version&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;drupal&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Drupal API&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;doxygen&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;doxyfile&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;/home/cheetah/public_html/drupal/Doxyfile&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;As you can see in the part above, we first set up some base things like XML Namespaces. We say the project is of a &quot;&lt;em&gt;drupal&lt;/em&gt;&quot; type, and we use version 1.0 of the DoxyAssist configuration format. We have a name for the configuration, and finally tell DoxyAssist which base doxyfile we use. Make sure you edit the path there!&lt;/p&gt;
&lt;p&gt;The next part we add are the options for Qt Assistant:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;xml geshifilter-xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;qtHelp&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;collectionFile&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;/home/cheetah/.local/doc/drupal-6.qhc&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;            &lt;span style=&quot;color: #000066;&quot;&gt;projectFile&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;/home/cheetah/.local/doc/drupal-6.qhcp&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;            &lt;span style=&quot;color: #000066;&quot;&gt;storage&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;qch&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;copyAction&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;copy&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;title&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Drupal API Documentation (6.x)&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/title&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;startPage&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;qthelp://org.drupal.6-x/org.Drupal.6-x/main.html&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/startPage&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;applicationIcon&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;drupal.png&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/applicationIcon&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;enableFilterFunctionality&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;visible&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;true&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/enableFilterFunctionality&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;enableDocumentationManager&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;false&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/enableDocumentationManager&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;enableAddressBar&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;false&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/enableAddressBar&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;cacheDirectory&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;drupal6/api&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/cacheDirectory&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/qtHelp&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The paths to the &lt;em&gt;collectionFile&lt;/em&gt; and &lt;em&gt;projectFile&lt;/em&gt; are somewhere where they won&#039;t be in the way during every day tasks. The separate &lt;em&gt;qch&lt;/em&gt; files will be kept within a &quot;qch&quot; subdirectory (the &quot;&lt;em&gt;storage&lt;/em&gt;&quot; attribute), and they will be copied from the Doxygen output directories. Other options include &quot;&lt;em&gt;move&lt;/em&gt;&quot; (which will move the compressed help files away from their original Doxygen directories) and &quot;&lt;em&gt;symlink&lt;/em&gt;&quot; (create a symbolic link to the original location).&lt;/p&gt;
&lt;p&gt;The options that follow define the interface of the Assistant. More details about those options are available in the &lt;a href=&quot;http://doc.trolltech.com/4.7/assistant-custom-help-viewer.html&quot;&gt;Qt documentation&lt;/a&gt;. Note the &lt;em&gt;applicationIcon&lt;/em&gt;: this has to exist in the same directory as where the &lt;em&gt;collectionFile&lt;/em&gt; is placed. It will allow you to use a special icon for your Drupal assistant - you can also just omit it if you don&#039;t want to spend any time on it.&lt;/p&gt;
&lt;p&gt;Now for the interesting stuff: defining our Drupal (6) project:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;xml geshifilter-xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;drupal&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;name&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Drupal&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/name&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;version&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;6.x&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/version&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;versionSpecific&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;true&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/versionSpecific&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;input&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;/home/cheetah/public_html/drupal&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/input&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;exclude&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;/home/cheetah/public_html/drupal/backup&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/exclude&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;exclude&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;/home/cheetah/public_html/drupal/doc&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/exclude&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;output&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;/home/cheetah/public_html/drupal/doc&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/output&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;logDirectory&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;/home/cheetah/public_html/drupal/doc/log&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/logDirectory&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;namespace&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;org&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/namespace&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&amp;lt;!-- The following are Drupal specific options! --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;groupBy&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;name&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/groupBy&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;buildCore&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;true&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/buildCore&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;buildModules&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;true&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/buildModules&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;buildThemes&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;false&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/buildThemes&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;latestContribOnly&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;true&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/latestContribOnly&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/drupal&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/DoxyAssist&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Oh, and we close up the open &lt;em&gt;DoxyAssist&lt;/em&gt; tag as well. But before that, we define our project with a name and version tag. We want version specific builds, which means the project version names will be included in the final output. It makes it just a bit easier to find out the versions later on. In the &lt;em&gt;input&lt;/em&gt; option, we tell DoxyAssist where to look for the Drupal source code. We also add some directories which we want to skip. That includes our output directory, where Doxygen will write all its files to. There is also a separate directory where the log files of Doxygen will be written to, such that each (failed) documentation build can be investigated separately, if the need arises.&lt;/p&gt;
&lt;p&gt;Finally, the &lt;em&gt;namespace&lt;/em&gt; is the base namespace used in Qt Assistant. DoxyAssist will automatically append the project name (&quot;&lt;em&gt;Drupal&lt;/em&gt;&quot;) and version (&quot;&lt;em&gt;6.x&lt;/em&gt;&quot;) to this. For modules, this will be followed by the module name and version in a similar way. In Qt Assistant, these full names will help the Assistant to distinguish all the pages, since there will be some overlap - especially for common pages.&lt;/p&gt;
&lt;p&gt;So far the options have been largely the same as for any (generic) DoxyAssist project. The next set is specific for Drupal. They will determine which items to build (Core, contributed modules and/or themes), and whether to include all versions of a project, or just the latest version. The latter is especially useful if you have a multi-site install, where some sites still run older versions of modules.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;groupBy&lt;/em&gt; option is especially important: this identifies how to group documentation of contributed modules. The value is a key in the &lt;em&gt;.info&lt;/em&gt; file of modules. Good values are &quot;&lt;em&gt;name&lt;/em&gt;&quot; or &quot;&lt;em&gt;package&lt;/em&gt;&quot;.&lt;/p&gt;
&lt;p&gt;DoxyAssist comes with an example configuration for Drupal projects, that contains some more elaborate explanations of each option in XML comments. You can use that as a base. See the &lt;em&gt;doc/examples&lt;/em&gt; directory in the DoxyAssist package to get that example.&lt;/p&gt;
&lt;p&gt;Save the XML file you just created to somewhere where you can find it again. The file extension doesn&#039;t matter much, although I recommend plain &lt;em&gt;.xml&lt;/em&gt; or &lt;em&gt;.doxyassist&lt;/em&gt;. I&#039;ll use &lt;em&gt;/home/cheetah/public_html/drupal/drupal6.xml&lt;/em&gt; in this example.&lt;/p&gt;
&lt;h4&gt;Running DoxyAssist&lt;/h4&gt;
&lt;p&gt;Whew, everything&#039;s set up. Our preprocessor of the previous parts is (hopefully) still in place, so it&#039;s time to get this thing working. The project file is done, so we better keep that safe for a bit. If you don&#039;t have it already, install &lt;a href=&quot;http://www.python.org/download/releases/2.7/&quot;&gt;Python 2.7&lt;/a&gt; now (Python 3.x is not yet supported, 2.6 will work just fine though).&lt;/p&gt;
&lt;p&gt;Fire up a command line and enter the following:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;bash geshifilter-bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;python &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;cheetah&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;share&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;doxyassist&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;doxyassist.py &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;cheetah&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;public_html&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;drupal&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;drupal6.xml&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Naturally, change the path to wherever you have DoxyAssist installed. If this throws some odd (syntax) error, replace &quot;&lt;em&gt;python&lt;/em&gt;&quot; with &quot;&lt;em&gt;python2&lt;/em&gt;&quot; - you&#039;re probably running Python 3.x by default.&lt;/p&gt;
&lt;p&gt;Once you got the command right, DoxyAssist will process the configuration and do its magic. This may take a little while. If you have PyQt4 installed as well, the Assistant cache will be cleared. This means custom changes you made in the Assistant with the same collection (an earlier build) will be reset. Such changes will be lost, but this step is required to get rid of left-over filters. Without this step, older tags (e.g. old versions of modules) will remain in the filter list, even though they are of no use at all anymore.&lt;/p&gt;
&lt;p&gt;Finally, check the &lt;em&gt;collectionFile&lt;/em&gt; setting in the &lt;em&gt;qtHelp&lt;/em&gt; part of the DoxyAssist configuration file. You&#039;re gonna need this to finally open up the Drupal Assistant:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;bash geshifilter-bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;assistant &lt;span style=&quot;color: #660033;&quot;&gt;-collectionFile&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;cheetah&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;.local&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;doc&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;drupal-&lt;span style=&quot;color: #000000;&quot;&gt;6&lt;/span&gt;.qhc&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The result is best shown in the following set of screenshots:&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/drupalassistant1.png&quot; title=&quot;Drupal Assistant (1)&quot; rel=&quot;lightshow[drupalassistant]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/drupalassistant1.png&quot; alt=&quot;Drupal Assistant (1)&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/drupalassistant2.png&quot; title=&quot;Drupal Assistant (2)&quot; rel=&quot;lightshow[drupalassistant]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/drupalassistant2.png&quot; alt=&quot;Drupal Assistant (2)&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/drupalassistant3.png&quot; title=&quot;Drupal Assistant (3)&quot; rel=&quot;lightshow[drupalassistant]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/drupalassistant3.png&quot; alt=&quot;Drupal Assistant (3)&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Finally, if you ever add new modules, update Drupal, or need to rebuild the documentation again: just re-run DoxyAssist with the same project file as before. Everything will be updated, and next time you run your Drupal Assistant you will see the refreshed documentation with all updates - including newly installed or updated modules. Quick and painless.&lt;/p&gt;
&lt;h4&gt;The End&lt;/h4&gt;
&lt;p&gt;This concludes this series of blog posts (finally). From scratch we set up Qt Assistant to become our main assistant in Drupal coding. All of this with the help of Doxygen, a special preprocessor and DoxyAssist. I hope you found it helpful.&lt;/p&gt;
&lt;p&gt;Feel free to comment if you run into problems. Of course, also contact me if you&#039;d like to discuss DoxyAssist, report bugs or request features etc!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other posts in this series:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;Part 1&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2&quot;&gt;Part 2&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-07-27/drupal-development-made-easier-qt-assistant-part-3a&quot;&gt;Part 3a&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-08-10/drupal-development-made-easier-qt-assistant-part-3b&quot;&gt;Part 3b&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;</description>
 <comments>http://www.simply-life.net/cheetah/blog/2011-01-23/drupal-development-made-easier-qt-assistant-part-4#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/doxyassist">DoxyAssist</category>
 <category domain="http://www.simply-life.net/cheetah/tag/drupal">Drupal</category>
 <category domain="http://www.simply-life.net/cheetah/tag/open-source">Open Source</category>
 <category domain="http://www.simply-life.net/cheetah/tag/qt">Qt</category>
 <pubDate>Sat, 22 Jan 2011 23:15:13 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">80 at http://www.simply-life.net/cheetah</guid>
</item>
<item>
 <title>Announcing DoxyAssist!</title>
 <link>http://www.simply-life.net/cheetah/blog/2011-01-22/announcing-doxyassist</link>
 <description>&lt;p&gt;For my series of blogs regarding Drupal documentation and the Qt Assistant, I wanted get modular API documentation. Having everything thrown into a big bucket - Drupal Core and all contributed modules - became quite messy. On the other hand, having everything separated is just as cumbersome. I needed a tool which automatically discovers modules and builds the documentation for me. Then bundle everything in one Qt Help Collection with appropriate filters, so I can view everything together or each module&#039;s documentation separately, switching quickly in one interface. DoxyAssist to the rescue!&lt;/p&gt;
&lt;p&gt;With DoxyAssist you can split up any large project&#039;s documentation into submodules. The documentation for each module will be built separately. If you use the Qt Assistant and let DoxyAssist create the help collection for you, it will also bundle the various pieces of documentation again. In the assistant appropriate filters are added so you can easily select which documentation you want to see.&lt;/p&gt;
&lt;p&gt;Furthermore it is able to load a single Doxygen configuration file (Doxyfile) and use it as a template. If submodules need slight variations in these settings, you can change these settings, without having to create seperate Doxyfiles for each module. You can set required settings in the DoxyAssist configuration file, and let team members use their own base templates so they can customize the documentation to their liking.&lt;/p&gt;
&lt;p&gt;Special support for Drupal is available, with which you can have DoxyAssist automatically discover all contributed modules and themes you have installed and build the documentation in the groups you like.&lt;/p&gt;
&lt;p&gt;I hereby present you version 0.1, licensed under GPLv3. It requires Python and optionally PyQt4. It comes with example configuration samples to help you get started.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.simply-life.net/doxyassist/&quot; rel=&quot;nofollow&quot;&gt;Download here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://gitorious.org/doxyassist&quot; rel=&quot;nofollow&quot;&gt;Source code @ Gitorious&lt;/a&gt;&lt;/p&gt;
</description>
 <comments>http://www.simply-life.net/cheetah/blog/2011-01-22/announcing-doxyassist#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/doxyassist">DoxyAssist</category>
 <category domain="http://www.simply-life.net/cheetah/tag/drupal">Drupal</category>
 <category domain="http://www.simply-life.net/cheetah/tag/qt">Qt</category>
 <pubDate>Sat, 22 Jan 2011 22:13:36 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">78 at http://www.simply-life.net/cheetah</guid>
</item>
<item>
 <title>Sinterklaas Song, Denglish Style #2</title>
 <link>http://www.simply-life.net/cheetah/blog/2010-12-05/sinterklaas-song-denglish-style-2</link>
 <description>&lt;p&gt;By popular demand (read: 2 people asked for it), another Sinterklaas song in &lt;a href=&quot;http://weblogs.nrc.nl/denglish/&quot;&gt;Denglish&lt;/a&gt;* style. The last one of this year, too.&lt;/p&gt;
&lt;p class=&quot;note&quot;&gt;* Note that Wikipedia refers to &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Denglisch&quot;&gt;Denglisch&lt;/a&gt;&quot; as a mixture of German and English. Perhaps &lt;a href=&quot;http://en.wikipedia.org/wiki/Dunglish&quot;&gt;Dunglish&lt;/a&gt; is the better term in this case... Either way, I&#039;m talking about mixing Dutch and English. My Denglisch (the German variant) is probably far worse than my Denglish/Dunglish.&lt;/p&gt;
&lt;!--break--&gt;&lt;!--break--&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;The Sack of Santa Clause&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;The sack of Santa Clause&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Santa Clause, Santa Clause&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;The sack of Santa Clause&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Oh boys, boys, it&#039;s such a boss&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;There stops he, there stops he&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;There stops he happy of sin,&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;The whole, the whole&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;The whole world in&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;The sack of Santa Clause&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Santa Clause, Santa Clause&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;The sack of Santa Clause&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Oh boys, boys, it&#039;s such a boss&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;He is for big and small&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Big and small, big and small&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;He is for big and small&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Foreseen of tay and marsepain&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;And mountains, and mountains&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;And mountains sugar goods&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;So lecker, so lecker&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;So lecker and so sweet&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;He is for big and small&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Big and small, big and small&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;He is for big and small&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Foreseen of tay and marsepein&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;But under in that sack&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;In that sack, in that sack&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;But under in that sack&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;There lies the very big pack&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;For the lovely, for the sweet&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;For the lovely sweet child&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Say was you, say was you&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;This year gehoresame friend?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;But under in that sack&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;In that sack, in that sack&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;But under in that sack&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;There lies the very big pack&lt;/em&gt;&lt;/p&gt;
&lt;p class=&quot;note&quot;&gt;Thanks to &lt;a href=&quot;http://www.liedjesland.com/Liedjes/Sinterklaas/DeZakVanSinterklaas/DeZakVanSinterklaas.htm&quot;&gt;Liedjesland&lt;/a&gt; for the original Dutch lyrics.&lt;/p&gt;
</description>
 <comments>http://www.simply-life.net/cheetah/blog/2010-12-05/sinterklaas-song-denglish-style-2#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/nonsense">nonsense</category>
 <category domain="http://www.simply-life.net/cheetah/tag/sinterklaas">Sinterklaas</category>
 <pubDate>Sun, 05 Dec 2010 13:34:25 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">76 at http://www.simply-life.net/cheetah</guid>
</item>
<item>
 <title>Sinterklaas Song, Denglish Style</title>
 <link>http://www.simply-life.net/cheetah/blog/2010-12-04/sinterklaas-song-denglish-style</link>
 <description>&lt;p&gt;Since tomorrow is Sinterklaas and I&#039;ve been &lt;a href=&quot;http://www.rosana.co.uk/2010/12/01/december-bloggers-2010&quot;&gt;convinced&lt;/a&gt; to do some blogging, here&#039;s a nice Sinterklaas song. In the spirit of globalization, I&#039;ve personally translated it in &lt;em&gt;Denglish&lt;/em&gt;, such that the average* Dutch person can still understand the words.&lt;/p&gt;
&lt;!--break--&gt;&lt;!--break--&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;See Ginder Comes The Steam boat&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;See ginder comes the steam boat&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;From Spain already on&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;He brings us Saint Nicholas&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;I see him already standing&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;How huppels his horse&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;The deck up and near&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;How wave the wimples&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;All heen and all weather&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;His knight stands to laughing&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;He screams us yet too&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Who sweet is gets candy&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Who bad is the roo&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Oh dear Saint Nicholas&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Come also to me&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;And don&#039;t drive really silent&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Past my home&lt;/em&gt;&lt;/p&gt;
&lt;p class=&quot;note&quot;&gt;* No, I&#039;ve done no research whatsoever, regarding the knowledge of English of the average Dutch person.&lt;/p&gt;
</description>
 <comments>http://www.simply-life.net/cheetah/blog/2010-12-04/sinterklaas-song-denglish-style#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/nonsense">nonsense</category>
 <category domain="http://www.simply-life.net/cheetah/tag/sinterklaas">Sinterklaas</category>
 <pubDate>Sat, 04 Dec 2010 13:46:21 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">74 at http://www.simply-life.net/cheetah</guid>
</item>
<item>
 <title>Sims Tools Sources: Now Open!</title>
 <link>http://www.simply-life.net/cheetah/blog/2010-08-10/sims-tools-sources-now-open</link>
 <description>&lt;p&gt;It&#039;s been a very long time since the Sims community was very active with the Sims 1. At the time I developed two applications for the game: The Neighborhood Handler and The Add-on Handler. Almost three years ago I decided to make  the source code of these two available under the &lt;a href=&quot;http://www.gnu.org/licenses/gpl-2.0.html&quot;&gt;GPL2 license&lt;/a&gt;. Time has passed and although the source was publicly available online, it was never really announced. Time to change that, so here&#039;s the announcement (and more)!&lt;/p&gt;
&lt;p&gt;The Neighborhood Handler and The Add-on Handler are now Open Source software! I must say I haven&#039;t properly cleaned up the code or anything: it&#039;s basically nothing but a dump of the code I wrote all those years ago. As I was still learning at the time, I bet it&#039;s full of bugs, crappy (&quot;WTF&quot;) code and other nightmares. Yet if anyone is willing to pick up and improve (or rewrite) one or two of these projects, you now can. If you just want to take a peek: you can do that too.&lt;/p&gt;
&lt;p&gt;As for The Neighborhood Handler: I&#039;ve made a minor restart for a brand new version (still C++, but using the &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;Qt toolkit&lt;/a&gt; for UI). Although I haven&#039;t had the time to put any work in it, that source is also available for anyone to work with.&lt;/p&gt;
&lt;p&gt;There&#039;s one more thing Sims 2 content creators may find useful: I&#039;ve put quite some work into a Sims 2 Packer, which allows custom packaging of the famous &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;.package&lt;/code&gt;&lt;/span&gt; files for the Sims 2 (into &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;.Sims2Pack&lt;/code&gt;&lt;/span&gt; files). In fact, this project may serve as a nice base for custom Sims 3 packages as well, since the file format for The Sims 3 is quite similar. I never got around to actually finishing up and publishing this, but it may still be useful to someone.&lt;/p&gt;
&lt;p&gt;For all my open code, which also includes Drupal projects, other tools I wrote way back and more, see &lt;a href=&quot;http://git.simply-life.net/&quot;&gt;my public git repositories&lt;/a&gt;. If you&#039;re just looking for the projects mentioned above, go to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://git.simply-life.net/?a=summary&amp;amp;p=TheNeighborhoodHandler&quot;&gt;TheNeighborhoodHandler&lt;/a&gt; repository (see &lt;a href=&quot;http://git.simply-life.net/?a=shortlog&amp;amp;p=TheNeighborhoodHandler&amp;amp;h=refs/heads/4.1&quot;&gt;4.1 branch&lt;/a&gt; for the old version, or the &lt;a href=&quot;http://git.simply-life.net/?a=shortlog&amp;amp;p=TheNeighborhoodHandler&amp;amp;h=refs/heads/master&quot;&gt;master branch&lt;/a&gt; for the new almost-nothing-done version)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://git.simply-life.net/?a=summary&amp;amp;p=TheAddonHandler&quot;&gt;TheAddonHandler&lt;/a&gt; repository&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://git.simply-life.net/?a=summary&amp;amp;p=libSims2Pack&quot;&gt;libSims2Pack&lt;/a&gt; repository&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://git.simply-life.net/?a=summary&amp;amp;p=Sims2PackerUI&quot;&gt;Sims2PackerUI&lt;/a&gt; repository (depends on libSims2Pack)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that the old software requires Borland C++ Builder to build. The newer stuff (the new version of The Neighborhood Handler, libSims2Pack and Sims2PackerUI) uses &lt;a href=&quot;http://www.cmake.org&quot;&gt;CMake&lt;/a&gt; as build system, and depends on &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;Qt&lt;/a&gt; (both are freely available). You can use the Qt Creator to build and debug all that code.&lt;/p&gt;
&lt;p&gt;Also note that all of this is to little or no use if you&#039;re just a user of these tools, and have no interest in the actual source code. I currently have no (recent) binaries/installers available, although you may still find The Neighborhood Handler and The Add-on Handler at &lt;a href=&quot;http://www.thesimszone.co.uk&quot;&gt;The Sims Zone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Feel free to &lt;a href=&quot;http://www.simply-life.net/cheetah/contact&quot;&gt;contact me&lt;/a&gt; if you have questions about the code or if you&#039;d like to continue development of one or more of these projects: I can give you write permissions to the repositories if you&#039;re serious about taking these projects to a new level. It is unlikely that I&#039;ll be touching this code anytime soon.&lt;/p&gt;
&lt;p&gt;All in all this is mostly legacy stuff, but nevertheless I hope someone will find it useful!&lt;/p&gt;
</description>
 <comments>http://www.simply-life.net/cheetah/blog/2010-08-10/sims-tools-sources-now-open#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/libsims2pack">libSims2Pack</category>
 <category domain="http://www.simply-life.net/cheetah/tag/open-source">Open Source</category>
 <category domain="http://www.simply-life.net/cheetah/tag/sims">Sims</category>
 <category domain="http://www.simply-life.net/cheetah/tag/sims2packerui">Sims2PackerUI</category>
 <category domain="http://www.simply-life.net/cheetah/tag/add-handler">The Add-on Handler</category>
 <category domain="http://www.simply-life.net/cheetah/tag/neighborhood-handler">The Neighborhood Handler</category>
 <category domain="http://www.simply-life.net/cheetah/tag/-sims-zone">The Sims Zone</category>
 <pubDate>Tue, 10 Aug 2010 21:04:59 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">72 at http://www.simply-life.net/cheetah</guid>
</item>
<item>
 <title>Drupal Development made easier with Qt Assistant - Part 3b</title>
 <link>http://www.simply-life.net/cheetah/blog/2010-08-10/drupal-development-made-easier-qt-assistant-part-3b</link>
 <description>&lt;p&gt;Remember when &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-07-27/drupal-development-made-easier-qt-assistant-part-3a&quot;&gt;last time&lt;/a&gt; we fixed Doxygen comments of Drupal so they would look right even when using Doxygen? It&#039;s time for another part in the series, and we&#039;ll continue with some more fixing. Do you still need to get set up, because perhaps you missed the earlier parts? Please (re)read parts &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2&quot;&gt;2&lt;/a&gt; and especially &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-07-27/drupal-development-made-easier-qt-assistant-part-3a&quot;&gt;3a&lt;/a&gt; before you move on. This time: getting in-depth topics such as the Forms API working as expected. Let&#039;s go!&lt;/p&gt;
&lt;!--break--&gt;&lt;!--break--&gt;&lt;h4&gt;The problem&lt;/h4&gt;
&lt;p&gt;In the Drupal documentation comments, all links, including the ones to other pages, are set using the &lt;em&gt;@link&lt;/em&gt; command. We already fixed external and Drupal specific links earlier. However, our Doxygen documentation still doesn&#039;t contain some topics as Doxygen doesn&#039;t just process or include HTML files. Because of the Doxygen processing, the defined links also remain without valid target. The links don&#039;t work, and we don&#039;t have the nice documentation together with the rest.&lt;/p&gt;
&lt;p&gt;We could of course just change the links to the external pages at &lt;a href=&quot;http://api.drupal.org&quot;&gt;api.drupal.org&lt;/a&gt;. But wouldn&#039;t it be nicer to have the documentation all in one place? That&#039;s what we&#039;re going to achieve right now!&lt;/p&gt;
&lt;h4&gt;More preprocessing&lt;/h4&gt;
&lt;p&gt;Remember how in our preprocessor we left some extra space for HTML preprocessing? We&#039;ll now create a &lt;em&gt;HtmlPreprocessor&lt;/em&gt;. Later on we&#039;ll let Doxygen scan HTML files as well. And with our special preprocessor, we will trick Doxygen to create and include the HTML pages, which we can link to without even changing the existing links.&lt;/p&gt;
&lt;p&gt;First some structure. Open up the &lt;em&gt;preprocess-drupal-doxygen.php&lt;/em&gt; file in your text editor or IDE again. Below the &lt;em&gt;CodePreprocessor&lt;/em&gt; class, add the following skeleton:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; HtmlPreprocessor &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;extends&lt;/span&gt; Preprocessor &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$_basename&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt;/**&amp;lt; The basename of the filename */&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; __construct &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    Preprocessor&lt;span style=&quot;color: #339933;&quot;&gt;::&lt;/span&gt;__construct&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;_basename &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/basename&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;basename&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; doProcess&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// We will go and fill this in soon...&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I&#039;ve already created the constructor for you, which stores the basename of the file we&#039;re processing (that&#039;s the filename without path or directories). We&#039;ll need it later. The &lt;em&gt;doProcess()&lt;/em&gt; function is also in place, but is in need of some content.&lt;/p&gt;
&lt;p&gt;Remember that the &lt;em&gt;$contents&lt;/em&gt; variable will store the entire HTML file. This may include headers, closing garbage and much more. But for future convenience, or perhaps for your own projects, perhaps you just want to create a simple HTML page with only content. The file itself will then not be valid HTML, but when put inside Doxygen output, everything will be just fine. Whatever the input is, we&#039;ll deal with it as good as we can.&lt;/p&gt;
&lt;h4&gt;Grabbing the title&lt;/h4&gt;
&lt;p&gt;The first part of the &lt;em&gt;doProcess&lt;/em&gt; will deal with extracting the title from the document. The preferred title will be enclosed in a &amp;lt;title&amp;gt; tag. But if we get no header, we may want to check some other tags like &amp;lt;h1&amp;gt; through &amp;lt;h6&amp;gt;. For each of these, we check the document if the tag exists and has some content. We&#039;ll then grab the contents of the tag and make sure it is all on one line. If the document happens to contain a line break in the middle of the contents, we don&#039;t want that to break our documentation.&lt;/p&gt;
&lt;p&gt;Finally, if none of the tags are found, we fall back to using the file&#039;s name. This gives us the following code, of which the regular expression is inspired by the Drupal API module:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Find title in the first listed tag that&#039;s in the file&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$title&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$titleTags&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;title&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;h1&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;h2&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;h3&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;h4&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;h5&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;h6&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$titleTags&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$tag&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$titleMatch&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/preg_match&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_match&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;@&amp;lt;&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$tag&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;(\s.*?)?&amp;gt;\s*(\w.*?)\s*&amp;lt;/&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$tag&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\s*?&amp;gt;@is&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$titleMatch&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #000088;&quot;&gt;$title&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$titleMatch&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Make sure it&#039;s all on one line&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #b1b100;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/isset&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$title&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$title&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;_basename&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h4&gt;And the body?&lt;/h4&gt;
&lt;p&gt;Next is the actual contents. We have two cases to deal with, as described before: one if the file contains a full HTML page (including header and whatnot, and the all-important &amp;lt;body&amp;gt; tag), or one which is a bit messy and has only the actual content (without a &amp;lt;body&amp;gt; tag).&lt;/p&gt;
&lt;p&gt;So what do we do? Like the method used above, we go and grab the contents of the &amp;lt;body&amp;gt; tag. If our regular expression doesn&#039;t match, we&#039;ll just use the entire file:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Get &amp;lt;body&amp;gt; of HTML, if present (otherwise use whole document)&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$bodyMatch&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/preg_match&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_match&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;!&amp;lt;body(\s.*?)?&amp;gt;(.*)&amp;lt;/body(\s.*?)?&amp;gt;!is&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$bodyMatch&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$bodyMatch&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt; * &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;!([@\\\\])endhtmlonly!&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\\1&amp;lt;span&amp;gt;endhtmlonly&amp;lt;/span&amp;gt;&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The last but one line indents every line with &quot;&lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;&amp;nbsp;* &lt;/code&gt;&lt;/span&gt;&quot;. Doxygen will remove this indentation from output again. So why do we do this? Just in case the HTML document starts a line with &quot;&lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;&amp;nbsp;* &lt;/code&gt;&lt;/span&gt;&quot; somewhere, we want to keep that in the output. By adding the indentation in our preprocessor, Doxygen will remove only what we added, and nothing else.&lt;/p&gt;
&lt;p&gt;Another issue is that the document may contain the Doxygen &lt;em&gt;@endhtmlonly&lt;/em&gt; command in the content. As you&#039;ll see later, this may cause breakage, as that will terminate our &lt;em&gt;@htmlonly&lt;/em&gt; block, used to insert the HTML code verbatim below. Note that in such a block, &lt;em&gt;@endhtmlonly&lt;/em&gt; is also the only Doxygen command that is recognized, with escaping it being of no use at all. So we simply break the command wherever it occurs, by placing the &lt;em&gt;endhtmlonly&lt;/em&gt; part in an (otherwise useless) &amp;lt;span&amp;gt; tag. You won&#039;t see the difference, but Doxygen will see &lt;em&gt;@&amp;lt;span&amp;gt;endhtmlonly&amp;lt;/span&amp;gt;&lt;/em&gt; and stick to printing verbatim HTML code. Success!&lt;/p&gt;
&lt;p&gt;Finally, we may have some cross references in between documents. For example, the Forms API Quickstart and Forms API Reference refer to each other, using absolute links to &lt;a href=&quot;http://api.drupal.org&quot;&gt;api.drupal.org&lt;/a&gt;. That works, but as we have all that documentation in Doxygen, again, why not let everything work from the same place?&lt;/p&gt;
&lt;p&gt;So let&#039;s replace some links. Add a new function to the &lt;em&gt;HtmlPreprocessor&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; replaceLinks&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$links&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$links&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$original&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$new&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$re&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/(&amp;lt;a\s+[^&amp;gt;]*)href=([&amp;quot;\&#039;])&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$original&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;(\/\S*)?\\2/si&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$re&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\\1href=\\2&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$new&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\\2&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This function will find links we pass into the &lt;em&gt;$links&lt;/em&gt; array (as keys), and replace them with their values. It will also catch longer URLs, if the given URL is continues with a slash and then some more stuff. As such, a link to &lt;em&gt;http://api.drupal.org/api/file/developer/topics/forms_api_reference.html/6&lt;/em&gt; will turn into just &lt;em&gt;forms_api_reference.html&lt;/em&gt; if we call it as follows (add this to the &lt;em&gt;doProcess()&lt;/em&gt; function body):&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;replaceLinks&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;http://api.drupal.org/api/file/developer/topics/forms_api.html&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;forms_api.html&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;http://api.drupal.org/api/file/developer/topics/forms_api_reference.html&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;forms_api_reference.html&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;http://api.drupal.org/api/file/developer/topics/javascript_startup_guide.html&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;javascript_startup_guide.html&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Now for the all important step: create the Doxygen comment and include the HTML code. We&#039;ll give Doxygen some documentation of the file itself, and create a Doxygen &lt;a href=&quot;http://www.stack.nl/~dimitri/doxygen/commands.html#cmdpage&quot;&gt;page&lt;/a&gt; with some HTML only content. This is easy by just creating an appropriate Doxygen comment block:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/**&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Clone page&#039;s documentation in File listing&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; * @file&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; * @brief @link &lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;{$this-&amp;gt;_basename}&lt;/span&gt; &lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;{$title}&lt;/span&gt; @endlink&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; * &lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; * This file contains a special documentation topic: @link &lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;{$this-&amp;gt;_basename}&lt;/span&gt; &lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;{$title}&lt;/span&gt; @endlink.&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; */&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Create custom page&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/**&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; * @page &lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;{$this-&amp;gt;_basename}&lt;/span&gt; &lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;{$title}&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; * &lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; * @htmlonly&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; * &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; * @endhtmlonly&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;              &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; */&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;There will be one minor issue now. If we go to the files list in the Doxygen output and look up our HTML file there, that part will not contain the actual documentation. It will instead link to the custom page we created, which has everything we want. If you like, you can copy the three lines from &lt;em&gt;@htmlonly&lt;/em&gt; to &lt;em&gt;@endhtmlonly&lt;/em&gt; to the file&#039;s documentation. Unfortunately if you leave out the custom page, the normal links to the page don&#039;t seem to work, so that page will need to stay in.&lt;/p&gt;
&lt;p&gt;You can now refer to the documentation file anywhere you like by using the Doxygen command &lt;em&gt;@link&lt;/em&gt; (e.g. &quot;&lt;em&gt;@link file.html My Link Text @endlink&lt;/em&gt;&quot;).&lt;/p&gt;
&lt;p&gt;There&#039;s just one bit left in our preprocessor to do: actually construct and use this new &lt;em&gt;HtmlPreprocessor&lt;/em&gt;. If you used the script of the last time, find the line near the end saying &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;php geshifilter-php&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// HTML Processing is for later...&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;. Found it? Replace that line with the following:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$processor&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; HtmlPreprocessor&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;That&#039;s all for the preprocessor. Note that if you got lost somewhere in the process, you can download the complete script below. All the code is GPL v2 by the way, so feel free to change, reuse and redistribute it.&lt;/p&gt;
&lt;h4&gt;But Doxygen still doesn&#039;t read HTML files!&lt;/h4&gt;
&lt;p&gt;Now the preprocessor is completely in place, we can let Doxygen include our HTML files. This is fairly simple: in the past we let it only handle some &lt;em&gt;.php&lt;/em&gt;, &lt;em&gt;.inc&lt;/em&gt;, &lt;em&gt;.module&lt;/em&gt; and &lt;em&gt;.install&lt;/em&gt; files for Drupal. Just add &lt;em&gt;.html&lt;/em&gt; (and any other extensions you may use) to the &lt;strong&gt;FILE_PATTERNS&lt;/strong&gt; list (&lt;strong&gt;Input&lt;/strong&gt; topic) in the Doxywizard. Run Doxygen, and the custom documentation will be nicely included. For Drupal documentation, simply check the main page to get to the topics. If all went well, it should all work just fine.&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/doxywizard6.png&quot; title=&quot;Doxywizard - FILE_PATTERNS setting&quot; rel=&quot;lightshow[fixingdoc]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/doxywizard6.png&quot; alt=&quot;Doxywizard - FILE_PATTERNS setting&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/htmldoc1.png&quot; title=&quot;Working HTML Documentation!&quot; rel=&quot;lightshow[fixingdoc]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/htmldoc1.png&quot; alt=&quot;Working HTML Documentation!&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h4&gt;Summary&lt;/h4&gt;
&lt;p&gt;In &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;part 1&lt;/a&gt; we prepared our system, and in &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2&quot;&gt;part 2&lt;/a&gt; we got our Drupal documentation in the Qt Assistant. Now we fixed the documentation using some homebrew code from &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-07-27/drupal-development-made-easier-qt-assistant-part-3a&quot;&gt;part 3a&lt;/a&gt; and this part. Last time we corrected some differences between the commands used by the Drupal API module and Doxygen, making Doxygen output resemble the output of the module. This time we expanded our code to include advanced topics from HTML pages.&lt;/p&gt;
&lt;p&gt;There&#039;s just one issue left. All the documentation, core and modules, is grouped together. But often it&#039;s also nice to view the documentation of just a specific module. Qt Assistant makes this possible by letting it show us a selection of documentation collections (which may be the whole package as we have now). How? I&#039;ll be back soon.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other posts in this series:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;Part 1&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2&quot;&gt;Part 2&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-07-27/drupal-development-made-easier-qt-assistant-part-3a&quot;&gt;Part 3a&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2011-01-23/drupal-development-made-easier-qt-assistant-part-4&quot;&gt;Part 4&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;table id=&quot;attachments&quot; class=&quot;sticky-enabled&quot;&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class=&quot;odd&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/Doxyfile_1.&quot;&gt;Doxyfile.&lt;/a&gt;&lt;/td&gt;&lt;td&gt;62.98 KB&lt;/td&gt; &lt;/tr&gt;
 &lt;tr class=&quot;even&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/preprocess-drupal-doxygen.phps&quot;&gt;preprocess-drupal-doxygen.phps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;12.45 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
 <comments>http://www.simply-life.net/cheetah/blog/2010-08-10/drupal-development-made-easier-qt-assistant-part-3b#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/drupal">Drupal</category>
 <category domain="http://www.simply-life.net/cheetah/tag/open-source">Open Source</category>
 <category domain="http://www.simply-life.net/cheetah/tag/qt">Qt</category>
 <enclosure url="http://www.simply-life.net/cheetah/system/files/Doxyfile_1." length="64495" type="application/octet-stream" />
 <pubDate>Tue, 10 Aug 2010 19:58:42 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">70 at http://www.simply-life.net/cheetah</guid>
</item>
<item>
 <title>Drupal Development made easier with Qt Assistant - Part 3a</title>
 <link>http://www.simply-life.net/cheetah/blog/2010-07-27/drupal-development-made-easier-qt-assistant-part-3a</link>
 <description>&lt;p&gt;Welcome back! It&#039;s been a while since I posted parts &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;one&lt;/a&gt; and &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2&quot;&gt;two&lt;/a&gt; of this series (yeah, I should blog more often...). Remember I was making Drupal documentation available in the Qt Assistant, a useful documentation viewer? Nice. I have some good news: I have spent some time again to get the documentation in decent order. So, without furder ado, let&#039;s continue!&lt;/p&gt;
&lt;!--break--&gt;&lt;!--break--&gt;&lt;h4&gt;Plan for today&lt;/h4&gt;
&lt;p&gt;In &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;part one&lt;/a&gt; we prepared our system and got the necessary tools ready to begin our work. In &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2&quot;&gt;part two&lt;/a&gt; we actually got our Drupal documentation working in the Qt Assistant, although there were several problems in the layout, as you may have noticed.&lt;/p&gt;
&lt;p&gt;After catching up with the changes in Drupal documentation since last time, today we will take a deeper look at some of the (Drupal specific) problems in the generated documentation. This includes getting back some text that is lost in the Doxygen process, by preprocessing the code that goes into Doxygen. This is subpart A, soon we&#039;ll also get the in-depth topics (e.g. the Forms API reference) working as well, in part 3B.&lt;/p&gt;
&lt;h4&gt;Changes since last time&lt;/h4&gt;
&lt;p&gt;Since the last time, there have been a few changes in the resources we used. Although I am now using a different Linux distribution, it seems that the Doxygen templates got a bit of a make-over: your documentation will look even better with the latest version. Everything looks a bit more modern now, which is good. You may want to update your software (Doxygen and Qt) to the latest versions if you haven&#039;t already done so, just for the sake of it.&lt;/p&gt;
&lt;p&gt;A more important change, however, is that the Drupal Developer Documentation on CVS no longer includes examples. Instead, the examples have now moved to their &lt;a href=&quot;http://drupal.org/project/examples&quot;&gt;own project&lt;/a&gt;. You can grab a snapshot of the appropriate version and extract it to your &lt;em&gt;developer&lt;/em&gt; subdirectory, which contains the Drupal Developer Documentation. Another useful option is to also grab this from CVS (see &quot;&lt;em&gt;&lt;a href=&quot;http://drupal.org/node/321&quot;&gt;Checking out from the contributions repository&lt;/a&gt;&lt;/em&gt;&quot; for detailed instructions):&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;bash geshifilter-bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;cvs&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-z6&lt;/span&gt; -d:pserver:anonymous:anonymous&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;@&lt;/span&gt;cvs.drupal.org:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;cvs&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;drupal-contrib checkout &lt;span style=&quot;color: #660033;&quot;&gt;-d&lt;/span&gt; developer&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;examples contributions&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;modules&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;examples&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Don&#039;t forget to update your developer documentation to the latest version as well. Especially if you&#039;re using Drupal 6, you may want to switch to the appropriate branch as follows (from the Drupal base directory, replace &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;-r DRUPAL-6--1&lt;/code&gt;&lt;/span&gt; with &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;-A&lt;/code&gt;&lt;/span&gt; for the latest HEAD version):&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;bash geshifilter-bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;cvs&lt;/span&gt; -d:pserver:anonymous:anonymous&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;@&lt;/span&gt;cvs.drupal.org:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;cvs&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;drupal-contrib update &lt;span style=&quot;color: #660033;&quot;&gt;-d&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-P&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-r&lt;/span&gt; DRUPAL-&lt;span style=&quot;color: #000000;&quot;&gt;6&lt;/span&gt;--&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt; developer&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Just for completeness&#039; sake, if you want to do a clean checkout of all this developer documentation, enter the following two commands:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;bash geshifilter-bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;cvs&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-z6&lt;/span&gt; -d:pserver:anonymous:anonymous&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;@&lt;/span&gt;cvs.drupal.org:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;cvs&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;drupal-contrib checkout &lt;span style=&quot;color: #660033;&quot;&gt;-r&lt;/span&gt; DRUPAL-&lt;span style=&quot;color: #000000;&quot;&gt;6&lt;/span&gt;--&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-d&lt;/span&gt; developer contributions&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;docs&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;developer
&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;cvs&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-z6&lt;/span&gt; -d:pserver:anonymous:anonymous&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;@&lt;/span&gt;cvs.drupal.org:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;cvs&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;drupal-contrib checkout &lt;span style=&quot;color: #660033;&quot;&gt;-r&lt;/span&gt; DRUPAL-&lt;span style=&quot;color: #000000;&quot;&gt;6&lt;/span&gt;--&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-d&lt;/span&gt; developer&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;examples contributions&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;modules&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;examples&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;All done? Good, we&#039;re ready to move on again...&lt;/p&gt;
&lt;h4&gt;Noticed some problems?&lt;/h4&gt;
&lt;p&gt;If you used the documentation we created last time, you may have noticed some odd problems. We&#039;ll skip the broken links on the main page for now. First we deal with missing text. Look at the documentation of the &lt;a href=&quot;http://api.drupal.org/api/function/t&quot;&gt;t()&lt;/a&gt; function (in &lt;em&gt;includes/common.inc&lt;/em&gt;). You can see what&#039;s wrong in the screenshot as well:&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/brokendoc1.png&quot; title=&quot;Broken Documentation&quot; rel=&quot;lightshow[fixingdoc]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/brokendoc1.png&quot; alt=&quot;Broken Documentation&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Notice how the &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;@variable&lt;/code&gt;&lt;/span&gt; is missing in the second bullet, and the &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;%&lt;/code&gt;&lt;/span&gt; character in front of &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;variable&lt;/code&gt;&lt;/span&gt; in the third bullet? A closer look at the Doxygen error output will tell us that it doesn&#039;t know the &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;@variable&lt;/code&gt;&lt;/span&gt; command. &lt;a href=&quot;http://www.stack.nl/~dimitri/doxygen/commands.html&quot;&gt;Doxygen commands&lt;/a&gt; are prefixed with a &#039;@&#039; or &#039;\&#039; in Doxygen, but the code Drupal API module (which is used to run &lt;a href=&quot;http://api.drupal.org&quot;&gt;api.drupal.org&lt;/a&gt;) happily ignores any commands it doesn&#039;t know. Doxygen doesn&#039;t, which causes an issue here. With the &#039;%&#039; character, we tell Doxygen that we do not want the word &#039;variable&#039; to be auto-linked. But again, the Drupal API module doesn&#039;t seem to use that and simply prints it out.&lt;/p&gt;
&lt;p&gt;We will take a few steps to solve these problems. Part one: time for some PHP &lt;a href=&quot;http://www.php.net/manual/en/book.pcre.php&quot;&gt;Regular Expressions&lt;/a&gt; magic!&lt;/p&gt;
&lt;h4&gt;A basic preprocessor&lt;/h4&gt;
&lt;p&gt;Create a new plain text file with a nice name such as &lt;em&gt;perprocess-drupal-doxygen.php&lt;/em&gt;. This tells us exactly what it does: preprocess Drupal files for Doxygen; and it&#039;s a PHP script. Let&#039;s set up a quick base class first by pasting the following code in the file:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;#!/usr/bin/php&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;abstract &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; Preprocessor &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$_filename&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; __construct &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;_filename &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; process&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file_get_contents&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;file_get_contents&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;_filename&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Convert Mac/Win line breaks to Unix format.&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\r&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\r&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;doProcess&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;protected&lt;/span&gt; abstract &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; doProcess&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Note that I have omitted the comments in this (and further) code snippets; you can download the full script at the bottom of this post, with all comments.&lt;/p&gt;
&lt;p&gt;Save the file and make sure you have execute permissions. On Windows, you may want to set up a file association such that *.phpx is executed by php (or php_cli), and name the file accordingly. Another option is creating a .cmd file which runs the PHP script (passing all comand line arguments).&lt;/p&gt;
&lt;p&gt;The blob sets up a few things. The first line says the script is to be executed by PHP. Furthermore there is a &lt;em&gt;Preprocessor&lt;/em&gt; class, which reads a file and changes all types of newlines into Unix format, for convenience (code borrowed from the Drupal API module). It then calls the (abstract) &lt;em&gt;doProcess()&lt;/em&gt; function on the content. We&#039;ll work on this function in two child classes (the second one in part 3B). These will do the actual work.&lt;/p&gt;
&lt;p&gt;Now we&#039;ll add the &lt;em&gt;CodePreprocessor&lt;/em&gt; class which will handle our code files (.php, .module, .inc etc.). First things first: let&#039;s go and detect the comment blocks.&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; CodePreprocessor &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;extends&lt;/span&gt; Preprocessor &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; __construct &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    Preprocessor&lt;span style=&quot;color: #339933;&quot;&gt;::&lt;/span&gt;__construct&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; doProcess&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Beyond Drupal&#039;s API module: we also work on blocks started with &amp;quot;/*!&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace_callback&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace_callback&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;@/\*[\*!](.*?)\*/@s&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;                                      &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;processCommentBlock&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;                                      &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// And those with at least two lines of /// or //!&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace_callback&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace_callback&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;@(//[/!])[^\\n]*\\n(\\1[^\\n]*\\n)+@s&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;                                      &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;processCommentBlock&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;                                      &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Return processed file contents&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; processCommentBlock&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$matches&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$matches&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// ADD FUNCTION CALLS HERE LATER&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;doProcess&lt;/em&gt; implementation here finds comment structures indicating Doxygen documentation. Unlike Drupal&#039;s API module, this includes comment blocks starting with &#039;/*!&#039;, as well as blocks of at least two lines starting with &#039;///&#039; or &#039;//!&#039;. These are all blocks Doxygen will process, so we do the same. On each comment block, we call &lt;em&gt;processCommentBlock&lt;/em&gt;. This function gets the matches array from the regular expression (&lt;em&gt;$matches[0]&lt;/em&gt; being the complete match), and expects a string in return. The match will be replaced with that string. All in all a very useful place to do our processing.&lt;/p&gt;
&lt;h4&gt;Escaping unknown commands&lt;/h4&gt;
&lt;p&gt;Now for some actual preprocessing code. To get Doxygen to keep the &#039;@&#039; and &#039;%&#039; characters in the output (to solve our first problem), we have to escape them, i.e. put a backslash in front of them. But we don&#039;t want actual Doxygen commands to be ignored. Also, we might as well solve another problem at the same time: &lt;a href=&quot;http://api.drupal.org/api/function/drupal_match_path&quot;&gt;drupal_match_path()&lt;/a&gt; has documentation containing &quot;\r&quot; and &quot;\n&quot;. Drupal&#039;s API module doesn&#039;t replace the &quot;\n&quot; command, while Doxygen will throw in a newline. Also, Doxygen will complain about now knowing &quot;\r&quot; and discard it. Hence we&#039;ll also go and escape unknown backslash commands, and (valid!) backslash commands followed by a single letter (&lt;em&gt;\a&lt;/em&gt;, &lt;em&gt;\n&lt;/em&gt; etc), as long as they&#039;re not escaped already. So: &lt;em&gt;\r&lt;/em&gt; will become &lt;em&gt;\\r&lt;/em&gt; (and &lt;em&gt;\r&lt;/em&gt; again in the HTML output), but something saying &lt;em&gt;\\e scaped&lt;/em&gt; will remain the same.&lt;/p&gt;
&lt;p&gt;So, it&#039;s now time for some more magic with regular expressions. Add a function in the &lt;em&gt;CodePreprocessor&lt;/em&gt; class, which starts off listing all the known Doxygen commands:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; escapeUnknownCommands&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    static &lt;span style=&quot;color: #000088;&quot;&gt;$commandsArray&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;a&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;addindex&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;addtogroup&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;anchor&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;arg&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;attention&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;author&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;b&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;brief&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;bug&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;c&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;callgraph&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;callgraph&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;callergraph&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;category&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;class&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;code&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;cond&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;copybrief&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;copydetails&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;copydoc&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;date&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;def&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;defgroup&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;deprecated&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;details&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;dir&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;dontinclude&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;dot&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;dotfile&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;e&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;else&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;elseif&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;em&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endcode&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endcond&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;enddot&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endhtmlonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endif&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endlatexonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endlink&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endmanonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endmsc&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endverbatim&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endxmlonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;enum&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;example&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;exception&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;extends&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;file&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;fn&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;headerfile&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;hideinitializer&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;htmlinclude&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;htmlonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;if&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;ifnot&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;image&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;implements&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;include&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;includelineno&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;ingroup&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;internal&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;invariant&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;interface&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;latexonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;li&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;line&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;link&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;mainpage&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;manonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;memberof&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;msc&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;n&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;name&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;namespace&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;nosubgrouping&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;note&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;overload&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;p&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;package&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;page&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;paragraph&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;param&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;post&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;pre&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;private&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;privatesection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;property&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;protected&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;protectedsection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;public&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;publicsection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;protocol&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;ref&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;relates&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;relatesalso&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;remarks&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;return&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;retval&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;sa&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;section&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;see&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;showinitializer&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;since&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;skip&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;skipline&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;struct&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;subpage&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;subsection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;subsubsection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;test&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;throw&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;todo&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;tparam&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;typedef&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;union&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;until&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;var&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;verbatim&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;verbinclude&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;version&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;warning&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;weakgroup&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;xmlonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;xrefitem&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;annotatedclasslist&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;classhierarchy&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;define&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;functionindex&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;header&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;headerfilelist&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;inherit&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;l&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;postheader&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    static &lt;span style=&quot;color: #000088;&quot;&gt;$backslashCommandsArray&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;addindex&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;addtogroup&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;anchor&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;arg&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;attention&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;author&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;brief&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;bug&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;callgraph&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;callgraph&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;callergraph&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;category&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;class&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;code&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;cond&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;copybrief&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;copydetails&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;copydoc&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;date&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;def&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;defgroup&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;deprecated&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;details&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;dir&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;dontinclude&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;dot&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;dotfile&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;else&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;elseif&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;em&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endcode&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endcond&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;enddot&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endhtmlonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endif&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endlatexonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endlink&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endmanonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endmsc&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endverbatim&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;endxmlonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;enum&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;example&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;exception&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;extends&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;file&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;fn&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;headerfile&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;hideinitializer&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;htmlinclude&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;htmlonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;if&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;ifnot&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;image&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;implements&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;include&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;includelineno&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;ingroup&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;internal&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;invariant&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;interface&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;latexonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;li&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;line&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;link&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;mainpage&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;manonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;memberof&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;msc&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;name&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;namespace&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;nosubgrouping&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;note&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;overload&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;package&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;page&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;paragraph&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;param&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;post&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;pre&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;private&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;privatesection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;property&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;protected&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;protectedsection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;public&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;publicsection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;protocol&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;ref&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;relates&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;relatesalso&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;remarks&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;return&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;retval&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;sa&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;section&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;see&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;showinitializer&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;since&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;skip&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;skipline&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;struct&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;subpage&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;subsection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;subsubsection&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;test&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;throw&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;todo&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;tparam&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;typedef&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;union&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;until&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;var&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;verbatim&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;verbinclude&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;version&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;warning&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;weakgroup&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;xmlonly&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;xrefitem&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;annotatedclasslist&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;classhierarchy&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;define&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;functionindex&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;header&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;headerfilelist&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;inherit&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;postheader&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    static &lt;span style=&quot;color: #000088;&quot;&gt;$noWordCommands&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;f[\$\[\]\{\}]&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;[\$@\\\\&amp;amp;~&amp;lt;&amp;gt;#%&amp;quot;]&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Now we&#039;ll use these arrays to construct the major regular expressions we need: two to escape unknown commands. Oh, and we don&#039;t forget to escape all those unescaped percentage characters. Expand the function you just made with:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    static &lt;span style=&quot;color: #000088;&quot;&gt;$backslashCommandRegex&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    static &lt;span style=&quot;color: #000088;&quot;&gt;$commandsRegex&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    static &lt;span style=&quot;color: #000088;&quot;&gt;$noWordCommandsRegex&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/isset&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$backslashCommandRegex&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$commandsRegex&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/(^|(?&amp;lt;=\W))(?&amp;lt;!\\\\|@)@(?!&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/implode&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\W|&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$commandsArray&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\W|&#039;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;                     &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/implode&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;|&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$noWordCommands&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;)/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$backslashCommandRegex&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/(^|(?&amp;lt;=\W))(?&amp;lt;!\\\\|@)\\\\(?!&#039;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;                             &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/implode&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\W|&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$backslashCommandsArray&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\W|&#039;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;                             &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/implode&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;|&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$noWordCommands&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;)/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// First replace all unknown backslash commands that occur before commands&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$backslashCommandRegex&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\\\\\\\\&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// And unknown &#039;@&#039; prefixed commands&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$commandsRegex&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\@&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Escape all unescaped percentage characters&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/(?&amp;lt;!\\\\|@)%/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\\\\%&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The regular expressions look complicated (especially because we have to do a lot of escaping of backslashes ourselves), but basically work as described above. The &#039;&lt;em&gt;noWordCommands&lt;/em&gt;&#039; array is separate, as such commands followed by a letter will be kept intact. If a regular command is followed by extra letters, we should still escape it (e.g. &lt;em&gt;@var&lt;/em&gt; should remain as such, but &lt;em&gt;@variable&lt;/em&gt; should become &lt;em&gt;\@variable&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Now we still need to call the new function: place the following line in the main &lt;em&gt;processCommentBlock()&lt;/em&gt; function as described earlier, near the clearly marked comment:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;escapeUnknownCommands&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h4&gt;Try it out&lt;/h4&gt;
&lt;p&gt;Before we can actually use our code, we&#039;ll have to add some code to control the preprocessor, at the bottom of the script (outside any classes):&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Default to processing stdin if no arguments are given&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$argc&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000088;&quot;&gt;$argc&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000088;&quot;&gt;$argv&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;-&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Process all files in argument list&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$i&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$i&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$argc&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$argv&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;php://stdin&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Find out type of file (based on filename)&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000088;&quot;&gt;$processor&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000088;&quot;&gt;$info&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/pathinfo&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;pathinfo&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$info&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;extension&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/in_array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;in_array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$info&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;extension&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;html&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;htm&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;xhtml&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// HTML Processing is for later...&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #000088;&quot;&gt;$processor&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; CodePreprocessor&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$filename&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Process file&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #b1b100;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$processor&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This code will create the &lt;em&gt;CodePreprocessor&lt;/em&gt; (we&#039;ll add a separate one for HTML files later). For each of the files in the script&#039;s arguments, we&#039;ll process the code and print out the results. It will fallback to standard input, allowing us to reuse this script for something outside Doxygen, if we ever find the need (&lt;em&gt;It was mainly useful for debugging the script above, allowing me to run it on selections or other files straight from my &lt;a href=&quot;http://www.kdevelop.org&quot;&gt;IDE&lt;/a&gt;&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;So let&#039;s try this script out now. Save it (I&#039;ll be using &lt;em&gt;/home/cheetah/public_html/drupal.api/preprocess-drupal-doxygen.php&lt;/em&gt; here) and open up the Doxygen wizard once again (as in &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2&quot;&gt;part two&lt;/a&gt;). Change the &lt;strong&gt;INPUT_FILTER&lt;/strong&gt; in the &lt;strong&gt;Input&lt;/strong&gt; topic to point to your script. You may also want to add it to the excludes list (add &lt;em&gt;preprocess-drupal-doxygen.php&lt;/em&gt; the &lt;strong&gt;EXCLUDE&lt;/strong&gt; setting in the &lt;strong&gt;Input&lt;/strong&gt; topic), if you keep the script in your Drupal directory. This will prevent it from being included in your Drupal documentation.&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/doxywizard4.png&quot; title=&quot;Doxywizard - INPUT_FILTER setting&quot; rel=&quot;lightshow[fixingdoc]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/doxywizard4.png&quot; alt=&quot;Doxywizard - INPUT_FILTER setting&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/doxywizard5.png&quot; title=&quot;Doxywizard - EXCLUDE setting&quot; rel=&quot;lightshow[fixingdoc]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/doxywizard5.png&quot; alt=&quot;Doxywizard - EXCLUDE setting&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Now if you run Doxygen and check out the documentation, you&#039;ll see if everything went well. If so, the documentation of &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;t()&lt;/code&gt;&lt;/span&gt; should now look as it does &lt;a href=&quot;http://api.drupal.org/api/function/t&quot;&gt;online&lt;/a&gt;. Good.&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/fixeddoc1.png&quot; title=&quot;Repaired Documentation&quot; rel=&quot;lightshow[fixingdoc]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/fixeddoc1.png&quot; alt=&quot;Repaired Documentation&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/brokenfixeddoc1.png&quot; title=&quot;Broken and Repaired Documentation&quot; rel=&quot;lightshow[fixingdoc]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/brokenfixeddoc1.png&quot; alt=&quot;Broken and Repaired Documentation&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h4&gt;Broken links&lt;/h4&gt;
&lt;p&gt;Something else you&#039;ll notice from the start is that the main page of your documentation will have some broken links. The group links (Module system, Database abstraction layer, etcetera) work just fine, as do those to the example modules, if you have included them in your documentation. However, the links to the constants, global variables and the in-depth discussions are all broken. Let&#039;s get those fixed as well, by expanding the preprocessor.&lt;/p&gt;
&lt;p&gt;First off, we want to fix the link to all the constants, or &lt;em&gt;enums&lt;/em&gt; in Doxygen. We know there&#039;s a page, but it&#039;s not at &lt;em&gt;/api/constants&lt;/em&gt;. We want to use &lt;em&gt;globals_enum.html&lt;/em&gt; instead; this page has all the &lt;em&gt;define()&lt;/em&gt; elements found in the code. So, we make it a regular anchor link (or &amp;lt;a&amp;gt; tag):&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; makeAnchorLinks&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$links&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$links&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$original&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$new&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$re&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/@link &#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$original&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;(\/\S*)?\s(.*\S)\s*@endlink/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$re&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;&amp;lt;a class=&amp;quot;el&amp;quot; href=&amp;quot;&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$new&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;&amp;quot;&amp;gt;\\2&amp;lt;/a&amp;gt;&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The following function will change our &lt;em&gt;/api/globals&lt;/em&gt; link to refer to the &lt;em&gt;globals.php&lt;/em&gt; documentation. This file, in the extra developer documentation, contains documented versions of all the Drupal (core) globals. Another option is to link to &lt;em&gt;globals_vars.html&lt;/em&gt; using the function above, which will include all global variables (and not just Drupal core ones). If you opt for that choice, the following function will not be necessary unless you find more broken links you want to fix.&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; replaceLinks&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$links&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$links&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$original&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$new&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$re&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/@link &#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;\/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$original&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;(\/\S*)?\s(.*\S)\s*@endlink/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$re&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;@link &#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$new&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039; \\2 @endlink&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Place these both in your &lt;em&gt;CodePreprocessor&lt;/em&gt; class. Now call them as follows, after the call to &lt;em&gt;escapeUnknownCommands&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;makeAnchorLinks&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/api/constants&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;globals_enum.html&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// &#039;/api/globals&#039; =&amp;gt; &#039;globals_vars.html&#039;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: bold; font-style: italic;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;replaceLinks&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;        &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/api/globals&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;globals.php&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;      &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Note the commented line? That&#039;s the alternative for the globals; remove/comment the other line mentioning &lt;em&gt;/api/globals&lt;/em&gt; if you prefer the &lt;em&gt;global_vars.html&lt;/em&gt; page (you can still access that through the Files, then Globals in the Doxygen navigation). Note that the code is flexible in that you can easily add more links. It will also automatically change longer URLs, if the extra part starts with a forward slash (e.g. &lt;em&gt;/api/constants/7&lt;/em&gt; will also be caught as a whole, but &lt;em&gt;/api/constants_7&lt;/em&gt; is considered to be a different link).&lt;/p&gt;
&lt;p&gt;Now to deal with any external links (like the &quot;&lt;a href=&quot;http://drupal.org/node/547518&quot;&gt;Drupal Programming from an Object-Oriented Perspective&lt;/a&gt;&quot; link on the main page). The following function will remove the used &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;@link&lt;/code&gt;&lt;/span&gt; command, and replace it with an HTML tag again, which will not be touched by Doxygen.&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; replaceExternalLinks&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;    &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;/@link (([a-zA-Z]+:\/\/|mailto\:)\S*)\s+(.*\S)\s*@endlink/&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;                 &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;&amp;lt;a class=&amp;quot;el&amp;quot; href=&amp;quot;\\1&amp;quot;&amp;gt;\\3&amp;lt;/a&amp;gt;&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;font-family: monospace; font-weight: normal;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;And the call:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;php geshifilter-php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;pre style=&quot;font-family: monospace; font-weight: normal; font-style: normal&quot;&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;replaceExternalLinks&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$contents&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Note that any protocol (&lt;em&gt;http://&lt;/em&gt;, &lt;em&gt;ftp://&lt;/em&gt; etc) will be caugt as external. The &lt;em&gt;mailto:&lt;/em&gt; protocol is dealt with somewhat separately, as it doesn&#039;t have the two slashes after it, but other than that everything&#039;s the same. The whole URL, until the first space, is considered to be the actual URL to link to. The rest is the text that is linked. If you want to go a little bit further, you could even add code to show the URL as linked text, if nothing else is present (Doxygen will work that one out if you remove the &lt;em&gt;@link&lt;/em&gt; and &lt;em&gt;@endlink&lt;/em&gt; commands). I&#039;ll leave that as exercise to the reader.&lt;/p&gt;
&lt;h4&gt;Summary&lt;/h4&gt;
&lt;p&gt;So... wow. This post has turned out longer than expected. I&#039;ve attached a renewed Doxyfile (with only the extra &lt;strong&gt;INPUT_FILTER&lt;/strong&gt; and expanded &lt;strong&gt;EXCLUDE&lt;/strong&gt; settings), as well as the code so far to this post. The major pains in the Doxygen code are now solved, making the documentation of Drupal more suitable for Doxygen itself. All of this work is useful whether or not you use the Qt Assistant; as soon as you use Doxygen instead of Drupal&#039;s API module, you&#039;ll probably want to have issues described here to be fixed.&lt;/p&gt;
&lt;p&gt;Next is not part 4, but 3b. We&#039;ll continue fixing the documentation by having Doxygen properly include and find the HTML pages containing documentation, such as the Forms API reference. It&#039;ll be a quicker now we have a base to work from!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other posts in this series:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;Part 1&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2&quot;&gt;Part 2&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-08-10/drupal-development-made-easier-qt-assistant-part-3b&quot;&gt;Part 3b&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2011-01-23/drupal-development-made-easier-qt-assistant-part-4&quot;&gt;Part 4&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;table id=&quot;attachments&quot; class=&quot;sticky-enabled&quot;&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class=&quot;odd&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/Doxyfile_0.&quot;&gt;Doxyfile.&lt;/a&gt;&lt;/td&gt;&lt;td&gt;62.95 KB&lt;/td&gt; &lt;/tr&gt;
 &lt;tr class=&quot;even&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/preprocess-drupal-doxygen.php_.txt&quot;&gt;preprocess-drupal-doxygen.php_.txt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;9.55 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
 <comments>http://www.simply-life.net/cheetah/blog/2010-07-27/drupal-development-made-easier-qt-assistant-part-3a#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/drupal">Drupal</category>
 <category domain="http://www.simply-life.net/cheetah/tag/open-source">Open Source</category>
 <category domain="http://www.simply-life.net/cheetah/tag/qt">Qt</category>
 <enclosure url="http://www.simply-life.net/cheetah/system/files/Doxyfile_0." length="64461" type="application/octet-stream" />
 <pubDate>Tue, 27 Jul 2010 09:07:02 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">68 at http://www.simply-life.net/cheetah</guid>
</item>
<item>
 <title>MacDesperate now Online!</title>
 <link>http://www.simply-life.net/cheetah/blog/2009-12-08/macdesperate-now-online</link>
 <description>&lt;p&gt;After quite a long time (well over a year), we finally launched MacDesperate last Sunday. We are me, &lt;a href=&quot;http://www.rosana.co.uk/&quot; rel=&quot;nofollow&quot;&gt;Rosana&lt;/a&gt;, &lt;a href=&quot;http://alex.simsnetwork.com/&quot; rel=&quot;nofollow&quot;&gt;Alex&lt;/a&gt; and &lt;a href=&quot;http://www.myshuno.net/&quot; rel=&quot;nofollow&quot;&gt;Wouter&lt;/a&gt;. Of course, MacDesperate is powered by Drupal. Rosana and Wouter are saving up for macs - they&#039;re the real MacDesperates - and my &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-14/donation-goals-module-drupal&quot; rel=&quot;nofollow&quot;&gt;Donation Goals&lt;/a&gt; module helps them keep track of their progress. The first donations are already in. Now it&#039;s time for you to support them! Don&#039;t hesitate and go to &lt;a href=&quot;http://www.macdesperate.com&quot; rel=&quot;nofollow&quot;&gt;MacDesperate.com&lt;/a&gt;! We&#039;ve got goodies!&lt;/p&gt;
</description>
 <comments>http://www.simply-life.net/cheetah/blog/2009-12-08/macdesperate-now-online#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/donation-goals">donation goals</category>
 <category domain="http://www.simply-life.net/cheetah/tag/drupal">Drupal</category>
 <category domain="http://www.simply-life.net/cheetah/tag/macdesperate">MacDesperate</category>
 <pubDate>Tue, 08 Dec 2009 18:56:41 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">66 at http://www.simply-life.net/cheetah</guid>
</item>
<item>
 <title>Drupal Development made easier with Qt Assistant - Part 2</title>
 <link>http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2</link>
 <description>&lt;!--break--&gt;&lt;!--break--&gt;&lt;p&gt;In the &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;previous part&lt;/a&gt; of this walk-through, we installed the necessary software to get our Drupal API documentation in Qt Assistant. The next step is to actually generate the documentation so we can browse through it, search it and more. If you haven&#039;t done so already, read &lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;part 1&lt;/a&gt; so you&#039;re sure to have the right software.&lt;/p&gt;
&lt;h4&gt;Creating a Doxyfile&lt;/h4&gt;
&lt;p&gt;The first thing we need to do is creating a configuration file for Doxygen. This will contain instructions for Doxygen about the formats you want the documentation to be in, where to get the documentation from, etc. I&#039;ll show the settings in the graphical tool, &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;doxywizard&lt;/code&gt;&lt;/span&gt;. Of course it&#039;s also possible to let the &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;doxygen&lt;/code&gt;&lt;/span&gt; command generate the file for you so you can edit it manually (with a text editor). Either way is fine. If you want to use the Doxyfile generated through this tutorial straight away, scroll to the bottom of this post to download it.&lt;/p&gt;
&lt;p&gt;So, let&#039;s start the Doxygen wizard. You should find this in your launcher menu, probably under the Development submenu, or you can just run &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;doxywizard&lt;/code&gt;&lt;/span&gt; from a terminal. The window you get presented asks you, as a first step, to select the working directory. Point this to your Drupal directory. For me this would be &lt;em&gt;/home/cheetah/public_html/drupal.api&lt;/em&gt;. Now, as we want to set some advanced settings, we skip straight to the &lt;em&gt;Expert&lt;/em&gt; tab to configure everything.&lt;/p&gt;
&lt;p&gt;The first things to pay attention for are the &lt;strong&gt;PROJECT_NAME&lt;/strong&gt; (&quot;&lt;em&gt;drupal&lt;/em&gt;&quot;), &lt;strong&gt;PROJECT_NUMBER&lt;/strong&gt; (&quot;&lt;em&gt;6&lt;/em&gt;&quot; or whichever Drupal version you&#039;re working with), and the &lt;strong&gt;OUTPUT_DIRECTORY&lt;/strong&gt; settings. For the last setting, creating a new place for Doxygen to dump its files in is the easiest way to prevent the Doxygen output from cluttering your Drupal installation. I&#039;ve put it in a &lt;em&gt;doxygen&lt;/em&gt; subdirectory (&quot;&lt;em&gt;/home/cheetah/public_html/drupal.api/doxygen&lt;/em&gt;&quot;). You&#039;ll probably also want to enable the &lt;strong&gt;REPEAT_BRIEF&lt;/strong&gt; and &lt;strong&gt;ALWAYS_DETAILED_SEC&lt;/strong&gt; as well. The &lt;strong&gt;STRIP_FROM_PATH&lt;/strong&gt; setting should be empty, but it also doesn&#039;t hurt to enter the base directory of your Drupal installation (this way, if your run Doxygen outside the Drupal directory, it&#039;ll still properly strip the path from the filenames). I&#039;ve also enabled the &lt;strong&gt;QT_AUTOBRIEF&lt;/strong&gt; and &lt;strong&gt;OPTIMIZE_OUTPUT_FOR_C&lt;/strong&gt; options.&lt;/p&gt;
&lt;p&gt;There&#039;s a final important setting on the &lt;strong&gt;Project&lt;/strong&gt; topic, which is the &lt;strong&gt;EXTENSION_MAPPING&lt;/strong&gt;. Generally, Drupal uses &lt;em&gt;*.php&lt;/em&gt;, &lt;em&gt;*.module&lt;/em&gt; and &lt;em&gt;*.inc&lt;/em&gt; filenames for code. However, we need to tell Doxygen that these are PHP files. Add &quot;&lt;em&gt;module=PHP&lt;/em&gt;&quot; and &quot;&lt;em&gt;install=PHP&lt;/em&gt;&quot; (according to the documentation, you should omit the &quot;.&quot; in front of the extension).&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/doxywizard1.png&quot; title=&quot;DoxyWizard - Project Settings&quot; rel=&quot;lightshow[doxywizard]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/doxywizard1.png&quot; alt=&quot;DoxyWizard - Project Settings&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Next tab is the &lt;strong&gt;Build&lt;/strong&gt; topic. We want to get all the documentation, so we extract &lt;strong&gt;ALL&lt;/strong&gt;, &lt;strong&gt;PRIVATE&lt;/strong&gt;, &lt;strong&gt;STATIC&lt;/strong&gt;, &lt;strong&gt;LOCAL_CLASSES&lt;/strong&gt; and &lt;strong&gt;LOCAL_METHODS&lt;/strong&gt;. The &lt;strong&gt;SHOW_DIRECTORIES&lt;/strong&gt; setting may be useful to have the directory structure visible in the documentation. We skip straight to the &lt;strong&gt;Input&lt;/strong&gt; topic, and add our Drupal directory as &lt;strong&gt;INPUT&lt;/strong&gt; setting. Important is the &lt;strong&gt;FILE_PATTERNS&lt;/strong&gt; setting: this tells Doxygen which files contain documentation. The &lt;em&gt;*.php&lt;/em&gt; and &lt;em&gt;*.inc&lt;/em&gt; should normally already be in there, but for Drupal add the &lt;em&gt;*.module&lt;/em&gt; and &lt;em&gt;*.install&lt;/em&gt; patterns as well. This way Doxygen should extract documentation from most if not all of the code files in Drupal (unfortunately Doxygen doesn&#039;t work well with Javascript).&lt;/p&gt;
&lt;p&gt;Also enable the &lt;strong&gt;RECURSIVE&lt;/strong&gt; option, otherwise you&#039;ll need to tell Doxygen explicitly which directories it should look in for documentation, in the &lt;strong&gt;INPUT&lt;/strong&gt; setting. If you keep a directory with backups of old modules within the Drupal directory, enter its path in the &lt;strong&gt;EXCLUDE&lt;/strong&gt; setting (e.g. &quot;&lt;em&gt;backup&lt;/em&gt;&quot;). As &lt;strong&gt;EXCLUDE_PATTERNS&lt;/strong&gt; some useful entries may be &lt;em&gt;*/CVS/*&lt;/em&gt;, &lt;em&gt;*/.svn/*&lt;/em&gt;, &lt;em&gt;*/.git/*&lt;/em&gt; (so Doxygen skips version-controlled directories), plus &lt;em&gt;*/settings.php&lt;/em&gt; and &lt;em&gt;*/*.settings.php&lt;/em&gt; to ignore site-specific settings files.&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/doxywizard2.png&quot; title=&quot;DoxyWizard - Input Settings&quot; rel=&quot;lightshow[doxywizard]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/doxywizard2.png&quot; alt=&quot;DoxyWizard - Input Settings&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Next up is the &lt;strong&gt;HTML&lt;/strong&gt; topic, in which we configure the HTML output Doxygen generates. Yes, we want to generate HTML (switch on &lt;strong&gt;GENERATE_HTML&lt;/strong&gt;) in the &lt;em&gt;html&lt;/em&gt; subdirectory (&lt;strong&gt;HTML_OUTPUT&lt;/strong&gt;) with the &lt;em&gt;.html&lt;/em&gt; extension for the files (&lt;strong&gt;HTML_FILE_EXTENSION&lt;/strong&gt;). Now a very important setting to generate the Qt Help files, which Qt Assistant uses. Switch on &lt;strong&gt;GENERATE_QHP&lt;/strong&gt;. For &lt;strong&gt;QCH_FILE&lt;/strong&gt;, which just became enabled, set &lt;em&gt;drupal-6.qch&lt;/em&gt; (or just &lt;em&gt;drupal.qch&lt;/em&gt;, or replace the 6 with the version of Drupal you&#039;re working with). Set the &lt;strong&gt;QHP_NAMESPACE&lt;/strong&gt; to &lt;em&gt;org.drupal.6&lt;/em&gt; (again, replace the version number). Set &lt;em&gt;all&lt;/em&gt; as the &lt;strong&gt;QHP_VIRTUAL_FOLDER&lt;/strong&gt; - this will come in handy later. Also set the filter settings: &lt;strong&gt;QHP_CUST_FILTER_NAME&lt;/strong&gt; to &lt;em&gt;&quot;Drupal 6 (all)&quot;&lt;/em&gt;, and set both &lt;strong&gt;QHP_CUST_FILTER_ATTRS&lt;/strong&gt; and &lt;strong&gt;QHP_SECT_FILTER_ATTRS&lt;/strong&gt; to &lt;em&gt;drupal drupal-6&lt;/em&gt;. Finally, we set the path to the &quot;&lt;em&gt;qhelpgenerator&lt;/em&gt;&quot; program (&quot;&lt;em&gt;qhelpgenerator.exe&lt;/em&gt;&quot; on Windows, I assume) in the &lt;strong&gt;QHG_LOCATION&lt;/strong&gt; setting. This is probably something like &quot;&lt;em&gt;/usr/bin/qhelpgenerator&lt;/em&gt;&quot; or &quot;&lt;em&gt;C:/Qt/bin/qhelpgenerator.exe&lt;/em&gt;&quot;. Leave the other settings at their defaults (&lt;strong&gt;DISABLE_INDEX&lt;/strong&gt; off, &lt;strong&gt;GENERATE_TREEVIEW&lt;/strong&gt; to &lt;em&gt;none&lt;/em&gt;, etc.).&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/doxywizard3.png&quot; title=&quot;DoxyWizard - HTML Settings&quot; rel=&quot;lightshow[doxywizard]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/doxywizard3.png&quot; alt=&quot;DoxyWizard - HTML Settings&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Finally, head to the &lt;strong&gt;LaTeX&lt;/strong&gt;, &lt;strong&gt;RTF&lt;/strong&gt;, &lt;strong&gt;Man&lt;/strong&gt; and &lt;strong&gt;XML&lt;/strong&gt; topics, and turn output for each of these off. We won&#039;t be using these. Finally, if you want to, enable or disable class diagrams on the &lt;strong&gt;Dot&lt;/strong&gt; topic. This will make a difference for some contributed modules (mostly Views).&lt;/p&gt;
&lt;h4&gt;First Run&lt;/h4&gt;
&lt;p&gt;We&#039;re all set now, so let&#039;s run Doxygen! Go to the &lt;strong&gt;Run&lt;/strong&gt; tab, click the &lt;strong&gt;Run doxygen&lt;/strong&gt; button and let it do its work. When it&#039;s done (don&#039;t close the Doxygen Wizard until I tell you to!), click &quot;&lt;strong&gt;Show HTML Output&lt;/strong&gt;&quot; and your browser will start with the Drupal documentation right at your hands.  Unless you excluded the &quot;&lt;em&gt;sites&lt;/em&gt;&quot; subdirectory, you also get all the documentation of contributed modules as well. You may notice some problems with broken links (e.g. the Form API reference etc), and the documentation is a little bit messy if you have many contributed modules. We&#039;ll solve these problems in the next part. First, let&#039;s exit the wizard. It will ask us to save the configuration. Save it under its default name (that would be &quot;&lt;em&gt;/home/cheetah/public_html/drupal.api/doxygen/Doxyfile&lt;/em&gt;&quot; in my case). You&#039;ll find the sample file created in this tutorial at the bottom of this post.&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/documentation1.png&quot; title=&quot;Drupal Documentation&quot; rel=&quot;lightshow[doxywizard]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/documentation1.png&quot; alt=&quot;Drupal Documentation&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Last step for today is loading up the Qt Assistant with our documentation. This will require using a terminal/command line. First make sure you know where Qt Assistant is located. The program is called just &lt;strong&gt;assistant&lt;/strong&gt;, so for most platforms you should be able to find it using &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;which assistant&lt;/code&gt;&lt;/span&gt; on the terminal. On Windows, look in your Qt installation path, in the &lt;em&gt;bin&lt;/em&gt; directory. Now decide for a location for your Qt Help Collection file. Create an empty file with any name you like (e.g. &lt;em&gt;drupal-6.qhc&lt;/em&gt;). You can use the &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;touch&lt;/code&gt;&lt;/span&gt; command to do so, or by creating an empty file in that directory using your file manager (that would be the way to go for Windows users; use Explorer or Notepad and create the empty file. Make sure the extension is &lt;strong&gt;.qhc&lt;/strong&gt; and not &lt;strong&gt;.txt&lt;/strong&gt; or something else!). Now, assuming you&#039;ve chosen the filename to be &lt;strong&gt;drupal-6.qhc&lt;/strong&gt; in your home directory (and your username is &lt;em&gt;cheetah&lt;/em&gt;) enter in a terminal:&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;/usr/bin/assistant -collectionFile /home/cheetah/drupal-6.qhc&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You can also just set up a shortcut to do this, of course. You should see an empty Qt Assistant:&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/qtassistant4.png&quot; title=&quot;Empty Assistant&quot; rel=&quot;lightshow[drupalassistant]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/qtassistant4.png&quot; alt=&quot;Empty Assistant&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;As long as this is the first time you&#039;re starting up the assistant with this file, you can head to the &lt;em&gt;Edit&lt;/em&gt; &amp;gt; &lt;em&gt;Preferences&lt;/em&gt; menu. Go to the &lt;em&gt;Documentation&lt;/em&gt; tab, click &lt;em&gt;Add...&lt;/em&gt; and add the &lt;em&gt;drupal-6.qch&lt;/em&gt; file created by Doxygen (this will be in the &lt;em&gt;doxygen/html&lt;/em&gt; directory within your Drupal installation, if you followed this tutorial). Qt Assistant will start updating its indexes, and you get to see and search your documentation:&lt;/p&gt;
&lt;div class=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/qtassistant5.png&quot; title=&quot;Adding Collections to the Assistant&quot; rel=&quot;lightshow[drupalassistant]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/qtassistant5.png&quot; alt=&quot;Adding Collections to the Assistant&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/qtassistant6.png&quot; title=&quot;Drupal Documentation in Assistant&quot; rel=&quot;lightshow[drupalassistant]&quot;&gt;&lt;img src=&quot;http://www.simply-life.net/cheetah/system/files/imagecache/thumbnail/qtassistant6.png&quot; alt=&quot;Drupal Documentation in Assistant&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;You&#039;ll find out that once you restart the assistant with the same collectionFile parameter, the &lt;em&gt;Documentation&lt;/em&gt; tab will disappear from the preferences, even after removing and recreating the file. If this happened, you can still register and unregister help files from the collection file, from the command line as follows (change the filenames etc. of course):&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;assistant -collectionFile drupal-6.qhc -register /home/cheetah/public_html/drupal.api/doxygen/html/drupal-6.qch&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;To remove the help file from the collection again:&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;assistant -collectionFile drupal-6.qhc -unregister /home/cheetah/public_html/drupal.api/doxygen/html/drupal-6.qch&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;These commands will tell you if something useful happened, but won&#039;t actually start the assistant. Restart the assistant with just the &lt;em&gt;collectionFile&lt;/em&gt; parameter again to just see the documentation.&lt;/p&gt;
&lt;p&gt;Note that as long as the Qt Compressed Help file (the one generated by Doxygen) stays in the same place, you should be able to update it and see the changes in the assistant if you ever recreate the documentation. The assistant will automatically recreate its index and take care of such updates for you. Knowing that, you can create an icon that fires up the assistant for you, with the Drupal help loaded, so you can get that quick documentation access. Just use the above command above the empty assistant screenshot. Make sure you do give the proper path to the collection file!&lt;/p&gt;
&lt;h4&gt;Updates&lt;/h4&gt;
&lt;p&gt;If you ever want to update the documentation (for example because you added more contributed modules, updated Drupal to a newer version, etc), regenerate it with Doxygen. You can use the wizard to open the Doxyfile you saved, rerun Doxygen and the assistant should show the updated documentation after you start it again. It&#039;s as simple as that. Alternatively, using a terminal, head to your Drupal directory (or wherever you stored the Doxyfile) and simply call &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;doxygen&lt;/code&gt;&lt;/span&gt;. As long as you&#039;ve explicitly set the &lt;strong&gt;INPUT&lt;/strong&gt; setting above, then run &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;doxygen /path/to/Doxyfile&lt;/code&gt;&lt;/span&gt; and so you can even use a different filename for your Doxygen configuration. Of course you can also play with the various Doxygen settings, rerun doxygen, and you&#039;ll also get the documentation with the new settings in Qt Assistant.&lt;/p&gt;
&lt;p&gt;Of course you don&#039;t have to use a separate collection file (*.qhc) for each version of Drupal you have. You can put each version of Drupal in the same assistant. Now if you made sure you have different namespaces (hence we placed the version numbers in the configuration), you should be able to filter per version at the top of the UI.&lt;/p&gt;
&lt;h4&gt;Summary&lt;/h4&gt;
&lt;p&gt;Last time all we did was install the necessary software. This time we actually used it all in the most basic way, with success: the Qt Assistant now displays the Drupal documentation. This should be enough to get you started finding all the information of the Drupal API that you need. There are still some problems with broken links to special topics, there&#039;s no way to filter out specific module information, and so on.&lt;/p&gt;
&lt;p&gt;With the major steps taken, next time I&#039;ll dig a little deeper in fixing the most painful problems. It probably won&#039;t be as much work as this part. See you next time!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other posts in this series:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2009-11-10/drupal-development-made-easier-qt-assistant-part-1&quot;&gt;Part 1&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-07-27/drupal-development-made-easier-qt-assistant-part-3a&quot;&gt;Part 3a&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2010-08-10/drupal-development-made-easier-qt-assistant-part-3b&quot;&gt;Part 3b&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/blog/2011-01-23/drupal-development-made-easier-qt-assistant-part-4&quot;&gt;Part 4&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;table id=&quot;attachments&quot; class=&quot;sticky-enabled&quot;&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class=&quot;odd&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://www.simply-life.net/cheetah/system/files/Doxyfile.&quot;&gt;Doxyfile.&lt;/a&gt;&lt;/td&gt;&lt;td&gt;62.83 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
 <comments>http://www.simply-life.net/cheetah/blog/2009-11-22/drupal-development-made-easier-qt-assistant-part-2#comments</comments>
 <category domain="http://www.simply-life.net/cheetah/tag/drupal">Drupal</category>
 <category domain="http://www.simply-life.net/cheetah/tag/open-source">Open Source</category>
 <category domain="http://www.simply-life.net/cheetah/tag/qt">Qt</category>
 <enclosure url="http://www.simply-life.net/cheetah/system/files/Doxyfile." length="64337" type="application/octet-stream" />
 <pubDate>Sun, 22 Nov 2009 22:36:49 +0000</pubDate>
 <dc:creator>ChEeTaH</dc:creator>
 <guid isPermaLink="false">64 at http://www.simply-life.net/cheetah</guid>
</item>
</channel>
</rss>


