summaryrefslogtreecommitdiffstats
path: root/_promela_data_model_8h_source.html
diff options
context:
space:
mode:
Diffstat (limited to '_promela_data_model_8h_source.html')
-rw-r--r--_promela_data_model_8h_source.html201
1 files changed, 102 insertions, 99 deletions
diff --git a/_promela_data_model_8h_source.html b/_promela_data_model_8h_source.html
index bc7a8bf..4daea10 100644
--- a/_promela_data_model_8h_source.html
+++ b/_promela_data_model_8h_source.html
@@ -89,7 +89,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div id="nav-path" class="navpath">
<ul>
-<li class="navelem"><a class="el" href="dir_38c8d24aef3972a7f87b834274e76e31.html">plugins</a></li><li class="navelem"><a class="el" href="dir_7cfdd7134d700922c16c1342750b4180.html">datamodel</a></li><li class="navelem"><a class="el" href="dir_672dcfd9277f9ad29030da9749b32c8e.html">promela</a></li> </ul>
+<li class="navelem"><a class="el" href="dir_2cd592331b95683ae50c1625a7a0233f.html">plugins</a></li><li class="navelem"><a class="el" href="dir_752b259a3f32424381c44f18ca58e729.html">datamodel</a></li><li class="navelem"><a class="el" href="dir_f4ef9190f47eab3d8603eac93d672b2e.html">promela</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
@@ -101,108 +101,111 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifndef PROMELADATAMODEL_H_4VG0TDMU</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#define PROMELADATAMODEL_H_4VG0TDMU</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
-<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_data_model_impl_8h.html">uscxml/plugins/DataModelImpl.h</a>&quot;</span></div>
-<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;list&gt;</span></div>
-<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
-<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#ifdef BUILD_AS_PLUGINS</span></div>
-<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;uscxml/plugins/Plugins.h&quot;</span></div>
-<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
-<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceuscxml.html">uscxml</a> {</div>
-<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
-<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classuscxml_1_1_promela_data_model.html"> 32</a></span>&#160;<span class="keyword">class </span><a class="code" href="classuscxml_1_1_promela_data_model.html">PromelaDataModel</a> : <span class="keyword">public</span> <a class="code" href="classuscxml_1_1_data_model_impl.html">DataModelImpl</a> {</div>
-<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="classuscxml_1_1_promela_data_model.html">PromelaDataModel</a>();</div>
-<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classuscxml_1_1_promela_data_model.html">PromelaDataModel</a>();</div>
-<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> std::shared_ptr&lt;DataModelImpl&gt; <a class="code" href="classuscxml_1_1_promela_data_model.html#a63f7f879d3ff0b5c4ab7df1bb3a0916d">create</a>(<a class="code" href="classuscxml_1_1_data_model_callbacks.html">DataModelCallbacks</a>* callbacks);</div>
-<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
-<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classuscxml_1_1_promela_data_model.html#afa40acc002363289574a787d80d105da"> 38</a></span>&#160; <span class="keyword">virtual</span> std::list&lt;std::string&gt; <a class="code" href="classuscxml_1_1_promela_data_model.html#afa40acc002363289574a787d80d105da">getNames</a>() {</div>
-<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::list&lt;std::string&gt; names;</div>
-<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; names.push_back(<span class="stringliteral">&quot;promela&quot;</span>);</div>
-<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> names;</div>
-<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
-<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
-<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#af603d9e8a38b17454730cb24f882413a">addExtension</a>(<a class="code" href="classuscxml_1_1_data_model_extension.html">DataModelExtension</a>* ext);</div>
-<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div>
-<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a40be872250436c4a86474b4d6356ee4a">isValidSyntax</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
-<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
-<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a17e34cb99c724627c3fd535bbb921521">setEvent</a>(<span class="keyword">const</span> <a class="code" href="classuscxml_1_1_event.html">Event</a>&amp; event);</div>
-<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div>
-<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// foreach</span></div>
-<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">virtual</span> uint32_t <a class="code" href="classuscxml_1_1_promela_data_model.html#aa3f72b090e23018dd78dadc1832a0628">getLength</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
-<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a634f75a8b8498be8b4caa457082e5b9f">setForeach</a>(<span class="keyword">const</span> std::string&amp; item,</div>
-<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> std::string&amp; array,</div>
-<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> std::string&amp; index,</div>
-<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; uint32_t iteration);</div>
-<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div>
-<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a514bfe55e723920ff37672eb4651ab4a">evalAsBool</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
-<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classuscxml_1_1_data.html">Data</a> <a class="code" href="classuscxml_1_1_promela_data_model.html#a9c3a48fd02c52f3321d1a352665df903">evalAsData</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
-<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classuscxml_1_1_data.html">Data</a> <a class="code" href="classuscxml_1_1_promela_data_model.html#a9d5dd58513ac5ff3836ac8ecec6e73f6">getAsData</a>(<span class="keyword">const</span> std::string&amp; content);</div>
-<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
-<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a71c2239a3c4686da3a4158f65b74f6b8">isDeclared</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
-<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div>
-<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#aea38e4f5d543c2b05b3fa6371a383ec4">assign</a>(<span class="keyword">const</span> std::string&amp; location, <span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data);</div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#ae2e8847bd2e598fb9fd9b692352b51bf">init</a>(<span class="keyword">const</span> std::string&amp; location, <span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data);</div>
-<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">virtual</span> std::string <a class="code" href="classuscxml_1_1_promela_data_model.html#a2fbcc05f4cc28e64b202f56d252ef28f">andExpressions</a>(std::list&lt;std::string&gt;);</div>
-<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div>
-<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">protected</span>:</div>
-<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
-<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">int</span> dataToInt(<span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data);</div>
-<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">bool</span> dataToBool(<span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data);</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;uscxml/config.h&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_data_model_impl_8h.html">uscxml/plugins/DataModelImpl.h</a>&quot;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;list&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#ifdef BUILD_AS_PLUGINS</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_plugins_8h.html">uscxml/plugins/Plugins.h</a>&quot;</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceuscxml.html">uscxml</a> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classuscxml_1_1_promela_data_model.html"> 33</a></span>&#160;<span class="keyword">class </span><a class="code" href="classuscxml_1_1_promela_data_model.html">PromelaDataModel</a> : <span class="keyword">public</span> <a class="code" href="classuscxml_1_1_data_model_impl.html">DataModelImpl</a> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classuscxml_1_1_promela_data_model.html">PromelaDataModel</a>();</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classuscxml_1_1_promela_data_model.html">PromelaDataModel</a>();</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">virtual</span> std::shared_ptr&lt;DataModelImpl&gt; <a class="code" href="classuscxml_1_1_promela_data_model.html#a63f7f879d3ff0b5c4ab7df1bb3a0916d">create</a>(<a class="code" href="classuscxml_1_1_data_model_callbacks.html">DataModelCallbacks</a>* callbacks);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classuscxml_1_1_promela_data_model.html#afa40acc002363289574a787d80d105da"> 39</a></span>&#160; <span class="keyword">virtual</span> std::list&lt;std::string&gt; <a class="code" href="classuscxml_1_1_promela_data_model.html#afa40acc002363289574a787d80d105da">getNames</a>() {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; std::list&lt;std::string&gt; names;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; names.push_back(<span class="stringliteral">&quot;promela&quot;</span>);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> names;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#af603d9e8a38b17454730cb24f882413a">addExtension</a>(<a class="code" href="classuscxml_1_1_data_model_extension.html">DataModelExtension</a>* ext);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a40be872250436c4a86474b4d6356ee4a">isValidSyntax</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a17e34cb99c724627c3fd535bbb921521">setEvent</a>(<span class="keyword">const</span> <a class="code" href="classuscxml_1_1_event.html">Event</a>&amp; event);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// foreach</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">virtual</span> uint32_t <a class="code" href="classuscxml_1_1_promela_data_model.html#aa3f72b090e23018dd78dadc1832a0628">getLength</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a634f75a8b8498be8b4caa457082e5b9f">setForeach</a>(<span class="keyword">const</span> std::string&amp; item,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> std::string&amp; array,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> std::string&amp; index,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; uint32_t iteration);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a514bfe55e723920ff37672eb4651ab4a">evalAsBool</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classuscxml_1_1_data.html">Data</a> <a class="code" href="classuscxml_1_1_promela_data_model.html#a9c3a48fd02c52f3321d1a352665df903">evalAsData</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classuscxml_1_1_data.html">Data</a> <a class="code" href="classuscxml_1_1_promela_data_model.html#a9d5dd58513ac5ff3836ac8ecec6e73f6">getAsData</a>(<span class="keyword">const</span> std::string&amp; content);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a71c2239a3c4686da3a4158f65b74f6b8">isDeclared</a>(<span class="keyword">const</span> std::string&amp; expr);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#a596203a479d297a92c20d8fad83da0bf">assign</a>(<span class="keyword">const</span> std::string&amp; location,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> std::map&lt;std::string, std::string&gt;&amp; attr = std::map&lt;std::string, std::string&gt;());</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classuscxml_1_1_promela_data_model.html#aeee9dcd50405a27045fb129bbbe3a322">init</a>(<span class="keyword">const</span> std::string&amp; location,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> std::map&lt;std::string, std::string&gt;&amp; attr = std::map&lt;std::string, std::string&gt;());</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword">protected</span>:</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">void</span> evaluateDecl(<span class="keywordtype">void</span>* ast);</div>
-<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classuscxml_1_1_data.html">Data</a> evaluateExpr(<span class="keywordtype">void</span>* ast);</div>
-<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">void</span> evaluateStmnt(<span class="keywordtype">void</span>* ast);</div>
-<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div>
-<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">void</span> evaluateDecl(<span class="keyword">const</span> std::string&amp; expr);</div>
-<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classuscxml_1_1_data.html">Data</a> evaluateExpr(<span class="keyword">const</span> std::string&amp; expr);</div>
-<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">void</span> evaluateStmnt(<span class="keyword">const</span> std::string&amp; expr);</div>
-<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div>
-<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">void</span> setVariable(<span class="keywordtype">void</span>* ast, <span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; value);</div>
-<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="classuscxml_1_1_data.html">Data</a> getVariable(<span class="keywordtype">void</span>* ast);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">int</span> dataToInt(<span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">bool</span> dataToBool(<span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">void</span> evaluateDecl(<span class="keywordtype">void</span>* ast);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classuscxml_1_1_data.html">Data</a> evaluateExpr(<span class="keywordtype">void</span>* ast);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">void</span> evaluateStmnt(<span class="keywordtype">void</span>* ast);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">void</span> evaluateDecl(<span class="keyword">const</span> std::string&amp; expr);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="classuscxml_1_1_data.html">Data</a> evaluateExpr(<span class="keyword">const</span> std::string&amp; expr);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">void</span> evaluateStmnt(<span class="keyword">const</span> std::string&amp; expr);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
-<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">void</span> adaptType(<a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data);</div>
-<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div>
-<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">int</span> _lastMType;</div>
-<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div>
-<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classuscxml_1_1_event.html">Event</a> _event;</div>
-<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; std::string _name;</div>
-<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; std::string _sessionId;</div>
-<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
-<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="classuscxml_1_1_data.html">Data</a> _variables;</div>
-<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div>
-<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;};</div>
-<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
-<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="preprocessor">#ifdef BUILD_AS_PLUGINS</span></div>
-<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;PLUMA_INHERIT_PROVIDER(PromelaDataModel, DataModelImpl);</div>
-<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div>
-<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div>
-<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
-<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* end of include guard: PROMELADATAMODEL_H_4VG0TDMU */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a63f7f879d3ff0b5c4ab7df1bb3a0916d"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a63f7f879d3ff0b5c4ab7df1bb3a0916d">uscxml::PromelaDataModel::create</a></div><div class="ttdeci">virtual std::shared_ptr&lt; DataModelImpl &gt; create(DataModelCallbacks *callbacks)</div><div class="ttdoc">The Factory wants to instantiate a new instance. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:60</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_afa40acc002363289574a787d80d105da"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#afa40acc002363289574a787d80d105da">uscxml::PromelaDataModel::getNames</a></div><div class="ttdeci">virtual std::list&lt; std::string &gt; getNames()</div><div class="ttdoc">Return a list of names to be matched by the datamodel attribute in SCXML. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.h:38</div></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">void</span> setVariable(<span class="keywordtype">void</span>* ast, <span class="keyword">const</span> <a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; value);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classuscxml_1_1_data.html">Data</a> getVariable(<span class="keywordtype">void</span>* ast);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">void</span> adaptType(<a class="code" href="classuscxml_1_1_data.html">Data</a>&amp; data);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">int</span> _lastMType;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classuscxml_1_1_event.html">Event</a> _event;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; std::string _name;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; std::string _sessionId;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classuscxml_1_1_data.html">Data</a> _variables;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;};</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="preprocessor">#ifdef BUILD_AS_PLUGINS</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;PLUMA_INHERIT_PROVIDER(PromelaDataModel, DataModelImpl)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* end of include guard: PROMELADATAMODEL_H_4VG0TDMU */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a63f7f879d3ff0b5c4ab7df1bb3a0916d"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a63f7f879d3ff0b5c4ab7df1bb3a0916d">uscxml::PromelaDataModel::create</a></div><div class="ttdeci">virtual std::shared_ptr&lt; DataModelImpl &gt; create(DataModelCallbacks *callbacks)</div><div class="ttdoc">The Factory wants to instantiate a new instance. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:59</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_afa40acc002363289574a787d80d105da"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#afa40acc002363289574a787d80d105da">uscxml::PromelaDataModel::getNames</a></div><div class="ttdeci">virtual std::list&lt; std::string &gt; getNames()</div><div class="ttdoc">Return a list of names to be matched by the datamodel attribute in SCXML. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.h:39</div></div>
<div class="ttc" id="namespaceuscxml_html"><div class="ttname"><a href="namespaceuscxml.html">uscxml</a></div><div class="ttdef"><b>Definition:</b> Breakpoint.cpp:26</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a9c3a48fd02c52f3321d1a352665df903"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a9c3a48fd02c52f3321d1a352665df903">uscxml::PromelaDataModel::evalAsData</a></div><div class="ttdeci">virtual Data evalAsData(const std::string &amp;expr)</div><div class="ttdoc">Return a string as an evaluated Data object. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:249</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a9c3a48fd02c52f3321d1a352665df903"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a9c3a48fd02c52f3321d1a352665df903">uscxml::PromelaDataModel::evalAsData</a></div><div class="ttdeci">virtual Data evalAsData(const std::string &amp;expr)</div><div class="ttdoc">Return a string as an evaluated Data object. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:262</div></div>
<div class="ttc" id="_data_model_impl_8h_html"><div class="ttname"><a href="_data_model_impl_8h.html">DataModelImpl.h</a></div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a17e34cb99c724627c3fd535bbb921521"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a17e34cb99c724627c3fd535bbb921521">uscxml::PromelaDataModel::setEvent</a></div><div class="ttdeci">virtual void setEvent(const Event &amp;event)</div><div class="ttdoc">Set the given event as _event in the data-model&#39;s global scope. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:92</div></div>
-<div class="ttc" id="classuscxml_1_1_data_model_extension_html"><div class="ttname"><a href="classuscxml_1_1_data_model_extension.html">uscxml::DataModelExtension</a></div><div class="ttdef"><b>Definition:</b> DataModelImpl.h:59</div></div>
-<div class="ttc" id="classuscxml_1_1_data_model_impl_html"><div class="ttname"><a href="classuscxml_1_1_data_model_impl.html">uscxml::DataModelImpl</a></div><div class="ttdoc">Abstract base class for all data-model implementations. </div><div class="ttdef"><b>Definition:</b> DataModelImpl.h:75</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a40be872250436c4a86474b4d6356ee4a"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a40be872250436c4a86474b4d6356ee4a">uscxml::PromelaDataModel::isValidSyntax</a></div><div class="ttdeci">virtual bool isValidSyntax(const std::string &amp;expr)</div><div class="ttdoc">Determine whether a given string constitutes valid syntax in the data-model&#39;s language. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:192</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html">uscxml::PromelaDataModel</a></div><div class="ttdef"><b>Definition:</b> PromelaDataModel.h:32</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a514bfe55e723920ff37672eb4651ab4a"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a514bfe55e723920ff37672eb4651ab4a">uscxml::PromelaDataModel::evalAsBool</a></div><div class="ttdeci">virtual bool evalAsBool(const std::string &amp;expr)</div><div class="ttdoc">Evaluate a given expression as a boolean. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:237</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_aa3f72b090e23018dd78dadc1832a0628"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#aa3f72b090e23018dd78dadc1832a0628">uscxml::PromelaDataModel::getLength</a></div><div class="ttdeci">virtual uint32_t getLength(const std::string &amp;expr)</div><div class="ttdoc">Evaluate the given expression as something iterable and return its length. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:202</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a634f75a8b8498be8b4caa457082e5b9f"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a634f75a8b8498be8b4caa457082e5b9f">uscxml::PromelaDataModel::setForeach</a></div><div class="ttdeci">virtual void setForeach(const std::string &amp;item, const std::string &amp;array, const std::string &amp;index, uint32_t iteration)</div><div class="ttdoc">Set a given item to the object at a given index for one iteration. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:214</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a71c2239a3c4686da3a4158f65b74f6b8"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a71c2239a3c4686da3a4158f65b74f6b8">uscxml::PromelaDataModel::isDeclared</a></div><div class="ttdeci">virtual bool isDeclared(const std::string &amp;expr)</div><div class="ttdoc">Determine whether a given variable / location is declared. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:694</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a2fbcc05f4cc28e64b202f56d252ef28f"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a2fbcc05f4cc28e64b202f56d252ef28f">uscxml::PromelaDataModel::andExpressions</a></div><div class="ttdeci">virtual std::string andExpressions(std::list&lt; std::string &gt;)</div><div class="ttdoc">Concat the given terms into a conjunctive form. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:663</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a9d5dd58513ac5ff3836ac8ecec6e73f6"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a9d5dd58513ac5ff3836ac8ecec6e73f6">uscxml::PromelaDataModel::getAsData</a></div><div class="ttdeci">virtual Data getAsData(const std::string &amp;content)</div><div class="ttdoc">Return a string as an unevaluated Data object. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:254</div></div>
-<div class="ttc" id="classuscxml_1_1_event_html"><div class="ttname"><a href="classuscxml_1_1_event.html">uscxml::Event</a></div><div class="ttdef"><b>Definition:</b> Event.h:84</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_af603d9e8a38b17454730cb24f882413a"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#af603d9e8a38b17454730cb24f882413a">uscxml::PromelaDataModel::addExtension</a></div><div class="ttdeci">virtual void addExtension(DataModelExtension *ext)</div><div class="ttdoc">Register an extension to get data into and out of the data-model. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:723</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_ae2e8847bd2e598fb9fd9b692352b51bf"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#ae2e8847bd2e598fb9fd9b692352b51bf">uscxml::PromelaDataModel::init</a></div><div class="ttdeci">virtual void init(const std::string &amp;location, const Data &amp;data)</div><div class="ttdoc">Initialize a variable / location in the data-model with a given data object. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:690</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a17e34cb99c724627c3fd535bbb921521"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a17e34cb99c724627c3fd535bbb921521">uscxml::PromelaDataModel::setEvent</a></div><div class="ttdeci">virtual void setEvent(const Event &amp;event)</div><div class="ttdoc">Set the given event as _event in the data-model&#39;s global scope. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:91</div></div>
+<div class="ttc" id="classuscxml_1_1_data_model_extension_html"><div class="ttname"><a href="classuscxml_1_1_data_model_extension.html">uscxml::DataModelExtension</a></div><div class="ttdef"><b>Definition:</b> DataModelImpl.h:61</div></div>
+<div class="ttc" id="classuscxml_1_1_data_model_impl_html"><div class="ttname"><a href="classuscxml_1_1_data_model_impl.html">uscxml::DataModelImpl</a></div><div class="ttdoc">Abstract base class for all data-model implementations. </div><div class="ttdef"><b>Definition:</b> DataModelImpl.h:77</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a40be872250436c4a86474b4d6356ee4a"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a40be872250436c4a86474b4d6356ee4a">uscxml::PromelaDataModel::isValidSyntax</a></div><div class="ttdeci">virtual bool isValidSyntax(const std::string &amp;expr)</div><div class="ttdoc">Determine whether a given string constitutes valid syntax in the data-model&#39;s language. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:191</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html">uscxml::PromelaDataModel</a></div><div class="ttdef"><b>Definition:</b> PromelaDataModel.h:33</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a514bfe55e723920ff37672eb4651ab4a"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a514bfe55e723920ff37672eb4651ab4a">uscxml::PromelaDataModel::evalAsBool</a></div><div class="ttdeci">virtual bool evalAsBool(const std::string &amp;expr)</div><div class="ttdoc">Evaluate a given expression as a boolean. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:250</div></div>
+<div class="ttc" id="_plugins_8h_html"><div class="ttname"><a href="_plugins_8h.html">Plugins.h</a></div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_aa3f72b090e23018dd78dadc1832a0628"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#aa3f72b090e23018dd78dadc1832a0628">uscxml::PromelaDataModel::getLength</a></div><div class="ttdeci">virtual uint32_t getLength(const std::string &amp;expr)</div><div class="ttdoc">Evaluate the given expression as something iterable and return its length. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:201</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a634f75a8b8498be8b4caa457082e5b9f"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a634f75a8b8498be8b4caa457082e5b9f">uscxml::PromelaDataModel::setForeach</a></div><div class="ttdeci">virtual void setForeach(const std::string &amp;item, const std::string &amp;array, const std::string &amp;index, uint32_t iteration)</div><div class="ttdoc">Set a given item to the object at a given index for one iteration. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:213</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a71c2239a3c4686da3a4158f65b74f6b8"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a71c2239a3c4686da3a4158f65b74f6b8">uscxml::PromelaDataModel::isDeclared</a></div><div class="ttdeci">virtual bool isDeclared(const std::string &amp;expr)</div><div class="ttdoc">Determine whether a given variable / location is declared. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:736</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a9d5dd58513ac5ff3836ac8ecec6e73f6"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a9d5dd58513ac5ff3836ac8ecec6e73f6">uscxml::PromelaDataModel::getAsData</a></div><div class="ttdeci">virtual Data getAsData(const std::string &amp;content)</div><div class="ttdoc">Return a string as an unevaluated Data object. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:267</div></div>
+<div class="ttc" id="classuscxml_1_1_event_html"><div class="ttname"><a href="classuscxml_1_1_event.html">uscxml::Event</a></div><div class="ttdef"><b>Definition:</b> Event.h:94</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_af603d9e8a38b17454730cb24f882413a"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#af603d9e8a38b17454730cb24f882413a">uscxml::PromelaDataModel::addExtension</a></div><div class="ttdeci">virtual void addExtension(DataModelExtension *ext)</div><div class="ttdoc">Register an extension to get data into and out of the data-model. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:765</div></div>
<div class="ttc" id="classuscxml_1_1_data_model_callbacks_html"><div class="ttname"><a href="classuscxml_1_1_data_model_callbacks.html">uscxml::DataModelCallbacks</a></div><div class="ttdoc">Callbacks available for every data-model. </div><div class="ttdef"><b>Definition:</b> DataModelImpl.h:47</div></div>
-<div class="ttc" id="classuscxml_1_1_promela_data_model_html_aea38e4f5d543c2b05b3fa6371a383ec4"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#aea38e4f5d543c2b05b3fa6371a383ec4">uscxml::PromelaDataModel::assign</a></div><div class="ttdeci">virtual void assign(const std::string &amp;location, const Data &amp;data)</div><div class="ttdoc">Assign a data object to a location in the data-model. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:684</div></div>
-<div class="ttc" id="classuscxml_1_1_data_html"><div class="ttname"><a href="classuscxml_1_1_data.html">uscxml::Data</a></div><div class="ttdef"><b>Definition:</b> Data.h:43</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_aeee9dcd50405a27045fb129bbbe3a322"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#aeee9dcd50405a27045fb129bbbe3a322">uscxml::PromelaDataModel::init</a></div><div class="ttdeci">virtual void init(const std::string &amp;location, const Data &amp;data, const std::map&lt; std::string, std::string &gt; &amp;attr=std::map&lt; std::string, std::string &gt;())</div><div class="ttdoc">Initialize a variable / location in the data-model with a given data object. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:709</div></div>
+<div class="ttc" id="classuscxml_1_1_data_html"><div class="ttname"><a href="classuscxml_1_1_data.html">uscxml::Data</a></div><div class="ttdef"><b>Definition:</b> Data.h:44</div></div>
+<div class="ttc" id="classuscxml_1_1_promela_data_model_html_a596203a479d297a92c20d8fad83da0bf"><div class="ttname"><a href="classuscxml_1_1_promela_data_model.html#a596203a479d297a92c20d8fad83da0bf">uscxml::PromelaDataModel::assign</a></div><div class="ttdeci">virtual void assign(const std::string &amp;location, const Data &amp;data, const std::map&lt; std::string, std::string &gt; &amp;attr=std::map&lt; std::string, std::string &gt;())</div><div class="ttdoc">Assign a data object to a location in the data-model. </div><div class="ttdef"><b>Definition:</b> PromelaDataModel.cpp:700</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- HTML footer for doxygen 1.8.8-->
<!-- start footer part -->
@@ -212,7 +215,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div>
</div>
<!-- <hr class="footer"/><address class="footer"><small>
-Generated on Mon Dec 12 2016 19:50:04 for uSCXML by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Sun Apr 30 2017 22:52:19 for uSCXML by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.10
</small></address> -->
ring>
+ </property>
+ <property name="acceptRichText" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="" >
+ <layout class="QVBoxLayout" name="verticalLayout" >
+ <item>
+ <widget class="QComboBox" name="queryBox" />
+ </item>
+ <item>
+ <widget class="QSplitter" name="splitter" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <widget class="QTextEdit" name="queryEdit" >
+ <property name="readOnly" >
+ <bool>true</bool>
+ </property>
+ <property name="html" >
+ <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;/body>&lt;/html></string>
+ </property>
+ <property name="acceptRichText" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QTextEdit" name="output" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Minimum" hsizetype="Expanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="readOnly" >
+ <bool>true</bool>
+ </property>
+ <property name="html" >
+ <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;/body>&lt;/html></string>
+ </property>
+ <property name="acceptRichText" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ <zorder>label</zorder>
+ <zorder>splitter_2</zorder>
+ <zorder>queryBox</zorder>
+ <zorder>treeInfo</zorder>
+ <zorder>splitter</zorder>
+ </widget>
+ <widget class="QMenuBar" name="menubar" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>910</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <widget class="QMenu" name="menuFile" >
+ <property name="title" >
+ <string>&amp;File</string>
+ </property>
+ <addaction name="actionOpenDirectory" />
+ </widget>
+ <widget class="QMenu" name="menu_Help" >
+ <property name="title" >
+ <string>&amp;Help</string>
+ </property>
+ <addaction name="actionAbout" />
+ </widget>
+ <addaction name="menuFile" />
+ <addaction name="menu_Help" />
+ </widget>
+ <widget class="QStatusBar" name="statusbar" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>654</y>
+ <width>910</width>
+ <height>22</height>
+ </rect>
+ </property>
+ </widget>
+ <action name="actionOpenDirectory" >
+ <property name="text" >
+ <string>Open Directory...</string>
+ </property>
+ <property name="shortcut" >
+ <string>Ctrl+O</string>
+ </property>
+ </action>
+ <action name="actionAbout" >
+ <property name="text" >
+ <string>&amp;About</string>
+ </property>
+ <property name="shortcut" >
+ <string>Ctrl+A</string>
+ </property>
+ </action>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/xmlpatterns/filetree/main.cpp b/examples/xmlpatterns/filetree/main.cpp
new file mode 100644
index 0000000..e407a45
--- /dev/null
+++ b/examples/xmlpatterns/filetree/main.cpp
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char **argv)
+{
+ Q_INIT_RESOURCE(queries);
+ QApplication app(argc, argv);
+ MainWindow mainWindow;
+
+ mainWindow.show();
+ return app.exec();
+}
diff --git a/examples/xmlpatterns/filetree/mainwindow.cpp b/examples/xmlpatterns/filetree/mainwindow.cpp
new file mode 100644
index 0000000..341128a
--- /dev/null
+++ b/examples/xmlpatterns/filetree/mainwindow.cpp
@@ -0,0 +1,166 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include <QLibraryInfo>
+#include <QtXmlPatterns>
+
+#include "mainwindow.h"
+#include "xmlsyntaxhighlighter.h"
+
+//! [0]
+MainWindow::MainWindow() : m_fileTree(m_namePool)
+{
+ setupUi(this);
+
+ new XmlSyntaxHighlighter(fileTree->document());
+
+ // Set up the font.
+ {
+ QFont font("Courier",10);
+ font.setFixedPitch(true);
+
+ fileTree->setFont(font);
+ queryEdit->setFont(font);
+ output->setFont(font);
+ }
+
+ const QString dir(QLibraryInfo::location(QLibraryInfo::ExamplesPath) + "/xmlpatterns/filetree");
+ qDebug() << dir;
+
+ if (QDir(dir).exists())
+ loadDirectory(dir);
+ else
+ fileTree->setPlainText(tr("Use the Open menu entry to select a directory."));
+
+ const QStringList queries(QDir(":/queries/", "*.xq").entryList());
+ int len = queries.count();
+
+ for (int i = 0; i < len; ++i)
+ queryBox->addItem(queries.at(i));
+
+}
+//! [0]
+
+//! [2]
+void MainWindow::on_queryBox_currentIndexChanged()
+{
+ QFile queryFile(":/queries/" + queryBox->currentText());
+ queryFile.open(QIODevice::ReadOnly);
+
+ queryEdit->setPlainText(QString::fromLatin1(queryFile.readAll()));
+ evaluateResult();
+}
+//! [2]
+
+//! [3]
+void MainWindow::evaluateResult()
+{
+ if (queryBox->currentText().isEmpty())
+ return;
+
+ QXmlQuery query(m_namePool);
+ query.bindVariable("fileTree", m_fileNode);
+ query.setQuery(QUrl("qrc:/queries/" + queryBox->currentText()));
+
+ QByteArray formatterOutput;
+ QBuffer buffer(&formatterOutput);
+ buffer.open(QIODevice::WriteOnly);
+
+ QXmlFormatter formatter(query, &buffer);
+ query.evaluateTo(&formatter);
+
+ output->setText(QString::fromLatin1(formatterOutput.constData()));
+}
+//! [3]
+
+//! [1]
+void MainWindow::on_actionOpenDirectory_triggered()
+{
+ const QString directoryName = QFileDialog::getExistingDirectory(this);
+ if (!directoryName.isEmpty())
+ loadDirectory(directoryName);
+}
+//! [1]
+
+//! [4]
+//! [5]
+void MainWindow::loadDirectory(const QString &directory)
+{
+ Q_ASSERT(QDir(directory).exists());
+
+ m_fileNode = m_fileTree.nodeFor(directory);
+//! [5]
+
+ QXmlQuery query(m_namePool);
+ query.bindVariable("fileTree", m_fileNode);
+ query.setQuery(QUrl("qrc:/queries/wholeTree.xq"));
+
+ QByteArray output;
+ QBuffer buffer(&output);
+ buffer.open(QIODevice::WriteOnly);
+
+ QXmlFormatter formatter(query, &buffer);
+ query.evaluateTo(&formatter);
+
+ treeInfo->setText((QString(tr("Model of %1 output as XML.")).arg(directory)));
+ fileTree->setText(QString::fromLatin1(output.constData()));
+ evaluateResult();
+//! [6]
+}
+//! [6]
+//! [4]
+
+void MainWindow::on_actionAbout_triggered()
+{
+ QMessageBox::about(this, tr("About File Tree"),
+ tr("<p>Select <b>File->Open Directory</b> and "
+ "choose a directory. The directory is then "
+ "loaded into the model, and the model is "
+ "displayed on the left as XML.</p>"
+
+ "<p>From the query menu on the right, select "
+ "a query. The query is displayed and then run "
+ "on the model. The results are displayed below "
+ "the query.</p>"));
+}
+
+
diff --git a/examples/xmlpatterns/filetree/mainwindow.h b/examples/xmlpatterns/filetree/mainwindow.h
new file mode 100644
index 0000000..6651c80
--- /dev/null
+++ b/examples/xmlpatterns/filetree/mainwindow.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QFile>
+#include <QMainWindow>
+#include <QXmlNamePool>
+//! [0]
+#include "filetree.h"
+#include "ui_mainwindow.h"
+
+class MainWindow : public QMainWindow, private Ui_MainWindow
+{
+ Q_OBJECT
+
+ public:
+ MainWindow();
+
+ private slots:
+ void on_actionOpenDirectory_triggered();
+ void on_actionAbout_triggered();
+ void on_queryBox_currentIndexChanged();
+
+ private:
+ void loadDirectory(const QString &directory);
+ void evaluateResult();
+
+ const QXmlNamePool m_namePool;
+ const FileTree m_fileTree;
+ QXmlNodeModelIndex m_fileNode;
+};
+//! [0]
+#endif
diff --git a/examples/xmlpatterns/filetree/queries.qrc b/examples/xmlpatterns/filetree/queries.qrc
new file mode 100644
index 0000000..2e48601
--- /dev/null
+++ b/examples/xmlpatterns/filetree/queries.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC>
+ <RCC version="1.0">
+<qresource>
+ <file>queries/listCPPFiles.xq</file>
+ <file>queries/wholeTree.xq</file>
+</qresource>
+</RCC>
diff --git a/examples/xmlpatterns/filetree/queries/listCPPFiles.xq b/examples/xmlpatterns/filetree/queries/listCPPFiles.xq
new file mode 100644
index 0000000..e311d27
--- /dev/null
+++ b/examples/xmlpatterns/filetree/queries/listCPPFiles.xq
@@ -0,0 +1,19 @@
+declare variable $where as xs:string := string($fileTree/@filePath);
+<html>
+ <head>
+ <title>All cpp files in: {$where}</title>
+ </head>
+ <body>
+ <p>
+ cpp-files found in {$where} sorted by size:
+ </p>
+ <ul> {
+ for $file in $fileTree//file[@suffix = "cpp"]
+ order by xs:integer($file/@size)
+ return
+ <li>
+ {string($file/@fileName)}, size: {string($file/@size)}
+ </li>
+ } </ul>
+ </body>
+</html>
diff --git a/examples/xmlpatterns/filetree/queries/wholeTree.xq b/examples/xmlpatterns/filetree/queries/wholeTree.xq
new file mode 100644
index 0000000..ec2977b
--- /dev/null
+++ b/examples/xmlpatterns/filetree/queries/wholeTree.xq
@@ -0,0 +1 @@
+$fileTree
diff --git a/examples/xmlpatterns/qobjectxmlmodel/forms/mainwindow.ui b/examples/xmlpatterns/qobjectxmlmodel/forms/mainwindow.ui
new file mode 100644
index 0000000..ad43284
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/forms/mainwindow.ui
@@ -0,0 +1,196 @@
+<ui version="4.0" >
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>QObjectXmlModel Example</string>
+ </property>
+ <widget class="QWidget" name="centralwidget" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>29</y>
+ <width>800</width>
+ <height>549</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_4" >
+ <item>
+ <widget class="QLabel" name="label" >
+ <property name="font" >
+ <font>
+ <italic>true</italic>
+ </font>
+ </property>
+ <property name="text" >
+ <string>See the About menu entry for a description of this example.</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QTabWidget" name="inheritanceTab" >
+ <property name="autoFillBackground" >
+ <bool>true</bool>
+ </property>
+ <property name="currentIndex" >
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="wholeTreeTab" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>778</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <attribute name="title" >
+ <string>Whole QObjectTree</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout" >
+ <item>
+ <widget class="QSplitter" name="splitter" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <widget class="QTextEdit" name="wholeTree" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Minimum" hsizetype="Expanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="readOnly" >
+ <bool>true</bool>
+ </property>
+ <property name="html" >
+ <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;/body>&lt;/html></string>
+ </property>
+ <property name="acceptRichText" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QTextEdit" name="wholeTreeOutput" >
+ <property name="readOnly" >
+ <bool>true</bool>
+ </property>
+ <property name="html" >
+ <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;/body>&lt;/html></string>
+ </property>
+ <property name="acceptRichText" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="htmlTab" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>778</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <attribute name="title" >
+ <string>Statistics in HTML </string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2" >
+ <item>
+ <widget class="QSplitter" name="splitter_2" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <widget class="QTextEdit" name="htmlQueryEdit" >
+ <property name="readOnly" >
+ <bool>true</bool>
+ </property>
+ <property name="html" >
+ <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;/body>&lt;/html></string>
+ </property>
+ <property name="acceptRichText" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QWebView" name="htmlOutput" >
+ <property name="url" >
+ <url>
+ <string>about:blank</string>
+ </url>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <widget class="QMenu" name="menuHelp" >
+ <property name="title" >
+ <string>Help</string>
+ </property>
+ <addaction name="actionAbout" />
+ </widget>
+ <addaction name="menuHelp" />
+ </widget>
+ <widget class="QStatusBar" name="statusbar" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>578</y>
+ <width>800</width>
+ <height>22</height>
+ </rect>
+ </property>
+ </widget>
+ <action name="actionAbout" >
+ <property name="text" >
+ <string>About</string>
+ </property>
+ <property name="shortcut" >
+ <string>Ctrl+B</string>
+ </property>
+ </action>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>QWebView</class>
+ <extends>QWidget</extends>
+ <header>QtWebKit/QWebView</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/xmlpatterns/qobjectxmlmodel/main.cpp b/examples/xmlpatterns/qobjectxmlmodel/main.cpp
new file mode 100644
index 0000000..c73d211
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/main.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+
+#include "mainwindow.h"
+
+int main(int argc, char* argv[])
+{
+ Q_INIT_RESOURCE(queries);
+ QApplication app(argc, argv);
+ MainWindow mainWindow;
+ mainWindow.show();
+ return app.exec();
+}
diff --git a/examples/xmlpatterns/qobjectxmlmodel/mainwindow.cpp b/examples/xmlpatterns/qobjectxmlmodel/mainwindow.cpp
new file mode 100644
index 0000000..056ebae
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/mainwindow.cpp
@@ -0,0 +1,135 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include <QtXmlPatterns>
+
+#include "mainwindow.h"
+#include "qobjectxmlmodel.h"
+#include "xmlsyntaxhighlighter.h"
+
+MainWindow::MainWindow()
+{
+ setupUi(this);
+
+ new XmlSyntaxHighlighter(wholeTreeOutput->document());
+
+ /* Setup the font. */
+ {
+ QFont font("Courier");
+ font.setFixedPitch(true);
+
+ wholeTree->setFont(font);
+ wholeTreeOutput->setFont(font);
+ htmlQueryEdit->setFont(font);
+ }
+
+ QXmlNamePool namePool;
+ QObjectXmlModel qObjectModel(this, namePool);
+ QXmlQuery query(namePool);
+
+ /* The QObject tree as XML view. */
+ {
+ query.bindVariable("root", qObjectModel.root());
+ query.setQuery(QUrl("qrc:/queries/wholeTree.xq"));
+
+ Q_ASSERT(query.isValid());
+ QByteArray output;
+ QBuffer buffer(&output);
+ buffer.open(QIODevice::WriteOnly);
+
+ /* Let's the use the formatter, so it's a bit easier to read. */
+ QXmlFormatter serializer(query, &buffer);
+
+ query.evaluateTo(&serializer);
+ buffer.close();
+
+ {
+ QFile queryFile(":/queries/wholeTree.xq");
+ queryFile.open(QIODevice::ReadOnly);
+ wholeTree->setPlainText(QString::fromUtf8(queryFile.readAll()));
+ wholeTreeOutput->setPlainText(QString::fromUtf8(output.constData()));
+ }
+ }
+
+ /* The QObject occurrence statistics as HTML view. */
+ {
+ query.setQuery(QUrl("qrc:/queries/statisticsInHTML.xq"));
+ Q_ASSERT(query.isValid());
+
+ QByteArray output;
+ QBuffer buffer(&output);
+ buffer.open(QIODevice::WriteOnly);
+
+ /* Let's the use the serializer, so we gain a bit of speed. */
+ QXmlSerializer serializer(query, &buffer);
+
+ query.evaluateTo(&serializer);
+ buffer.close();
+
+ {
+ QFile queryFile(":/queries/statisticsInHTML.xq");
+ queryFile.open(QIODevice::ReadOnly);
+ htmlQueryEdit->setPlainText(QString::fromUtf8(queryFile.readAll()));
+ htmlOutput->setHtml(QString(output));
+ }
+ }
+}
+
+void MainWindow::on_actionAbout_triggered()
+{
+ QMessageBox::about(this,
+ tr("About QObject XML Model"),
+ tr("<p>The <b>QObject XML Model</b> example shows "
+ "how to use XQuery on top of data of your choice "
+ "without converting it to an XML document.</p>"
+ "<p>In this example a QSimpleXmlNodeModel subclass "
+ "makes it possible to query a QObject tree using "
+ "XQuery and retrieve the result as pointers to "
+ "QObjects, or as XML.</p>"
+ "<p>A possible use case of this could be to write "
+ "an application that tests a graphical interface "
+ "against Human Interface Guidelines, or that "
+ "queries an application's data which is modeled "
+ "using a QObject tree and dynamic properties."));
+}
+
+
diff --git a/examples/xmlpatterns/qobjectxmlmodel/mainwindow.h b/examples/xmlpatterns/qobjectxmlmodel/mainwindow.h
new file mode 100644
index 0000000..362bd0e
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/mainwindow.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+#include <QFile>
+
+#include "ui_mainwindow.h"
+
+//! [0]
+class MainWindow : public QMainWindow,
+ private Ui_MainWindow
+{
+ Q_OBJECT
+
+ public:
+ MainWindow();
+
+ private slots:
+ void on_actionAbout_triggered();
+};
+//! [0]
+
+#endif
diff --git a/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.cpp b/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.cpp
new file mode 100644
index 0000000..3eee67a
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.cpp
@@ -0,0 +1,459 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QVector>
+#include <QtDebug>
+
+#include <QCoreApplication>
+#include <QMetaProperty>
+#include <QXmlQuery>
+#include <QXmlResultItems>
+
+#include "qobjectxmlmodel.h"
+
+QT_BEGIN_NAMESPACE
+
+/*
+<metaObjects>
+ <metaObject className="QObject"/>
+ <metaObject className="QWidget" superClass="QObject">
+ </metaObject>
+ ...
+</metaObjects>
+<QObject objectName="MyWidget" property1="..." property2="..."> <!-- This is root() -->
+ <QObject objectName="MyFOO" property1="..."/>
+ ....
+</QObject>
+*/
+
+QObjectXmlModel::QObjectXmlModel(QObject *const object, const QXmlNamePool &np)
+ : QSimpleXmlNodeModel(np),
+ m_baseURI(QUrl::fromLocalFile(QCoreApplication::applicationFilePath())),
+ m_root(object),
+ m_allMetaObjects(allMetaObjects())
+{
+ Q_ASSERT(m_baseURI.isValid());
+}
+
+//! [5]
+QXmlNodeModelIndex QObjectXmlModel::qObjectSibling(const int pos, const QXmlNodeModelIndex &n) const
+{
+ Q_ASSERT(pos == 1 || pos == -1);
+ Q_ASSERT(asQObject(n));
+
+ const QObject *parent = asQObject(n)->parent();
+ if (parent) {
+ const QList<QObject *> &children = parent->children();
+ const int siblingPos = children.indexOf(asQObject(n)) + pos;
+
+ if (siblingPos >= 0 && siblingPos < children.count())
+ return createIndex(children.at(siblingPos));
+ else
+ return QXmlNodeModelIndex();
+ }
+ else
+ return QXmlNodeModelIndex();
+}
+//! [5]
+
+//! [1]
+QObjectXmlModel::QObjectNodeType QObjectXmlModel::toNodeType(const QXmlNodeModelIndex &n)
+{
+ return QObjectNodeType(n.additionalData() & (15 << 26));
+}
+//! [1]
+
+//! [9]
+QObjectXmlModel::AllMetaObjects QObjectXmlModel::allMetaObjects() const
+{
+ QXmlQuery query(namePool());
+ query.bindVariable("root", root());
+ query.setQuery("declare variable $root external;"
+ "$root/descendant-or-self::QObject");
+ Q_ASSERT(query.isValid());
+
+ QXmlResultItems result;
+ query.evaluateTo(&result);
+ QXmlItem i(result.next());
+
+ AllMetaObjects objects;
+ while (!i.isNull()) {
+ const QMetaObject *moo = asQObject(i.toNodeModelIndex())->metaObject();
+ while (moo) {
+ if (!objects.contains(moo))
+ objects.append(moo);
+ moo = moo->superClass();
+ }
+ i = result.next();
+ }
+
+ Q_ASSERT(!objects.contains(0));
+ return objects;
+}
+//! [9]
+
+QXmlNodeModelIndex QObjectXmlModel::metaObjectSibling(const int pos, const QXmlNodeModelIndex &n) const
+{
+ Q_ASSERT(pos == 1 || pos == -1);
+ Q_ASSERT(!n.isNull());
+
+ const int indexOf = m_allMetaObjects.indexOf(static_cast<const QMetaObject *>(n.internalPointer())) + pos;
+
+ if (indexOf >= 0 && indexOf < m_allMetaObjects.count())
+ return createIndex(const_cast<QMetaObject *>(m_allMetaObjects.at(indexOf)), MetaObject);
+ else
+ return QXmlNodeModelIndex();
+}
+
+//! [2]
+QXmlNodeModelIndex QObjectXmlModel::nextFromSimpleAxis(SimpleAxis axis, const QXmlNodeModelIndex &n) const
+{
+ switch (toNodeType(n))
+ {
+ case IsQObject:
+ {
+ switch (axis)
+ {
+ case Parent:
+ return createIndex(asQObject(n)->parent());
+
+ case FirstChild:
+ {
+ if (!asQObject(n) || asQObject(n)->children().isEmpty())
+ return QXmlNodeModelIndex();
+ else
+ return createIndex(asQObject(n)->children().first());
+ }
+
+ case NextSibling:
+ return qObjectSibling(1, n);
+
+//! [10]
+ case PreviousSibling:
+ {
+ if (asQObject(n) == m_root)
+ return createIndex(qint64(0), MetaObjects);
+ else
+ return qObjectSibling(-1, n);
+ }
+//! [10]
+ }
+ Q_ASSERT(false);
+ }
+
+//! [7]
+ case QObjectClassName:
+ case QObjectProperty:
+ {
+ Q_ASSERT(axis == Parent);
+ return createIndex(asQObject(n));
+ }
+//! [7]
+//! [2]
+//! [3]
+
+//! [11]
+ case MetaObjects:
+ {
+ switch (axis)
+ {
+ case Parent:
+ return QXmlNodeModelIndex();
+ case PreviousSibling:
+ return QXmlNodeModelIndex();
+ case NextSibling:
+ return root();
+ case FirstChild:
+ {
+ return createIndex(const_cast<QMetaObject*>(m_allMetaObjects.first()),MetaObject);
+ }
+ }
+ Q_ASSERT(false);
+ }
+//! [11]
+
+ case MetaObject:
+ {
+ switch (axis)
+ {
+ case FirstChild:
+ return QXmlNodeModelIndex();
+ case Parent:
+ return createIndex(qint64(0), MetaObjects);
+ case PreviousSibling:
+ return metaObjectSibling(-1, n);
+ case NextSibling:
+ return metaObjectSibling(1, n);
+ }
+ }
+
+ case MetaObjectClassName:
+ case MetaObjectSuperClass:
+ {
+ Q_ASSERT(axis == Parent);
+ return createIndex(asQObject(n), MetaObject);
+ }
+//! [3]
+//! [4]
+ }
+
+ Q_ASSERT(false);
+ return QXmlNodeModelIndex();
+}
+//! [4]
+
+//! [6]
+QVector<QXmlNodeModelIndex> QObjectXmlModel::attributes(const QXmlNodeModelIndex& n) const
+{
+ QVector<QXmlNodeModelIndex> result;
+ QObject *const object = asQObject(n);
+
+ switch(toNodeType(n))
+ {
+ case IsQObject:
+ {
+ const QMetaObject *const metaObject = object->metaObject();
+ const int count = metaObject->propertyCount();
+ result.append(createIndex(object, QObjectClassName));
+
+ for (int i = 0; i < count; ++i) {
+ const QMetaProperty qmp(metaObject->property(i));
+ const int ii = metaObject->indexOfProperty(qmp.name());
+ if (i == ii)
+ result.append(createIndex(object, QObjectProperty | i));
+ }
+ return result;
+ }
+//! [6]
+
+ case MetaObject:
+ {
+ result.append(createIndex(object, MetaObjectClassName));
+ result.append(createIndex(object, MetaObjectSuperClass));
+ return result;
+ }
+//! [8]
+ default:
+ return QVector<QXmlNodeModelIndex>();
+ }
+}
+//! [8]
+
+QObject *QObjectXmlModel::asQObject(const QXmlNodeModelIndex &n)
+{
+ return static_cast<QObject *>(n.internalPointer());
+}
+
+bool QObjectXmlModel::isProperty(const QXmlNodeModelIndex n)
+{
+ return n.additionalData() & QObjectProperty;
+}
+
+QUrl QObjectXmlModel::documentUri(const QXmlNodeModelIndex& ) const
+{
+ return m_baseURI;
+}
+
+QXmlNodeModelIndex::NodeKind QObjectXmlModel::kind(const QXmlNodeModelIndex& n) const
+{
+ switch (toNodeType(n))
+ {
+ case IsQObject:
+ case MetaObject:
+ case MetaObjects:
+ return QXmlNodeModelIndex::Element;
+
+ case QObjectProperty:
+ case MetaObjectClassName:
+ case MetaObjectSuperClass:
+ case QObjectClassName:
+ return QXmlNodeModelIndex::Attribute;
+ }
+
+ Q_ASSERT(false);
+ return QXmlNodeModelIndex::Element;
+}
+
+QXmlNodeModelIndex::DocumentOrder QObjectXmlModel::compareOrder(const QXmlNodeModelIndex& , const QXmlNodeModelIndex& ) const
+{
+ return QXmlNodeModelIndex::Follows; // TODO
+}
+
+//! [0]
+QXmlNodeModelIndex QObjectXmlModel::root() const
+{
+ return createIndex(m_root);
+}
+//! [0]
+
+QXmlNodeModelIndex QObjectXmlModel::root(const QXmlNodeModelIndex& n) const
+{
+ QObject *p = asQObject(n);
+ Q_ASSERT(p);
+
+ do {
+ QObject *const candidate = p->parent();
+ if (candidate)
+ p = candidate;
+ else
+ break;
+ }
+ while (true);
+
+ return createIndex(p);
+}
+
+/*!
+ We simply throw all of them into a QList and
+ return an iterator over it.
+ */
+QXmlNodeModelIndex::List QObjectXmlModel::ancestors(const QXmlNodeModelIndex n) const
+{
+ const QObject *p = asQObject(n);
+ Q_ASSERT(p);
+
+ QXmlNodeModelIndex::List result;
+ do {
+ QObject *const candidate = p->parent();
+ if (candidate) {
+ result.append(createIndex(candidate, 0));
+ p = candidate;
+ }
+ else
+ break;
+ }
+ while (true);
+
+ return result;
+}
+
+QMetaProperty QObjectXmlModel::toMetaProperty(const QXmlNodeModelIndex &n)
+{
+ const int propertyOffset = n.additionalData() & (~QObjectProperty);
+ const QObject *const qo = asQObject(n);
+ return qo->metaObject()->property(propertyOffset);
+}
+
+QXmlName QObjectXmlModel::name(const QXmlNodeModelIndex &n) const
+{
+ switch (toNodeType(n))
+ {
+ case IsQObject:
+ return QXmlName(namePool(), QLatin1String("QObject"));
+ case MetaObject:
+ return QXmlName(namePool(), QLatin1String("metaObject"));
+ case QObjectClassName:
+ case MetaObjectClassName:
+ return QXmlName(namePool(), QLatin1String("className"));
+ case QObjectProperty:
+ return QXmlName(namePool(), toMetaProperty(n).name());
+ case MetaObjects:
+ return QXmlName(namePool(), QLatin1String("metaObjects"));
+ case MetaObjectSuperClass:
+ return QXmlName(namePool(), QLatin1String("superClass"));
+ }
+
+ Q_ASSERT(false);
+ return QXmlName();
+}
+
+QVariant QObjectXmlModel::typedValue(const QXmlNodeModelIndex &n) const
+{
+ switch (toNodeType(n))
+ {
+ case QObjectProperty:
+ {
+ const QVariant &candidate = toMetaProperty(n).read(asQObject(n));
+ if (isTypeSupported(candidate.type()))
+ return candidate;
+ else
+ return QVariant();
+ }
+
+ case MetaObjectClassName:
+ return QVariant(static_cast<QMetaObject*>(n.internalPointer())->className());
+
+ case MetaObjectSuperClass:
+ {
+ const QMetaObject *const superClass = static_cast<QMetaObject*>(n.internalPointer())->superClass();
+ if (superClass)
+ return QVariant(superClass->className());
+ else
+ return QVariant();
+ }
+
+ case QObjectClassName:
+ return QVariant(asQObject(n)->metaObject()->className());
+
+ default:
+ return QVariant();
+ }
+}
+
+/*!
+ Returns \c true if QVariants of type \a type can be used
+ in QtXmlPatterns, otherwise \c false.
+ */
+bool QObjectXmlModel::isTypeSupported(QVariant::Type type)
+{
+ /* See data/qatomicvalue.cpp too. */
+ switch (type)
+ {
+ /* Fallthrough all these. */
+ case QVariant::Char:
+ case QVariant::String:
+ case QVariant::Url:
+ case QVariant::Bool:
+ case QVariant::ByteArray:
+ case QVariant::Int:
+ case QVariant::LongLong:
+ case QVariant::ULongLong:
+ case QVariant::Date:
+ case QVariant::DateTime:
+ case QVariant::Time:
+ case QVariant::Double:
+ return true;
+ default:
+ return false;
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.h b/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.h
new file mode 100644
index 0000000..2c2b468
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.h
@@ -0,0 +1,139 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef Patternist_QObjectNodeModel_H
+#define Patternist_QObjectNodeModel_H
+
+#include <QSimpleXmlNodeModel>
+
+QT_BEGIN_HEADER
+QT_BEGIN_NAMESPACE
+
+class QObject;
+class PropertyToAtomicValue;
+
+/**
+ * @short Delegates QtCore's QObject into Patternist's QAbstractXmlNodeModel.
+ * known as pre/post numbering.
+ *
+ * QObjectXmlModel sets the toggle on QXmlNodeModelIndex to @c true, if it
+ * represents a property of the QObject. That is, if the QXmlNodeModelIndex is
+ * an attribute.
+ *
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+class QObjectXmlModel : public QSimpleXmlNodeModel
+{
+ public:
+ QObjectXmlModel(QObject *const object, const QXmlNamePool &np);
+
+ QXmlNodeModelIndex root() const;
+
+//! [0]
+ virtual QXmlNodeModelIndex::DocumentOrder compareOrder(const QXmlNodeModelIndex &n1, const QXmlNodeModelIndex &n2) const;
+ virtual QXmlName name(const QXmlNodeModelIndex &n) const;
+ virtual QUrl documentUri(const QXmlNodeModelIndex &n) const;
+ virtual QXmlNodeModelIndex::NodeKind kind(const QXmlNodeModelIndex &n) const;
+ virtual QXmlNodeModelIndex root(const QXmlNodeModelIndex &n) const;
+ virtual QVariant typedValue(const QXmlNodeModelIndex &n) const;
+ virtual QVector<QXmlNodeModelIndex> attributes(const QXmlNodeModelIndex&) const;
+ virtual QXmlNodeModelIndex nextFromSimpleAxis(SimpleAxis, const QXmlNodeModelIndex&) const;
+//! [0]
+
+ private:
+ /**
+ * The highest three bits are used to signify whether the node index
+ * is an artificial node.
+ *
+ * @short if QXmlNodeModelIndex::additionalData() has the
+ * QObjectPropery flag set, then the QXmlNodeModelIndex is an
+ * attribute of the QObject element, and the remaining bits form
+ * an offset to the QObject property that the QXmlNodeModelIndex
+ * refers to.
+ *
+ */
+//! [3]
+ enum QObjectNodeType
+ {
+ IsQObject = 0,
+ QObjectProperty = 1 << 26,
+ MetaObjects = 2 << 26,
+ MetaObject = 3 << 26,
+ MetaObjectClassName = 4 << 26,
+ MetaObjectSuperClass = 5 << 26,
+ QObjectClassName = 6 << 26
+ };
+//! [3]
+
+//! [1]
+ typedef QVector<const QMetaObject *> AllMetaObjects;
+//! [1]
+ AllMetaObjects allMetaObjects() const;
+
+ static QObjectNodeType toNodeType(const QXmlNodeModelIndex &n);
+ static bool isTypeSupported(QVariant::Type type);
+ static inline QObject *asQObject(const QXmlNodeModelIndex &n);
+ static inline bool isProperty(const QXmlNodeModelIndex n);
+ static inline QMetaProperty toMetaProperty(const QXmlNodeModelIndex &n);
+ /**
+ * Returns the ancestors of @p n. Does therefore not include
+ * @p n.
+ */
+ inline QXmlNodeModelIndex::List ancestors(const QXmlNodeModelIndex n) const;
+ QXmlNodeModelIndex qObjectSibling(const int pos,
+ const QXmlNodeModelIndex &n) const;
+ QXmlNodeModelIndex metaObjectSibling(const int pos,
+ const QXmlNodeModelIndex &n) const;
+
+//! [2]
+ const QUrl m_baseURI;
+ QObject *const m_root;
+//! [4]
+ const AllMetaObjects m_allMetaObjects;
+//! [4]
+//! [2]
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.pro b/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.pro
new file mode 100644
index 0000000..39f0106
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.pro
@@ -0,0 +1,13 @@
+
+FORMS += forms/mainwindow.ui
+QT += xmlpatterns webkit
+SOURCES += qobjectxmlmodel.cpp main.cpp mainwindow.cpp ../shared/xmlsyntaxhighlighter.cpp
+HEADERS += qobjectxmlmodel.h mainwindow.h ../shared/xmlsyntaxhighlighter.h
+RESOURCES = queries.qrc
+INCLUDEPATH += ../shared/
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/qobjectxmlmodel
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro *.xq *.html
+sources.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/qobjectxmlmodel
+INSTALLS += target sources
diff --git a/examples/xmlpatterns/qobjectxmlmodel/queries.qrc b/examples/xmlpatterns/qobjectxmlmodel/queries.qrc
new file mode 100644
index 0000000..ec8cc6b
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/queries.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC>
+ <RCC version="1.0">
+<qresource>
+ <file>queries/wholeTree.xq</file>
+ <file>queries/statisticsInHTML.xq</file>
+</qresource>
+</RCC>
diff --git a/examples/xmlpatterns/qobjectxmlmodel/queries/statisticsInHTML.xq b/examples/xmlpatterns/qobjectxmlmodel/queries/statisticsInHTML.xq
new file mode 100644
index 0000000..14a7a14
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/queries/statisticsInHTML.xq
@@ -0,0 +1,58 @@
+<html>
+ <head>
+ <title></title>
+ </head>
+ <body>
+ <p>In total the tree has {count($root//QObject)} QObject instances.</p>
+ <p>Order by occurrence, the QObjects are:</p>
+
+ <ol>
+ {
+ for $i in $root/preceding-sibling::metaObjects/metaObject
+ let $count := count($root//QObject[@className eq $i/@className])
+ stable order by $count descending
+ return if($count > 1)
+ then <li>{string($i/@className), $count} occurrences</li>
+ else ()
+ }
+ </ol>
+
+ <h1>Properties</h1>
+ {
+ (: For each QObject, we create a table listing
+ : the properties of that object. :)
+ for $object in $root//QObject
+ return (<h2>{let $name := string($object/@objectName)
+ return if(string-length($name))
+ then $name
+ else "[no name]",
+ '(', string($object/@className), ')'}</h2>,
+ <table border="1">
+ <thead>
+ <tr>
+ <td>Property Name</td>
+ <td>Value</td>
+ </tr>
+ </thead>
+ <tbody>
+ {
+ $object/@*/<tr>
+ <td>
+ {
+ name()
+ }
+ </td>
+ <td>
+ {
+ if(data(.))
+ then string(.)
+ else "N/A"
+ }
+ </td>
+ </tr>
+ }
+ </tbody>
+ </table>)
+ }
+ </body>
+</html>
diff --git a/examples/xmlpatterns/qobjectxmlmodel/queries/wholeTree.xq b/examples/xmlpatterns/qobjectxmlmodel/queries/wholeTree.xq
new file mode 100644
index 0000000..253cd43
--- /dev/null
+++ b/examples/xmlpatterns/qobjectxmlmodel/queries/wholeTree.xq
@@ -0,0 +1,3 @@
+<!-- This is the QObject tree for this application, rendered as XML. -->,
+$root/preceding-sibling::metaObjects,
+$root
diff --git a/examples/xmlpatterns/recipes/files/allRecipes.xq b/examples/xmlpatterns/recipes/files/allRecipes.xq
new file mode 100644
index 0000000..6888c31
--- /dev/null
+++ b/examples/xmlpatterns/recipes/files/allRecipes.xq
@@ -0,0 +1,4 @@
+(: Select all recipes. :)
+declare variable $inputDocument external;
+
+doc($inputDocument)/cookbook/recipe/<p>{string(title)}</p>
diff --git a/examples/xmlpatterns/recipes/files/cookbook.xml b/examples/xmlpatterns/recipes/files/cookbook.xml
new file mode 100644
index 0000000..3b6f621
--- /dev/null
+++ b/examples/xmlpatterns/recipes/files/cookbook.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cookbook>
+ <recipe xml:id="MushroomSoup">
+ <title>Quick and Easy Mushroom Soup</title>
+ <ingredient name="Fresh mushrooms"
+ quantity="7"
+ unit="pieces"/>
+ <ingredient name="Garlic"
+ quantity="1"
+ unit="cloves"/>
+ <ingredient name="Olive oil"
+ quantity="2"
+ unit="tablespoons"/>
+ <ingredient name="Milk"
+ quantity="200"
+ unit="milliliters"/>
+ <ingredient name="Water"
+ quantity="200"
+ unit="milliliters"/>
+ <ingredient name="Cream"
+ quantity="100"
+ unit="milliliters"/>
+ <ingredient name="Vegetable soup cube"
+ quantity="1/2"
+ unit="cubes"/>
+ <ingredient name="Ground black pepper"
+ quantity="1/2"
+ unit="teaspoons"/>
+ <ingredient name="Dried parsley"
+ quantity="1"
+ unit="teaspoons"/>
+ <time quantity="20"
+ unit="minutes"/>
+ <method>
+ <step>1. Slice mushrooms and garlic.</step>
+ <step>2. Fry mushroom slices and garlic with olive oil.</step>
+ <step>3. Once mushrooms are cooked, add milk, cream water. Stir.</step>
+ <step>4. Add vegetable soup cube.</step>
+ <step>5. Reduce heat, add pepper and parsley.</step>
+ <step>6. Turn off the stove before the mixture boils.</step>
+ <step>7. Blend the mixture.</step>
+ </method>
+ </recipe>
+ <recipe xml:id="CheeseOnToast">
+ <title>Cheese on Toast</title>
+ <ingredient name="Bread"
+ quantity="2"
+ unit="slices"/>
+ <ingredient name="Cheese"
+ quantity="2"
+ unit="slices"/>
+ <time quantity="3"
+ unit="minutes"/>
+ <method>
+ <step>1. Slice the bread and cheese.</step>
+ <step>2. Grill one side of each slice of bread.</step>
+ <step>3. Turn over the bread and place a slice of cheese on each piece.</step>
+ <step>4. Grill until the cheese has started to melt.</step>
+ <step>5. Serve and enjoy!</step>
+ </method>
+ </recipe>
+</cookbook>
diff --git a/examples/xmlpatterns/recipes/files/liquidIngredientsInSoup.xq b/examples/xmlpatterns/recipes/files/liquidIngredientsInSoup.xq
new file mode 100644
index 0000000..3baecd8
--- /dev/null
+++ b/examples/xmlpatterns/recipes/files/liquidIngredientsInSoup.xq
@@ -0,0 +1,5 @@
+(: All liquid ingredients form Mushroom Soup. :)
+declare variable $inputDocument external;
+
+doc($inputDocument)/cookbook/recipe[@xml:id = "MushroomSoup"]/ingredient[@unit = "milliliters"]/
+<p>{@name, @quantity, @unit}</p>
diff --git a/examples/xmlpatterns/recipes/files/mushroomSoup.xq b/examples/xmlpatterns/recipes/files/mushroomSoup.xq
new file mode 100644
index 0000000..b1fee34
--- /dev/null
+++ b/examples/xmlpatterns/recipes/files/mushroomSoup.xq
@@ -0,0 +1,5 @@
+(: All ingredients for Mushroom Soup. :)
+declare variable $inputDocument external;
+
+doc($inputDocument)/cookbook/recipe[@xml:id = "MushroomSoup"]/ingredient/
+<p>{@name, @quantity}</p>
diff --git a/examples/xmlpatterns/recipes/files/preparationLessThan30.xq b/examples/xmlpatterns/recipes/files/preparationLessThan30.xq
new file mode 100644
index 0000000..d74a4eb
--- /dev/null
+++ b/examples/xmlpatterns/recipes/files/preparationLessThan30.xq
@@ -0,0 +1,9 @@
+(: All recipes taking 10 minutes or less to prepare. :)
+declare variable $inputDocument external;
+
+doc($inputDocument)/cookbook/recipe/time[@unit = "minutes" and xs:integer(@quantity) <= 10]/
+<p>
+ {
+ concat(../title, ' (', @quantity, ' ', @unit, ')')
+ }
+</p>
diff --git a/examples/xmlpatterns/recipes/files/preparationTimes.xq b/examples/xmlpatterns/recipes/files/preparationTimes.xq
new file mode 100644
index 0000000..cb4217f
--- /dev/null
+++ b/examples/xmlpatterns/recipes/files/preparationTimes.xq
@@ -0,0 +1,5 @@
+(: All recipes with preparation times. :)
+declare variable $inputDocument external;
+
+doc($inputDocument)/cookbook/recipe/
+<recipe title="{title}" time="{time/@quantity} {time/@unit}"/>
diff --git a/examples/xmlpatterns/recipes/forms/querywidget.ui b/examples/xmlpatterns/recipes/forms/querywidget.ui
new file mode 100644
index 0000000..fb2ab64
--- /dev/null
+++ b/examples/xmlpatterns/recipes/forms/querywidget.ui
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>QueryWidget</class>
+ <widget class="QMainWindow" name="QueryWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>570</width>
+ <height>531</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Recipes XQuery Example</string>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="inputGroupBox">
+ <property name="minimumSize">
+ <size>
+ <width>550</width>
+ <height>120</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Input Document</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <layout class="QVBoxLayout" name="_2">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTextEdit" name="inputTextEdit">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="queryGroupBox">
+ <property name="minimumSize">
+ <size>
+ <width>550</width>
+ <height>120</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Select your query:</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_5">
+ <item>
+ <widget class="QComboBox" name="defaultQueries"/>
+ </item>
+ <item>
+ <widget class="QTextEdit" name="queryTextEdit">
+ <property name="minimumSize">
+ <size>
+ <width>400</width>
+ <height>60</height>
+ </size>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="acceptRichText">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="outputGroupBox">
+ <property name="minimumSize">
+ <size>
+ <width>550</width>
+ <height>120</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Output Document</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_6">
+ <item>
+ <layout class="QVBoxLayout" name="_3">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTextEdit" name="outputTextEdit">
+ <property name="minimumSize">
+ <size>
+ <width>500</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="acceptRichText">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>570</width>
+ <height>26</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/xmlpatterns/recipes/main.cpp b/examples/xmlpatterns/recipes/main.cpp
new file mode 100644