diff --git a/src/main_grammar.cpp b/src/main_grammar.cpp index 97f99ab..4506e0d 100644 --- a/src/main_grammar.cpp +++ b/src/main_grammar.cpp @@ -461,10 +461,14 @@ namespace quickbook ; local.macro = - // must not be followed by alpha or underscore - cl::eps_p(actions.macro - >> (cl::eps_p - (cl::alpha_p | '_'))) - >> actions.macro [actions.do_macro] + cl::eps_p + ( ( actions.macro + >> ~cl::eps_p(cl::alpha_p | '_') + // must not be followed by alpha or underscore + ) + & macro_identifier // must be a valid macro for the current version + ) + >> actions.macro [actions.do_macro] ; local.template_ = @@ -585,7 +589,7 @@ namespace quickbook [ actions.to_value() [ - cl::eps_p(actions.macro >> local.simple_markup_end) + cl::eps_p((actions.macro & macro_identifier) >> local.simple_markup_end) >> actions.macro [actions.do_macro] | ~cl::eps_p(cl::f_ch_p(local.simple_markup.mark)) >> +( ~cl::eps_p @@ -717,7 +721,6 @@ namespace quickbook '[' >> *(local.line_dummy_block | (cl::anychar_p - (cl::eol_p | ']'))) >> ']' ; - // TODO: Prevent an old macro from being used in a 1.6 file. macro_identifier = qbk_since(106u) >> +(cl::anychar_p - (cl::space_p | '[' | '\\' | ']')) diff --git a/test/versions/Jamfile.v2 b/test/versions/Jamfile.v2 index 0ac3f44..ccb46dc 100644 --- a/test/versions/Jamfile.v2 +++ b/test/versions/Jamfile.v2 @@ -15,4 +15,5 @@ import quickbook-testing : quickbook-test quickbook-error-test ; test-suite quickbook.test : [ quickbook-test versions-1_6 ] + [ quickbook-test invalid_macro-1_6 ] ; diff --git a/test/versions/invalid_macro-1_6.gold b/test/versions/invalid_macro-1_6.gold new file mode 100644 index 0000000..cb62412 --- /dev/null +++ b/test/versions/invalid_macro-1_6.gold @@ -0,0 +1,36 @@ + + +
+ Invalid macro test + + Import: + + + + + okay + + + + + __invalid\macro__ + + + + + Include: + + + + + okay + + + + + bad + + + +
diff --git a/test/versions/invalid_macro-1_6.quickbook b/test/versions/invalid_macro-1_6.quickbook new file mode 100644 index 0000000..f579f72 --- /dev/null +++ b/test/versions/invalid_macro-1_6.quickbook @@ -0,0 +1,14 @@ +[article Invalid macro test +[quickbook 1.6] +] + +Import: + +[import invalid_macro-inc-1_1.qbk] + +* __valid__ +* __invalid\macro__ + +Include: + +[include invalid_macro-inc-1_1.qbk] diff --git a/test/versions/invalid_macro-inc-1_1.qbk b/test/versions/invalid_macro-inc-1_1.qbk new file mode 100644 index 0000000..c44bd67 --- /dev/null +++ b/test/versions/invalid_macro-inc-1_1.qbk @@ -0,0 +1,7 @@ +[quickbook 1.1] + +[def __valid__ okay] +[def __invalid\macro__ bad] + +* __valid__ +* __invalid\macro__