1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Spirit V2.1</title> 5<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../index.html" title="Spirit 2.5.8"> 8<link rel="up" href="../what_s_new.html" title="What's New"> 9<link rel="prev" href="spirit_2_2.html" title="Spirit V2.2"> 10<link rel="next" href="spirit_1_x.html" title="Spirit Classic"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="spirit_2_2.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../what_s_new.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="spirit_1_x.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h3 class="title"> 27<a name="spirit.what_s_new.spirit_2_1"></a><a class="link" href="spirit_2_1.html" title="Spirit V2.1">Spirit V2.1</a> 28</h3></div></div></div> 29<h5> 30<a name="spirit.what_s_new.spirit_2_1.h0"></a> 31 <span class="phrase"><a name="spirit.what_s_new.spirit_2_1.what_s_changed_in__emphasis_spirit_qi__emphasis__and__emphasis_spirit_karma__emphasis__from_v2_0__boost_v1_37_0__to_v2_1__boost_v1_41_0_"></a></span><a class="link" href="spirit_2_1.html#spirit.what_s_new.spirit_2_1.what_s_changed_in__emphasis_spirit_qi__emphasis__and__emphasis_spirit_karma__emphasis__from_v2_0__boost_v1_37_0__to_v2_1__boost_v1_41_0_">What's 32 changed in <span class="emphasis"><em>Spirit.Qi</em></span> and <span class="emphasis"><em>Spirit.Karma</em></span> 33 from V2.0 (Boost V1.37.0) to V2.1 (Boost V1.41.0)</a> 34 </h5> 35<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 36<li class="listitem"> 37 <a href="http://boost-spirit.com" target="_top">Spirit</a> is now based on the 38 newest version of <a href="../../../../../../doc/html/proto.html" target="_top">Boost.Proto</a> 39 </li> 40<li class="listitem"> 41 <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">phrase_parse</span></code>, <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">phrase_format</span></code> 42 now post-skip by default. 43 </li> 44<li class="listitem"> 45 <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate_delimited</span></code> and <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">format_delimited</span></code> now don't do pre- 46 delimiting by default. 47 </li> 48<li class="listitem"> 49 Changed parameter sequence of <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">phrase_parse</span></code>, 50 <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">phrase_match</span></code>, <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate_delimited</span></code>, 51 and <code class="computeroutput"><span class="identifier">match_delimited</span></code>. 52 The attribute is now always the last parameter. 53 </li> 54<li class="listitem"> 55 Added new overloads of those functions allowing to explicitly specify 56 the post-skipping and pre-delimiting behavior. 57 </li> 58<li class="listitem"> 59 Added multi attribute API functions 60 </li> 61<li class="listitem"> 62 Removed <code class="computeroutput"><span class="identifier">grammar_def</span><span class="special"><></span></code> 63 </li> 64<li class="listitem"> 65 Removed functions <code class="computeroutput"><span class="identifier">make_parser</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">make_generator</span><span class="special">()</span></code> 66 </li> 67<li class="listitem"> 68 Removed <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">none</span></code> and <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">none</span></code> 69 </li> 70<li class="listitem"> 71 Sequences and lists now accept a standard container as their attribute 72 </li> 73<li class="listitem"> 74 The string placeholder terminal now can take other strings as its parameter 75 (i.e. std::string) 76 </li> 77<li class="listitem"> 78 All terminals taking literals now accept a (lazy) function object as 79 well 80 </li> 81<li class="listitem"> 82 All placeholders for terminals and directives (such as <code class="computeroutput"><span class="identifier">int_</span></code>, <code class="computeroutput"><span class="identifier">double_</span></code>, 83 <code class="computeroutput"><span class="identifier">verbatim</span></code>, etc.) were 84 previously defined in the namespace <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span></code> 85 only. Now these are additionally imported into the namespaces <code class="computeroutput"><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">qi</span></code>, <code class="computeroutput"><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span></code>, 86 and <code class="computeroutput"><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lex</span></code> (if they are supported by the corresponding 87 sub-library). 88 </li> 89<li class="listitem"> 90 The terminal placeholders <code class="computeroutput"><span class="identifier">char_</span></code> 91 and <code class="computeroutput"><span class="identifier">string</span></code> are not defined 92 in the namespace <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span></code> 93 anymore as they have been moved to the character set namespaces, allowing 94 to do proper character set handling based on the used namespace (as 95 <code class="computeroutput"><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span></code>, etc.) 96 </li> 97<li class="listitem"> 98 The <code class="computeroutput"><span class="identifier">uint</span></code>, <code class="computeroutput"><span class="identifier">ushort</span></code>, <code class="computeroutput"><span class="identifier">ulong</span></code>, 99 and <code class="computeroutput"><span class="identifier">byte</span></code> terminal placeholders 100 have been renamed to <code class="computeroutput"><span class="identifier">uint_</span></code>, 101 <code class="computeroutput"><span class="identifier">ushort_</span></code>, <code class="computeroutput"><span class="identifier">ulong_</span></code>, and <code class="computeroutput"><span class="identifier">byte_</span></code>. 102 </li> 103<li class="listitem"> 104 <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">skip</span><span class="special">[]</span></code> 105 now re-enables outer skipper if used inside <code class="computeroutput"><span class="identifier">lexeme</span><span class="special">[]</span></code> 106 </li> 107<li class="listitem"> 108 Added <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">maxwidth</span><span class="special">[]</span></code> 109 directive (see <a class="link" href="../karma/reference/directive/maxwidth.html" title="Generator Directives Controlling the Maximum Field Width (maxwidth[])"><code class="computeroutput"><span class="identifier">maxwidth</span></code></a>) 110 </li> 111<li class="listitem"> 112 Added <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">omit</span><span class="special">[]</span></code> 113 allowing to consume the attribute of subject generator without emitting 114 any output (see <a class="link" href="../karma/reference/directive/omit.html" title="Generator Directives Consuming Attributes (omit[] and skip[])"><code class="computeroutput"><span class="identifier">omit</span></code></a>). 115 </li> 116<li class="listitem"> 117 Added <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">buffer</span><span class="special">[]</span></code> 118 allowing to avoid unwanted output to be generated in case of a generator 119 failing in the middle of a sequence (see <a class="link" href="../karma/reference/directive/buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])"><code class="computeroutput"><span class="identifier">buffer</span></code></a>). 120 </li> 121<li class="listitem"> 122 <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">delimit</span><span class="special">[]</span></code> 123 now re-enables outer delimiter if used inside <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code> 124 </li> 125<li class="listitem"> 126 Karma: added and-predicate (<code class="computeroutput"><span class="keyword">operator</span><span class="special">&()</span></code>) and not-predicate (<code class="computeroutput"><span class="keyword">operator</span><span class="special">!()</span></code>) 127 Both now always consume an attribute. 128 </li> 129<li class="listitem"> 130 Karma: changed semantics of <code class="computeroutput"><span class="identifier">char_</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">string</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">int_</span><span class="special">()</span></code> et.al., and <code class="computeroutput"><span class="identifier">double_</span><span class="special">()</span></code> et.al.: all of these generators now 131 always expose an attribute. If they do not have an associated attribute, 132 they generate their immediate literal. If they have an associated attribute, 133 the generators first test if the attribute value is equal to the immediate 134 literal. They fail and do not generate anything if those are not equal. 135 Otherwise they generate their immediate literal. For more information 136 see for instance <a class="link" href="../karma/reference/numeric/signed_int.html" title="Signed Integer Number Generators (int_, etc.)"><code class="computeroutput"><span class="identifier">int_</span></code></a>. 137 </li> 138<li class="listitem"> 139 <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">lit</span><span class="special">()</span></code> 140 can now be used to generate integer and floating point numbers 141 </li> 142<li class="listitem"> 143 <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">rule</span></code> and <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">rule</span></code> 144 now can be directly initialized using their copy constructor. I.e. this 145 works now: <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">rule</span><span class="special"><...></span> 146 <span class="identifier">r</span> <span class="special">=</span> 147 <span class="special">...</span><span class="identifier">some</span> 148 <span class="identifier">parser</span><span class="special">...;</span></code>. 149 </li> 150<li class="listitem"> 151 Added <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">attr</span><span class="special">()</span></code> 152 exposing its immediate parameter as its attribute. 153 </li> 154<li class="listitem"> 155 Added boolean parsers and generators (<code class="computeroutput"><span class="identifier">bool_</span></code>, 156 <code class="computeroutput"><span class="identifier">true_</span></code>, <code class="computeroutput"><span class="identifier">false_</span></code>). 157 </li> 158<li class="listitem"> 159 Added <code class="computeroutput"><span class="identifier">attr_cast</span><span class="special"><></span></code> 160 enabling in place attribute type conversion in Qi and Karma grammars. 161 </li> 162<li class="listitem"> 163 Almost all Karma generators now accept <code class="computeroutput"><span class="identifier">optional</span><span class="special"><></span></code> attributes and will fail generating 164 if this is not initialized. 165 </li> 166<li class="listitem"> 167 Qi and Karma rules now automatically detect whether to apply auto-rule 168 semantics or not (no need for using <code class="computeroutput"><span class="keyword">operator</span><span class="special">%=()</span></code> anymore, even if it's still existing). 169 Auto-rule semantics are applied if the right hand side has no semantic 170 actions attached to any of the elements. This works for rule initialization 171 and assignment. 172 </li> 173<li class="listitem"> 174 Qi and Karma rules now do intrinsic attribute transformation based on 175 the attribute customization point <a class="link" href="../advanced/customize/transform.html" title="Transform an Attribute to a Different Type (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">transform_attribute</span></code></a>. 176 </li> 177<li class="listitem"> 178 All char_ parsers now always expose an attribute. Earlier <code class="computeroutput"><span class="identifier">char_</span><span class="special">(...)</span></code> 179 didn't expose an attribute while <code class="computeroutput"><span class="identifier">char_</span></code> 180 did. If you need a literal parser not exposing any attribute use <code class="computeroutput"><span class="identifier">lit</span><span class="special">(...)</span></code> 181 instead. 182 </li> 183<li class="listitem"> 184 The qi::int_spec, qi::real_spec, karma::int_spec, and karma real_spec 185 types do not exist anymore. These have been replaced with qi::int_parser, 186 qi::real_parser, karma::int_generator, and karma::real_generator. 187 </li> 188</ul></div> 189<h5> 190<a name="spirit.what_s_new.spirit_2_1.h1"></a> 191 <span class="phrase"><a name="spirit.what_s_new.spirit_2_1.what_s_changed_in__emphasis_spirit_lex__emphasis__from_v2_0__boost_v1_37_0__to_v2_1__boost_v1_41_0_"></a></span><a class="link" href="spirit_2_1.html#spirit.what_s_new.spirit_2_1.what_s_changed_in__emphasis_spirit_lex__emphasis__from_v2_0__boost_v1_37_0__to_v2_1__boost_v1_41_0_">What's 192 changed in <span class="emphasis"><em>Spirit.Lex</em></span> from V2.0 (Boost V1.37.0) to V2.1 193 (Boost V1.41.0)</a> 194 </h5> 195<p> 196 Here is a list of changes in <span class="emphasis"><em>Spirit.Lex</em></span> since version 197 2.0. <span class="emphasis"><em>Spirit.Lex</em></span> 2.1 is a complete rewrite of the <span class="emphasis"><em>Spirit.Lex</em></span> 198 distributed with Boost V1.37. As with all code portions of the <a href="http://boost-spirit.com" target="_top">Spirit</a> 199 library, <span class="emphasis"><em>Spirit.Lex</em></span> is usable as stand alone piece. 200 <span class="emphasis"><em>Spirit.Lex</em></span> now uses the infrastructure provided by 201 <a href="http://boost-spirit.com" target="_top">Spirit</a> version 2.1. 202 </p> 203<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 204<li class="listitem"> 205 The lex::lexer_def class has been renamed to lex::lexer, while the original 206 class lex::lexer does not exist anymore. This simplifies the creation 207 of lexers. 208 </li> 209<li class="listitem"> 210 The lex::lexer class does not have the function <code class="computeroutput"><span class="identifier">def</span><span class="special">(</span><span class="identifier">Self</span><span class="special">&</span> <span class="identifier">self</span><span class="special">)</span></code> anymore, token definitions can be added 211 to the lexer at any time, usually in the constructor of the user defined 212 lexer class: 213<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">></span> 214<span class="keyword">struct</span> <span class="identifier">example_tokens</span> <span class="special">:</span> <span class="identifier">lex</span><span class="special">::</span><span class="identifier">lexer</span><span class="special"><</span><span class="identifier">Lexer</span><span class="special">></span> 215<span class="special">{</span> 216 <span class="identifier">example_tokens</span><span class="special">()</span> 217 <span class="special">{</span> 218 <span class="comment">// your token definitions here</span> 219 <span class="keyword">this</span><span class="special">-></span><span class="identifier">self</span> <span class="special">=</span> <span class="special">...</span> 220 <span class="special">}</span> 221<span class="special">};</span> 222</pre> 223 </li> 224<li class="listitem"> 225 The new lexer class can now be used directly. The function <code class="computeroutput"><span class="identifier">make_lexer</span><span class="special">()</span></code> 226 has been removed. 227 </li> 228<li class="listitem"> 229 The <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">tokenize_and_parse</span><span class="special">()</span></code> 230 and <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">tokenize_and_phrase_parse</span><span class="special">()</span></code> 231 functions have been changed to match the parameter sequence as implemented 232 by the <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">parse</span><span class="special">()</span></code> 233 and <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">phrase_parse</span><span class="special">()</span></code> 234 functions. Both take an arbitrary number of attribute arguments as the 235 last parameters. This argument list is limited by the macro <code class="computeroutput"><span class="identifier">SPIRIT_ARGUMENTS_LIMIT</span></code>. 236 </li> 237<li class="listitem"> 238 The <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">lexertl_lexer</span></code>, and <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">lexertl_token</span></code> 239 classes have been moved to the <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">lexertl</span></code> 240 namespace and the names have been changed to <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">lexertl</span><span class="special">::</span><span class="identifier">lexer</span></code>, 241 <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">lexertl</span><span class="special">::</span><span class="identifier">token</span></code>. This also applies to the <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">lexert_actor_lexer</span></code>, and the <code class="computeroutput"><span class="identifier">static_lexertl_</span><span class="special">*</span></code> 242 family of types. 243 </li> 244<li class="listitem"> 245 The class <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">lexertl_token_set</span></code> has been removed. 246 This functionality is now available from the lexer class. 247 </li> 248<li class="listitem"> 249 The <span class="emphasis"><em>Spirit.Lex</em></span> library has been updated to use the 250 newest version of Ben Hansons <a href="http://www.benhanson.net/lexertl.html" target="_top">Lexertl</a> 251 lexer construction library (Boost review pending). 252 </li> 253<li class="listitem"> 254 The <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">lexer</span><span class="special"><</span><span class="identifier">Lexer</span><span class="special">></span></code> 255 template constructor now takes an optional parameter specifying the 256 <code class="computeroutput"><span class="identifier">match_flags</span></code> to be used 257 for table generation. Currently, there are the following flags available: 258<pre class="programlisting"><span class="identifier">match_flags</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">,</span> <span class="comment">// no flags</span> 259<span class="identifier">match_flags</span><span class="special">::</span><span class="identifier">match_not_dot_newline</span><span class="special">,</span> <span class="comment">// the regex '.' doesn't match newlines</span> 260<span class="identifier">match_flags</span><span class="special">::</span><span class="identifier">match_icase</span> <span class="comment">// all matching operations are case insensitive</span> 261</pre> 262 If no parameter is passed to the constructor, <code class="computeroutput"><span class="identifier">match_flags</span><span class="special">::</span><span class="identifier">match_default</span></code> 263 is used, i.e. the <code class="computeroutput"><span class="special">.</span></code> matches 264 newlines and matching is case sensitive. 265 </li> 266<li class="listitem"> 267 The <code class="computeroutput"><span class="identifier">char_</span><span class="special">()</span></code> 268 and <code class="computeroutput"><span class="identifier">string</span><span class="special">()</span></code> 269 placeholders can now be used for token definitions and are synonymous 270 with <code class="computeroutput"><span class="identifier">token_def</span></code>. 271 </li> 272<li class="listitem"> 273 Lexer semantic actions now have to conform to a changed interface (see 274 <a class="link" href="../lex/abstracts/lexer_semantic_actions.html" title="Lexer Semantic Actions">Lexer Semantic 275 Actions</a> for details). 276 </li> 277<li class="listitem"> 278 Added placeholder symbols usable from the inside of lexer semantic actions 279 while using Phoenix: <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">_start</span></code>, 280 <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">_end</span></code>, <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">_eoi</span></code>, 281 <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">_state</span></code>, <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">_val</span></code>, 282 and <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">_pass</span></code> (see <a class="link" href="../lex/abstracts/lexer_semantic_actions.html" title="Lexer Semantic Actions">Lexer 283 Semantic Actions</a> for more details). 284 </li> 285<li class="listitem"> 286 Added (lazy) support functions usable from the inside of lexer semantic 287 actions while using Phoenix: <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">more</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">less</span><span class="special">()</span></code>, and <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">lookahead</span><span class="special">()</span></code> (see <a class="link" href="../lex/abstracts/lexer_semantic_actions.html" title="Lexer Semantic Actions">Lexer 288 Semantic Actions</a> for more details). 289 </li> 290<li class="listitem"> 291 Removed <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">omitted</span></code> in favor of <code class="computeroutput"><span class="identifier">lex</span><span class="special">::</span><span class="identifier">omit</span></code> 292 to unify the overall interface. 293 </li> 294</ul></div> 295</div> 296<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 297<td align="left"></td> 298<td align="right"><div class="copyright-footer">Copyright © 2001-2011 Joel de Guzman, Hartmut Kaiser<p> 299 Distributed under the Boost Software License, Version 1.0. (See accompanying 300 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 301 </p> 302</div></td> 303</tr></table> 304<hr> 305<div class="spirit-nav"> 306<a accesskey="p" href="spirit_2_2.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../what_s_new.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="spirit_1_x.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 307</div> 308</body> 309</html> 310