• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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">&lt;&gt;</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">&amp;()</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">&lt;...&gt;</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">&lt;&gt;</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">&lt;&gt;</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">&amp;</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">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">&gt;</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">&lt;</span><span class="identifier">Lexer</span><span class="special">&gt;</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">-&gt;</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">&lt;</span><span class="identifier">Lexer</span><span class="special">&gt;</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