From 1c5bf1893f960e73b389831af4a225c32ff1b132 Mon Sep 17 00:00:00 2001 From: Grégoire Duchêne Date: Fri, 1 Apr 2011 18:01:01 +0200 Subject: Line element added, plus a lot of good stuff. This element is another milestone on the road to awesome new elements. Besides, it was necessary to add this element if I wanted to implement comment lines someday. I also added some minor changes in the way mppdown handles newline characters: they are now really expected, throwing an exception if absent, and a newline character is now expected after every paragraph. This newline character is then rendered back by the LaTeX generator, hence following the proper LaTeX syntax regarding paragraphs. --- src/parser/line_p.cpp | 20 ++++++++++++++++++++ src/parser/line_p.h | 31 +++++++++++++++++++++++++++++++ src/parser/paragraph_p.cpp | 2 +- src/parser/paragraph_p.h | 4 ++-- src/parser/text_p.cpp | 10 +++++----- 5 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 src/parser/line_p.cpp create mode 100644 src/parser/line_p.h (limited to 'src/parser') diff --git a/src/parser/line_p.cpp b/src/parser/line_p.cpp new file mode 100644 index 0000000..8426679 --- /dev/null +++ b/src/parser/line_p.cpp @@ -0,0 +1,20 @@ +/* +Copyright (c) 2010, 2011, Grégoire Duchêne + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +#include "line_p.h" + +line_p::line_p() : line_p::base_type(line_) { + line_ = +text_(ph::val(L"*'`$@_[\n")) > qi::eol; +} diff --git a/src/parser/line_p.h b/src/parser/line_p.h new file mode 100644 index 0000000..be4b61b --- /dev/null +++ b/src/parser/line_p.h @@ -0,0 +1,31 @@ +/* +Copyright (c) 2010, 2011, Grégoire Duchêne + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +#ifndef _MPPDOWN_LINE_P +#define _MPPDOWN_LINE_P +#include +#include "../elements.h" +#include "text_p.h" + +namespace qi = boost::spirit::qi; +namespace ph = boost::phoenix; + +struct line_p : qi::grammar { + qi::rule line_; + text_p text_; + + line_p(); +}; +#endif diff --git a/src/parser/paragraph_p.cpp b/src/parser/paragraph_p.cpp index 46f0935..d7470ea 100644 --- a/src/parser/paragraph_p.cpp +++ b/src/parser/paragraph_p.cpp @@ -16,5 +16,5 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "paragraph_p.h" paragraph_p::paragraph_p() : paragraph_p::base_type(paragraph_) { - paragraph_ = +text_(ph::val(L"*`$^@[")); + paragraph_ = +line_ > qi::eol; } diff --git a/src/parser/paragraph_p.h b/src/parser/paragraph_p.h index 7409b52..f7f1f56 100644 --- a/src/parser/paragraph_p.h +++ b/src/parser/paragraph_p.h @@ -17,14 +17,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define _MPPDOWN_PARAGRAPH_P #include #include "../elements.h" -#include "text_p.h" +#include "line_p.h" namespace qi = boost::spirit::qi; namespace ph = boost::phoenix; struct paragraph_p : qi::grammar { qi::rule paragraph_; - text_p text_; + line_p line_; paragraph_p(); }; diff --git a/src/parser/text_p.cpp b/src/parser/text_p.cpp index 4aa6a68..bd16a60 100644 --- a/src/parser/text_p.cpp +++ b/src/parser/text_p.cpp @@ -22,11 +22,11 @@ text_p::text_p() : text_p::base_type(text_) { text_ = stext_(_r1) | pstext_(_r1) | atom_ | ptext_(_r1); - stext_ = lit("***") >> attr(VSEMPH) >> +text_(_r1) >> "***" - | lit("**") >> attr(SEMPH) >> +text_(_r1) >> "**" - | lit('*') >> attr(EMPH) >> +text_(_r1) >> '*' - | lit("''") >> attr(SALT) >> +text_(_r1)>> "''" - | lit('\'') >> attr(ALT) >> +text_(_r1) >> '\'' + stext_ = lit("***") >> attr(VSEMPH) >> +text_(ph::val(L"*'`$@_[")) >> "***" + | lit("**") >> attr(SEMPH) >> +text_(ph::val(L"*'`$@_[")) >> "**" + | lit('*') >> attr(EMPH) >> +text_(ph::val(L"*'`$@_[")) >> '*' + | lit("''") >> attr(SALT) >> +text_(ph::val(L"*'`$@_["))>> "''" + | lit('\'') >> attr(ALT) >> +text_(ph::val(L"*'`$@_[")) >> '\'' | lit('`') >> attr(CODE) >> +ptext_(val(L"`")) >> '`' | lit('$') >> attr(MATH) >> +ptext_(val(L"$")) >> '$' | lit("^{") >> attr(SUPER) >> +text_(val(L"*'`$^}[")) >> '}' -- cgit v1.2.3-70-g09d2