From e779bb6f080cd8fdd2ea5e5643a653e348872071 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Tue, 22 Nov 2011 23:50:17 +0000 Subject: [PATCH] Quickbook: Avoid expanding macros that are now invalid. The macro syntax has been tightened up in 1.6, so that fewer characters are available for macro identifiers. But macros can still be defined using the older quickbook versions When such macros are defined, prevent them from expanding in a quickbook 1.6 document. [SVN r75630] --- src/main_grammar.cpp | 15 ++++++---- test/versions/Jamfile.v2 | 1 + test/versions/invalid_macro-1_6.gold | 36 +++++++++++++++++++++++ test/versions/invalid_macro-1_6.quickbook | 14 +++++++++ test/versions/invalid_macro-inc-1_1.qbk | 7 +++++ 5 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 test/versions/invalid_macro-1_6.gold create mode 100644 test/versions/invalid_macro-1_6.quickbook create mode 100644 test/versions/invalid_macro-inc-1_1.qbk 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__