Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r50175 - in trunk/tools/quickbook: . detail test
From: daniel_james_at_[hidden]
Date: 2008-12-07 07:37:08


Author: danieljames
Date: 2008-12-07 07:37:07 EST (Sun, 07 Dec 2008)
New Revision: 50175
URL: http://svn.boost.org/trac/boost/changeset/50175

Log:
Fix processing of unmatched escape characters in code - and issue a warning for unexpected characters.
Added:
   trunk/tools/quickbook/test/code-block-bad-escape-cpp.gold (contents, props changed)
   trunk/tools/quickbook/test/code-block-bad-escape-cpp.quickbook (contents, props changed)
   trunk/tools/quickbook/test/code-block-bad-escape-python.gold (contents, props changed)
   trunk/tools/quickbook/test/code-block-bad-escape-python.quickbook (contents, props changed)
Text files modified:
   trunk/tools/quickbook/detail/actions.cpp | 9 ++++++++-
   trunk/tools/quickbook/detail/actions.hpp | 2 +-
   trunk/tools/quickbook/syntax_highlight.hpp | 15 +++++++++++----
   trunk/tools/quickbook/test/Jamfile.v2 | 2 ++
   4 files changed, 22 insertions(+), 6 deletions(-)

Modified: trunk/tools/quickbook/detail/actions.cpp
==============================================================================
--- trunk/tools/quickbook/detail/actions.cpp (original)
+++ trunk/tools/quickbook/detail/actions.cpp 2008-12-07 07:37:07 EST (Sun, 07 Dec 2008)
@@ -242,8 +242,15 @@
         out << "</phrase>";
     }
 
- void unexpected_char::operator()(char) const
+ void unexpected_char::operator()(iterator first, iterator last) const
     {
+ boost::spirit::classic::file_position const pos = first.get_position();
+
+ detail::outwarn(pos.file, pos.line)
+ << "in column:" << pos.column
+ << ", unexpected character: " << std::string(first, last)
+ << "\n";
+
         out << '#'; // print out an unexpected character
     }
 

Modified: trunk/tools/quickbook/detail/actions.hpp
==============================================================================
--- trunk/tools/quickbook/detail/actions.hpp (original)
+++ trunk/tools/quickbook/detail/actions.hpp 2008-12-07 07:37:07 EST (Sun, 07 Dec 2008)
@@ -271,7 +271,7 @@
         unexpected_char(collector& out)
         : out(out) {}
 
- void operator()(char) const;
+ void operator()(iterator first, iterator last) const;
 
         collector& out;
     };

Modified: trunk/tools/quickbook/syntax_highlight.hpp
==============================================================================
--- trunk/tools/quickbook/syntax_highlight.hpp (original)
+++ trunk/tools/quickbook/syntax_highlight.hpp 2008-12-07 07:37:07 EST (Sun, 07 Dec 2008)
@@ -15,6 +15,7 @@
 #include <boost/spirit/include/classic_chset.hpp>
 #include <boost/spirit/include/classic_symbols.hpp>
 #include <boost/spirit/include/classic_escape_char.hpp>
+#include <boost/spirit/include/classic_loops.hpp>
 #include "./phrase.hpp"
 
 namespace quickbook
@@ -58,7 +59,7 @@
                     | string_ [Process("string", self.out)]
                     | char_ [Process("char", self.out)]
                     | number [Process("number", self.out)]
- | anychar_p [Unexpected(self.out)]
+ | repeat_p(1)[anychar_p] [Unexpected(self.out)]
                     )
                     ;
 
@@ -75,7 +76,10 @@
                     ;
 
                 escape
- = str_p("``") [PreEscape(self.escape_actions, save)]
+ = (
+ str_p("``")
+ >> eps_p(+(anychar_p - "``") >> eps_p("``"))
+ ) [PreEscape(self.escape_actions, save)]
>> (
                             (+(anychar_p - "``") >> eps_p("``"))
                             & qbk_phrase
@@ -193,7 +197,7 @@
                     | special [Process("special", self.out)]
                     | string_ [Process("string", self.out)]
                     | number [Process("number", self.out)]
- | anychar_p [Unexpected(self.out)]
+ | repeat_p(1)[anychar_p] [Unexpected(self.out)]
                     )
                     ;
 
@@ -210,7 +214,10 @@
                     ;
 
                 escape
- = str_p("``") [PreEscape(self.escape_actions, save)]
+ = (
+ str_p("``")
+ >> eps_p(+(anychar_p - "``") >> eps_p("``"))
+ ) [PreEscape(self.escape_actions, save)]
>> (
                             (+(anychar_p - "``") >> eps_p("``"))
                             & qbk_phrase

Modified: trunk/tools/quickbook/test/Jamfile.v2
==============================================================================
--- trunk/tools/quickbook/test/Jamfile.v2 (original)
+++ trunk/tools/quickbook/test/Jamfile.v2 2008-12-07 07:37:07 EST (Sun, 07 Dec 2008)
@@ -14,6 +14,8 @@
     [ quickbook-test quickbook-manual ]
     [ quickbook-test code-block-1 ]
     [ quickbook-test code-block-2 ]
+ [ quickbook-test code-block-bad-escape-cpp ]
+ [ quickbook-test code-block-bad-escape-python ]
     [ quickbook-test code-snippet ]
     [ quickbook-test preformatted ]
     [ quickbook-test link-side-by-side ]

Added: trunk/tools/quickbook/test/code-block-bad-escape-cpp.gold
==============================================================================
--- (empty file)
+++ trunk/tools/quickbook/test/code-block-bad-escape-cpp.gold 2008-12-07 07:37:07 EST (Sun, 07 Dec 2008)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
+<article id="odd_code_markup__" name="Odd code markup. " dirname="odd_code_markup__"
+last-revision="DEBUG MODE Date: 2000/12/20 12:00:00 $" xmlns:xi="http://www.w3.org/2001/XInclude">
+ <articleinfo>
+ </articleinfo>
+ <title>Odd code markup. </title>
+ <para>
+ </para>
+
+<programlisting>## <phrase role="keyword">int</phrase> <phrase role="identifier">main</phrase><phrase role="special">()</phrase> <phrase role="special">{}</phrase>
+</programlisting>
+</article>

Added: trunk/tools/quickbook/test/code-block-bad-escape-cpp.quickbook
==============================================================================
--- (empty file)
+++ trunk/tools/quickbook/test/code-block-bad-escape-cpp.quickbook 2008-12-07 07:37:07 EST (Sun, 07 Dec 2008)
@@ -0,0 +1,5 @@
+[article Odd code markup. [quickbook 1.4] ]
+
+[c++]
+
+ `` int main() {}

Added: trunk/tools/quickbook/test/code-block-bad-escape-python.gold
==============================================================================
--- (empty file)
+++ trunk/tools/quickbook/test/code-block-bad-escape-python.gold 2008-12-07 07:37:07 EST (Sun, 07 Dec 2008)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
+<article id="odd_code_markup__" name="Odd code markup. " dirname="odd_code_markup__"
+last-revision="DEBUG MODE Date: 2000/12/20 12:00:00 $" xmlns:xi="http://www.w3.org/2001/XInclude">
+ <articleinfo>
+ </articleinfo>
+ <title>Odd code markup. </title>
+ <para>
+ </para>
+
+<programlisting><phrase role="keyword">print</phrase> <phrase role="string">&quot;Hello World.&quot;</phrase> ##
+</programlisting>
+</article>

Added: trunk/tools/quickbook/test/code-block-bad-escape-python.quickbook
==============================================================================
--- (empty file)
+++ trunk/tools/quickbook/test/code-block-bad-escape-python.quickbook 2008-12-07 07:37:07 EST (Sun, 07 Dec 2008)
@@ -0,0 +1,5 @@
+[article Odd code markup. [quickbook 1.4] ]
+
+[python]
+
+ print "Hello World." ``


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