diff options
Diffstat (limited to 'tools/quickbook/src/phrase_element_grammar.cpp')
-rw-r--r-- | tools/quickbook/src/phrase_element_grammar.cpp | 87 |
1 files changed, 53 insertions, 34 deletions
diff --git a/tools/quickbook/src/phrase_element_grammar.cpp b/tools/quickbook/src/phrase_element_grammar.cpp index 7a4e3c0a09..b287d63621 100644 --- a/tools/quickbook/src/phrase_element_grammar.cpp +++ b/tools/quickbook/src/phrase_element_grammar.cpp @@ -9,7 +9,8 @@ =============================================================================*/ #include "grammar_impl.hpp" -#include "actions_class.hpp" +#include "state.hpp" +#include "actions.hpp" #include "utils.hpp" #include "phrase_tags.hpp" #include <boost/spirit/include/classic_core.hpp> @@ -27,7 +28,7 @@ namespace quickbook { cl::rule<scanner> image, anchor, link, empty, cond_phrase, inner_phrase, - role + role, source_mode ; }; @@ -36,15 +37,19 @@ namespace quickbook phrase_element_grammar_local& local = cleanup_.add( new phrase_element_grammar_local); + error_action error(state); + raw_char_action raw_char(state.phrase); + scoped_parser<cond_phrase_push> scoped_cond_phrase(state); + scoped_parser<to_value_scoped_action> to_value(state); + elements.add ("?", element_info(element_info::phrase, &local.cond_phrase)) ; local.cond_phrase = blank - >> macro_identifier [actions.values.entry(ph::arg1, ph::arg2)] - >> actions.scoped_cond_phrase() - [extended_phrase] + >> macro_identifier [state.values.entry(ph::arg1, ph::arg2)] + >> scoped_cond_phrase() [extended_phrase] ; elements.add @@ -54,37 +59,37 @@ namespace quickbook // Note that the attribute values here are encoded in plain text not // boostbook. local.image = - qbk_since(105u) + qbk_ver(105u) >> blank - >> ( qbk_before(106u) + >> ( qbk_ver(0, 106u) >> (+( *cl::space_p >> +(cl::anychar_p - (cl::space_p | phrase_end | '[')) - )) [actions.values.entry(ph::arg1, ph::arg2)] - | qbk_since(106u) - >> actions.to_value() + )) [state.values.entry(ph::arg1, ph::arg2)] + | qbk_ver(106u) + >> to_value() [ +( raw_escape | (+cl::space_p >> ~cl::eps_p(phrase_end | '[')) - [actions.raw_char] + [raw_char] | (cl::anychar_p - (cl::space_p | phrase_end | '[')) - [actions.raw_char] + [raw_char] ) ] ) >> hard_space - >> *actions.values.list() + >> *state.values.list() [ '[' >> (*(cl::alnum_p | '_')) - [actions.values.entry(ph::arg1, ph::arg2)] + [state.values.entry(ph::arg1, ph::arg2)] >> space - >> ( qbk_before(106u) + >> ( qbk_ver(0, 106u) >> (*(cl::anychar_p - (phrase_end | '['))) - [actions.values.entry(ph::arg1, ph::arg2)] - | qbk_since(106u) - >> actions.to_value() + [state.values.entry(ph::arg1, ph::arg2)] + | qbk_ver(106u) + >> to_value() [ *( raw_escape | (cl::anychar_p - (phrase_end | '[')) - [actions.raw_char] + [raw_char] ) ] ) @@ -92,9 +97,9 @@ namespace quickbook >> space ] >> cl::eps_p(']') - | qbk_before(105u) + | qbk_ver(0, 105u) >> blank - >> (*(cl::anychar_p - phrase_end)) [actions.values.entry(ph::arg1, ph::arg2)] + >> (*(cl::anychar_p - phrase_end)) [state.values.entry(ph::arg1, ph::arg2)] >> cl::eps_p(']') ; @@ -113,16 +118,21 @@ namespace quickbook local.link = space - >> ( qbk_before(106u) + >> ( qbk_ver(0, 106u) >> (*(cl::anychar_p - (']' | space))) - [actions.values.entry(ph::arg1, ph::arg2)] - | qbk_since(106u) - >> actions.to_value() + [state.values.entry(ph::arg1, ph::arg2)] + | qbk_ver(106u, 107u) + >> to_value() [ *( raw_escape - | (cl::anychar_p - (']' | space)) - [actions.raw_char] + | (cl::anychar_p - (cl::ch_p('[') | ']' | space)) + [raw_char] ) ] + >> !( ~cl::eps_p(comment) + >> cl::eps_p('[') [error("Open bracket in link value.")] + ) + | qbk_ver(107u) + >> to_value() [attribute_value_1_7] ) >> hard_space >> local.inner_phrase @@ -134,13 +144,13 @@ namespace quickbook local.anchor = blank - >> ( qbk_before(106u) - >> (*(cl::anychar_p - phrase_end)) [actions.values.entry(ph::arg1, ph::arg2)] - | qbk_since(106u) - >> actions.to_value() + >> ( qbk_ver(0, 106u) + >> (*(cl::anychar_p - phrase_end)) [state.values.entry(ph::arg1, ph::arg2)] + | qbk_ver(106u) + >> to_value() [ *( raw_escape | (cl::anychar_p - phrase_end) - [actions.raw_char] + [raw_char] ) ] ) @@ -157,6 +167,15 @@ namespace quickbook ("footnote", element_info(element_info::phrase, &local.inner_phrase, phrase_tags::footnote)) ; + elements.add("!", element_info(element_info::maybe_block, &local.source_mode, code_tags::next_source_mode, 107u)) + ; + + local.source_mode = + ( cl::str_p("c++") + | "python" + | "teletype" + ) [state.values.entry(ph::arg1, ph::arg2)]; + elements.add ("c++", element_info(element_info::phrase, &local.empty, source_mode_tags::cpp)) ("python", element_info(element_info::phrase, &local.empty, source_mode_tags::python)) @@ -169,7 +188,7 @@ namespace quickbook local.role = space - >> (+(cl::alnum_p | '_')) [actions.values.entry(ph::arg1, ph::arg2)] + >> (+(cl::alnum_p | '_')) [state.values.entry(ph::arg1, ph::arg2)] >> hard_space >> local.inner_phrase ; @@ -178,7 +197,7 @@ namespace quickbook local.inner_phrase = blank - >> actions.to_value() [ paragraph_phrase ] + >> to_value() [ paragraph_phrase ] ; } } |