|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r53738 - in branches/quickbook-1.5: . detail test
From: daniel_james_at_[hidden]
Date: 2009-06-07 16:35:10
Author: danieljames
Date: 2009-06-07 16:35:09 EDT (Sun, 07 Jun 2009)
New Revision: 53738
URL: http://svn.boost.org/trac/boost/changeset/53738
Log:
Don't use seperators that are in brackets, or are escaped. Refs #2036.
Text files modified:
branches/quickbook-1.5/detail/actions.cpp | 52 +++++++++++++++++++++++++++++++++++++++
branches/quickbook-1.5/phrase.hpp | 30 +++++++++++++++++++++-
branches/quickbook-1.5/test/templates_1_5.gold | 6 ++++
branches/quickbook-1.5/test/templates_1_5.quickbook | 8 ++++++
4 files changed, 93 insertions(+), 3 deletions(-)
Modified: branches/quickbook-1.5/detail/actions.cpp
==============================================================================
--- branches/quickbook-1.5/detail/actions.cpp (original)
+++ branches/quickbook-1.5/detail/actions.cpp 2009-06-07 16:35:09 EDT (Sun, 07 Jun 2009)
@@ -519,6 +519,56 @@
namespace
{
+ std::string::size_type find_bracket_end(std::string const& str, std::string::size_type pos)
+ {
+ unsigned int depth = 1;
+
+ while(depth > 0) {
+ pos = str.find_first_of("[]\\", pos);
+ if(pos == std::string::npos) return pos;
+
+ if(str[pos] == '\\')
+ {
+ pos += 2;
+ }
+ else
+ {
+ depth += (str[pos] == '[') ? 1 : -1;
+ ++pos;
+ }
+ }
+
+ return pos;
+ }
+
+ std::string::size_type find_first_seperator(std::string const& str)
+ {
+ if(qbk_version_n < 105) {
+ return str.find_first_of(" \t\r\n");
+ }
+ else {
+ std::string::size_type pos = 0;
+
+ while(true)
+ {
+ pos = str.find_first_of(" \t\r\n\\[", pos);
+ if(pos == std::string::npos) return pos;
+
+ switch(str[pos])
+ {
+ case '[':
+ pos = find_bracket_end(str, pos + 1);
+ break;
+ case '\\':
+ pos += 2;
+ break;
+ default:
+ return pos;
+ }
+ }
+ }
+ }
+
bool break_arguments(
std::vector<std::string>& template_info
, std::vector<std::string> const& template_
@@ -543,7 +593,7 @@
// arguments, or if there are no more spaces left.
std::string& str = template_info.back();
- std::string::size_type l_pos = str.find_first_of(" \t\r\n");
+ std::string::size_type l_pos = find_first_seperator(str);
if (l_pos == std::string::npos)
break;
std::string first(str.begin(), str.begin()+l_pos);
Modified: branches/quickbook-1.5/phrase.hpp
==============================================================================
--- branches/quickbook-1.5/phrase.hpp (original)
+++ branches/quickbook-1.5/phrase.hpp 2009-06-07 16:35:09 EDT (Sun, 07 Jun 2009)
@@ -10,6 +10,7 @@
#if !defined(BOOST_SPIRIT_QUICKBOOK_PHRASE_HPP)
#define BOOST_SPIRIT_QUICKBOOK_PHRASE_HPP
+#include "./detail/quickbook.hpp"
#include "detail/utils.hpp"
#include <boost/spirit/include/classic_core.hpp>
#include <boost/spirit/include/classic_confix.hpp>
@@ -142,7 +143,11 @@
;
template_args =
- template_args_1_4
+ if_p(qbk_since(105u)) [
+ template_args_1_5
+ ].else_p [
+ template_args_1_4
+ ]
;
template_args_1_4 =
@@ -160,6 +165,25 @@
'[' >> +template_arg_1_4 >> ']'
;
+ template_args_1_5 =
+ template_arg_1_5 [push_back_a(actions.template_info)]
+ >> *(
+ ".." >> template_arg_1_5 [push_back_a(actions.template_info)]
+ )
+ ;
+
+ template_arg_1_5 =
+ +(brackets_1_5 | ('\\' >> anychar_p) | (anychar_p - (str_p("..") | '[' | ']')))
+ ;
+
+ template_inner_arg_1_5 =
+ +(brackets_1_5 | ('\\' >> anychar_p) | (anychar_p - (str_p('[') | ']')))
+ ;
+
+ brackets_1_5 =
+ '[' >> +template_inner_arg_1_5 >> ']'
+ ;
+
inline_code =
'`' >>
(
@@ -427,7 +451,9 @@
simple_teletype, source_mode, template_,
quote, code_block, footnote, replaceable, macro,
dummy_block, cond_phrase, macro_identifier, template_args,
- template_args_1_4, template_arg_1_4, brackets_1_4
+ template_args_1_4, template_arg_1_4, brackets_1_4,
+ template_args_1_5, template_arg_1_5,
+ template_inner_arg_1_5, brackets_1_5,
;
rule<Scanner> const&
Modified: branches/quickbook-1.5/test/templates_1_5.gold
==============================================================================
--- branches/quickbook-1.5/test/templates_1_5.gold (original)
+++ branches/quickbook-1.5/test/templates_1_5.gold 2009-06-07 16:35:09 EDT (Sun, 07 Jun 2009)
@@ -18,6 +18,12 @@
{1-2} {1-2} {1-2 3 4} {1 2-3 4} {1 2 3-4} {1..2-3} {1..2-3}
</para>
<para>
+ { {1 2-3}-4} { {1 2-3}-4} { {1-2 3}-4}
+ </para>
+ <para>
+ {[1-2] 3} {[1-2] 3} {[1-2}
+ </para>
+ <para>
{1-2-3} {1-2-3}
</para>
</article>
Modified: branches/quickbook-1.5/test/templates_1_5.quickbook
==============================================================================
--- branches/quickbook-1.5/test/templates_1_5.quickbook (original)
+++ branches/quickbook-1.5/test/templates_1_5.quickbook 2009-06-07 16:35:09 EDT (Sun, 07 Jun 2009)
@@ -33,6 +33,14 @@
[binary 1.\.2..3] [/ {1..2-3} ]
[binary 1.\.2 3] [/ {1..2-3} ]
+[binary [binary 1 2..3]..4] [/ { {1 2-3}-4} ]
+[binary [binary 1 2..3] 4] [/ { {1 2-3}-4} ]
+[binary [binary 1 2 3]..4] [/ { {1-2 3}-4} ]
+
+[binary \[1 2\] 3] [/ {[1-2] 3} ]
+[binary \[1..2\] 3] [/ {[1-2] 3} ]
+[binary \[1 2] [/ {(1-2} ]
+
[template ternary[x y z] {[x]-[y]-[z]}]
[ternary 1..2..3] [/ {1-2-3} ]
[ternary 1 2 3] [/ {1-2-3} ]
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