summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/parser/document_p.cpp2
-rw-r--r--src/parser/document_p.h4
-rw-r--r--src/parser/text_p.cpp19
-rw-r--r--src/parser/text_p.h11
4 files changed, 21 insertions, 15 deletions
diff --git a/src/parser/document_p.cpp b/src/parser/document_p.cpp
index 875211c..f4a95e2 100644
--- a/src/parser/document_p.cpp
+++ b/src/parser/document_p.cpp
@@ -16,5 +16,5 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "document_p.h"
document_p::document_p() : document_p::base_type(document_) {
- document_ = +text_;
+ document_ = +text_(ph::val(L"*'`"));
}
diff --git a/src/parser/document_p.h b/src/parser/document_p.h
index fc6530e..d2a7c44 100644
--- a/src/parser/document_p.h
+++ b/src/parser/document_p.h
@@ -15,8 +15,12 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _MPPDOWN_DOCUMENT_P
#define _MPPDOWN_DOCUMENT_P
+#include <boost/spirit/include/qi.hpp>
#include "text_p.h"
+namespace qi = boost::spirit::qi;
+namespace ph = boost::phoenix;
+
struct document_p : qi::grammar<iiterator, document_t()> {
qi::rule<iiterator, document_t()> document_;
text_p text_;
diff --git a/src/parser/text_p.cpp b/src/parser/text_p.cpp
index 22e2a12..46dd37b 100644
--- a/src/parser/text_p.cpp
+++ b/src/parser/text_p.cpp
@@ -17,18 +17,19 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
text_p::text_p() : text_p::base_type(text_) {
using namespace qi;
+ using namespace ph;
using qi::standard_wide::char_;
- text_ = stext_ | ptext_;
+ text_ = stext_(_r1) | ptext_(_r1);
- stext_ = lit("***") >> attr(VSEMPH) >> +text_ >> "***"
- | lit("**") >> attr(SEMPH) >> +text_ >> "**"
- | lit('*') >> attr(EMPH) >> +text_ >> '*'
- | lit("''") >> attr(SALT) >> +text_ >> "''"
- | lit('\'') >> attr(ALT) >> +text_ >> '\''
- | lit('`') >> attr(CODE) >> +ptext_ >> '`';
+ stext_ = lit("***") >> attr(VSEMPH) >> +text_(val(L"*'`")) >> "***"
+ | lit("**") >> attr(SEMPH) >> +text_(val(L"*'`")) >> "**"
+ | lit('*') >> attr(EMPH) >> +text_(val(L"*'`")) >> '*'
+ | lit("''") >> attr(SALT) >> +text_(val(L"*'`"))>> "''"
+ | lit('\'') >> attr(ALT) >> +text_(val(L"*'`")) >> '\''
+ | lit('`') >> attr(CODE) >> +ptext_(val(L"`")) >> '`';
- ptext_ = +(echar_ | rchar_);
+ ptext_ = +(echar_ | rchar_(_r1));
echar_ = lit('\\') >> char_;
- rchar_ = char_ - char_(L"*'`");
+ rchar_ = char_ - char_(_r1);
}
diff --git a/src/parser/text_p.h b/src/parser/text_p.h
index 83ef54f..3b99ab2 100644
--- a/src/parser/text_p.h
+++ b/src/parser/text_p.h
@@ -21,13 +21,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "../elements.h"
namespace qi = boost::spirit::qi;
+namespace ph = boost::phoenix;
-struct text_p : qi::grammar<iiterator, text_t()> {
- qi::rule<iiterator, text_t()> text_;
- qi::rule<iiterator, stext_t()> stext_;
- qi::rule<iiterator, std::wstring()> ptext_;
+struct text_p : qi::grammar<iiterator, text_t(std::wstring)> {
+ qi::rule<iiterator, text_t(std::wstring)> text_;
+ qi::rule<iiterator, stext_t(std::wstring)> stext_;
+ qi::rule<iiterator, std::wstring(std::wstring)> ptext_;
qi::rule<iiterator, wchar_t()> echar_;
- qi::rule<iiterator, wchar_t()> rchar_;
+ qi::rule<iiterator, wchar_t(std::wstring)> rchar_;
text_p();
};