Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r69189 - in branches/quickbook-filenames/tools/quickbook: src test
From: dnljms_at_[hidden]
Date: 2011-02-22 16:28:51


Author: danieljames
Date: 2011-02-22 16:28:49 EST (Tue, 22 Feb 2011)
New Revision: 69189
URL: http://svn.boost.org/trac/boost/changeset/69189

Log:
More nestable elements. Refs #1193
Text files modified:
   branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp | 38 +++++++++++-----------
   branches/quickbook-filenames/tools/quickbook/src/grammar_impl.hpp | 9 +++-
   branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp | 60 ++++++++++++++++++++++++++++++------
   branches/quickbook-filenames/tools/quickbook/src/syntax_highlight.hpp | 27 +++++++++++-----
   branches/quickbook-filenames/tools/quickbook/test/table_1_5.gold | 65 ++++++++++++++++++++++++++++++++++++++++
   branches/quickbook-filenames/tools/quickbook/test/table_1_5.quickbook | 24 ++++++++++++++
   6 files changed, 181 insertions(+), 42 deletions(-)

Modified: branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp (original)
+++ branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp 2011-02-22 16:28:49 EST (Tue, 22 Feb 2011)
@@ -88,27 +88,27 @@
             ;
 
         elements.add
- ("heading", element_info(element_info::block, &local.heading, block_tags::generic_heading))
- ("h1", element_info(element_info::block, &local.heading, block_tags::heading1))
- ("h2", element_info(element_info::block, &local.heading, block_tags::heading2))
- ("h3", element_info(element_info::block, &local.heading, block_tags::heading3))
- ("h4", element_info(element_info::block, &local.heading, block_tags::heading4))
- ("h5", element_info(element_info::block, &local.heading, block_tags::heading5))
- ("h6", element_info(element_info::block, &local.heading, block_tags::heading6))
+ ("heading", element_info(element_info::conditional_or_block, &local.heading, block_tags::generic_heading))
+ ("h1", element_info(element_info::conditional_or_block, &local.heading, block_tags::heading1))
+ ("h2", element_info(element_info::conditional_or_block, &local.heading, block_tags::heading2))
+ ("h3", element_info(element_info::conditional_or_block, &local.heading, block_tags::heading3))
+ ("h4", element_info(element_info::conditional_or_block, &local.heading, block_tags::heading4))
+ ("h5", element_info(element_info::conditional_or_block, &local.heading, block_tags::heading5))
+ ("h6", element_info(element_info::conditional_or_block, &local.heading, block_tags::heading6))
             ;
 
         elements.add
- ("blurb", element_info(element_info::block, &local.inner_block, block_tags::blurb))
- (":", element_info(element_info::block, &local.inner_block, block_tags::blockquote))
- ("warning", element_info(element_info::block, &local.inner_block, block_tags::warning))
- ("caution", element_info(element_info::block, &local.inner_block, block_tags::caution))
- ("important", element_info(element_info::block, &local.inner_block, block_tags::important))
- ("note", element_info(element_info::block, &local.inner_block, block_tags::note))
- ("tip", element_info(element_info::block, &local.inner_block, block_tags::tip))
+ ("blurb", element_info(element_info::nested_block, &local.inner_block, block_tags::blurb))
+ (":", element_info(element_info::nested_block, &local.inner_block, block_tags::blockquote))
+ ("warning", element_info(element_info::nested_block, &local.inner_block, block_tags::warning))
+ ("caution", element_info(element_info::nested_block, &local.inner_block, block_tags::caution))
+ ("important", element_info(element_info::nested_block, &local.inner_block, block_tags::important))
+ ("note", element_info(element_info::nested_block, &local.inner_block, block_tags::note))
+ ("tip", element_info(element_info::nested_block, &local.inner_block, block_tags::tip))
             ;
 
         elements.add
- ("pre", element_info(element_info::block, &local.preformatted, block_tags::preformatted))
+ ("pre", element_info(element_info::nested_block, &local.preformatted, block_tags::preformatted))
             ;
 
         local.preformatted =
@@ -120,7 +120,7 @@
             ;
 
         elements.add
- ("def", element_info(element_info::block, &local.def_macro, block_tags::macro_definition))
+ ("def", element_info(element_info::conditional_or_block, &local.def_macro, block_tags::macro_definition))
             ;
 
         local.def_macro =
@@ -139,7 +139,7 @@
             ;
 
         elements.add
- ("template", element_info(element_info::block, &local.template_, block_tags::template_definition))
+ ("template", element_info(element_info::conditional_or_block, &local.template_, block_tags::template_definition))
             ;
 
         local.template_ =
@@ -168,7 +168,7 @@
             ;
 
         elements.add
- ("variablelist", element_info(element_info::block, &local.variablelist, block_tags::variable_list))
+ ("variablelist", element_info(element_info::nested_block, &local.variablelist, block_tags::variable_list))
             ;
 
         local.variablelist =
@@ -206,7 +206,7 @@
             ;
 
         elements.add
- ("table", element_info(element_info::block, &local.table, block_tags::table))
+ ("table", element_info(element_info::nested_block, &local.table, block_tags::table))
             ;
 
         local.table =

Modified: branches/quickbook-filenames/tools/quickbook/src/grammar_impl.hpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/grammar_impl.hpp (original)
+++ branches/quickbook-filenames/tools/quickbook/src/grammar_impl.hpp 2011-02-22 16:28:49 EST (Tue, 22 Feb 2011)
@@ -26,12 +26,15 @@
             in_block = 1,
             in_phrase = 2,
             in_conditional = 4,
+ in_nested_block = 8
         };
 
         enum type_enum {
- block = 1,
- phrase = 2,
- conditional_or_block = 5
+ nothing = 0,
+ block = in_block,
+ conditional_or_block = block | in_conditional,
+ nested_block = conditional_or_block | in_nested_block,
+ phrase = nested_block | in_phrase
         };
 
         element_info(

Modified: branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp (original)
+++ branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp 2011-02-22 16:28:49 EST (Tue, 22 Feb 2011)
@@ -94,7 +94,7 @@
                 // be overridden by nested markup.
                 element_type_ = l.element_type;
 
- if (element_type_ & element_info::block)
+ if (!(element_type_ & element_info::in_phrase))
                     l.actions_.paragraph();
 
                 l.actions_.values.reset()();
@@ -105,7 +105,7 @@
             template <typename ResultT, typename ScannerT>
             bool result(ResultT result, ScannerT const& scan)
             {
- if (result || !(l.element_type & element_info::block))
+ if (result || l.element_type & element_info::in_phrase)
                     return result;
 
                 l.actions_.error(scan.first, scan.first);
@@ -113,11 +113,29 @@
             }
 
             void success() { l.element_type = element_type_; }
- void failure() { l.element_type = element_type_; }
+ void failure() { l.element_type = element_info::nothing; }
 
             main_grammar_local& l;
             element_info::type_enum element_type_;
         };
+
+ struct is_block_type
+ {
+ typedef bool result_type;
+ template <typename Arg1 = void>
+ struct result { typedef bool type; };
+
+ is_block_type(main_grammar_local& l)
+ : l_(l)
+ {}
+
+ bool operator()() const
+ {
+ return !(l_.element_type & element_info::in_phrase);
+ }
+
+ main_grammar_local& l_;
+ };
 
         cl::rule<scanner>
                         top_level, blocks, paragraph_separator,
@@ -146,11 +164,13 @@
         quickbook::actions& actions_;
         assign_element_type assign_element;
         scoped_parser<process_element_impl> process_element;
+ is_block_type is_block;
 
         main_grammar_local(quickbook::actions& actions)
             : actions_(actions)
             , assign_element(*this)
             , process_element(*this)
+ , is_block(*this)
             {}
     };
 
@@ -172,7 +192,9 @@
             actions.scoped_context(element_info::in_block)
             [ local.blocks
>> *( local.element
- >> !(+eol >> local.blocks)
+ >> cl::if_p(local.is_block)
+ [ !(+eol >> local.blocks)
+ ]
                 | local.paragraph_separator >> local.blocks
                 | common
                 | cl::space_p [actions.space_char]
@@ -248,6 +270,8 @@
             ;
 
         local.list_item =
+ actions.scoped_context(element_info::in_phrase)
+ [
             actions.values.save()
             [
                 *( common
@@ -258,12 +282,12 @@
                     ) [actions.plain_char]
                 )
             ]
+ ]
>> +eol
             ;
 
         common =
- actions.scoped_context(element_info::in_phrase)
- [ local.macro
+ local.macro
             | local.element
             | local.template_
             | local.break_
@@ -272,7 +296,6 @@
             | local.simple_format
             | local.escape
             | comment
- ]
             ;
 
         local.macro =
@@ -409,26 +432,32 @@
             '=', actions.simple_teletype, local.simple_phrase_end);
 
         phrase =
+ actions.scoped_context(element_info::in_phrase)
+ [
             actions.values.save()
             [ *( common
                 | (cl::anychar_p - phrase_end)
                                                 [actions.plain_char]
                 )
             ]
+ ]
             ;
 
         extended_phrase =
+ actions.scoped_context(element_info::in_conditional)
+ [
             actions.values.save()
- [ *( actions.scoped_context(element_info::in_conditional)
- [ local.element ]
- | common
+ [ *( common
                 | (cl::anychar_p - phrase_end)
                                                 [actions.plain_char]
                 )
             ]
+ ]
             ;
 
         inside_paragraph =
+ actions.scoped_context(element_info::in_nested_block)
+ [
             actions.values.save()
             [ *( local.paragraph_separator [actions.paragraph]
                 | common
@@ -436,6 +465,7 @@
                                                 [actions.plain_char]
                 )
             ] [actions.paragraph]
+ ]
             ;
 
         local.escape =
@@ -457,11 +487,16 @@
         // Simple phrase grammar
         //
 
- simple_phrase = actions.values.save()[
+ simple_phrase =
+ actions.scoped_context(element_info::in_phrase)
+ [
+ actions.values.save()
+ [
            *( common
             | (cl::anychar_p - ']') [actions.plain_char]
             )
             ]
+ ]
             ;
 
         //
@@ -489,11 +524,14 @@
 
 
         local.command_line_phrase =
+ actions.scoped_context(element_info::in_phrase)
+ [
             actions.values.save()
             [ *( common
                 | (cl::anychar_p - ']') [actions.plain_char]
                 )
             ]
+ ]
             ;
 
         // Miscellaneous stuff

Modified: branches/quickbook-filenames/tools/quickbook/src/syntax_highlight.hpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/syntax_highlight.hpp (original)
+++ branches/quickbook-filenames/tools/quickbook/src/syntax_highlight.hpp 2011-02-22 16:28:49 EST (Tue, 22 Feb 2011)
@@ -16,6 +16,7 @@
 #include <boost/spirit/include/classic_symbols.hpp>
 #include <boost/spirit/include/classic_loops.hpp>
 #include "grammar.hpp"
+#include "grammar_impl.hpp" // Just for context stuff. Should move?
 
 namespace quickbook
 {
@@ -69,10 +70,12 @@
                     ;
 
                 qbk_phrase =
- *( g.common
- | (cl::anychar_p - cl::str_p("``"))
+ self.escape_actions.scoped_context(element_info::in_phrase)
+ [ *( g.common
+ | (cl::anychar_p - cl::str_p("``"))
                                         [self.escape_actions.plain_char]
- )
+ )
+ ]
                     ;
 
                 escape =
@@ -218,10 +221,13 @@
                     ;
 
                 qbk_phrase =
- *( g.common
- | (cl::anychar_p - cl::str_p("``"))
+ self.escape_actions.scoped_context(element_info::in_phrase)
+ [
+ *( g.common
+ | (cl::anychar_p - cl::str_p("``"))
                                         [self.escape_actions.plain_char]
- )
+ )
+ ]
                     ;
 
                 escape =
@@ -362,10 +368,13 @@
                     ;
 
                 qbk_phrase =
- *( g.common
- | (cl::anychar_p - cl::str_p("``"))
+ self.escape_actions.scoped_context(element_info::in_phrase)
+ [
+ *( g.common
+ | (cl::anychar_p - cl::str_p("``"))
                                         [self.escape_actions.plain_char]
- )
+ )
+ ]
                     ;
 
                 escape =

Modified: branches/quickbook-filenames/tools/quickbook/test/table_1_5.gold
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/test/table_1_5.gold (original)
+++ branches/quickbook-filenames/tools/quickbook/test/table_1_5.gold 2011-02-22 16:28:49 EST (Tue, 22 Feb 2011)
@@ -233,5 +233,70 @@
         </tbody>
       </tgroup>
     </table>
+ <table frame="all" id="table_1_5.section1.nested_tables">
+ <title>Nested Tables</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry>
+ <para>
+ Header 1
+ </para>
+ </entry>
+ <entry>
+ <para>
+ Header 2
+ </para>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <table frame="all" id="table_1_5.section1.inner_table">
+ <title>Inner Table</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>
+ <para>
+ 1.1
+ </para>
+ </entry>
+ <entry>
+ <para>
+ 1.2
+ </para>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <para>
+ 2.1
+ </para>
+ </entry>
+ <entry>
+ <para>
+ 2.2
+ </para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <para>
+ Something.
+ </para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
   </section>
 </article>

Modified: branches/quickbook-filenames/tools/quickbook/test/table_1_5.quickbook
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/test/table_1_5.quickbook (original)
+++ branches/quickbook-filenames/tools/quickbook/test/table_1_5.quickbook 2011-02-22 16:28:49 EST (Tue, 22 Feb 2011)
@@ -69,4 +69,28 @@
   ]
 ]
 
+[table Nested Tables
+ [
+ [
+ Header 1
+ ]
+ [
+ Header 2
+ ]
+ ]
+ [
+ [
+ [table Inner Table
+ [[1.1][1.2]]
+ [[2.1][2.2]]
+ ]
+ ]
+ ]
+ [
+ [
+ Something.
+ ]
+ ]
+]
+
 [endsect]
\ No newline at end of file


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk