diff options
| -rw-r--r-- | src/elements.h | 3 | ||||
| -rw-r--r-- | src/generators/latex/line_g.cpp | 20 | ||||
| -rw-r--r-- | src/generators/latex/line_g.h | 32 | ||||
| -rw-r--r-- | src/generators/latex/paragraph_g.cpp | 2 | ||||
| -rw-r--r-- | src/generators/latex/paragraph_g.h | 4 | ||||
| -rw-r--r-- | src/main.cpp | 7 | ||||
| -rw-r--r-- | src/parser/line_p.cpp | 20 | ||||
| -rw-r--r-- | src/parser/line_p.h | 31 | ||||
| -rw-r--r-- | src/parser/paragraph_p.cpp | 2 | ||||
| -rw-r--r-- | src/parser/paragraph_p.h | 4 | ||||
| -rw-r--r-- | src/parser/text_p.cpp | 10 |
11 files changed, 122 insertions, 13 deletions
diff --git a/src/elements.h b/src/elements.h index 88161e1..54bab97 100644 --- a/src/elements.h +++ b/src/elements.h @@ -57,7 +57,8 @@ struct pstext_t { std::wstring parameter; }; -typedef std::vector<text_t> paragraph_t; +typedef std::vector<text_t> line_t; +typedef std::vector<line_t> paragraph_t; typedef std::vector<paragraph_t> document_t; BOOST_FUSION_ADAPT_STRUCT (stext_t, diff --git a/src/generators/latex/line_g.cpp b/src/generators/latex/line_g.cpp new file mode 100644 index 0000000..3fd3b04 --- /dev/null +++ b/src/generators/latex/line_g.cpp @@ -0,0 +1,20 @@ +/* +Copyright (c) 2010, 2011, Grégoire Duchêne <gduchene@fastmail.net> + +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_g.h" + +latex::line_g::line_g() : line_g::base_type(line_) { + line_ = +text_ << ka::eol; +} diff --git a/src/generators/latex/line_g.h b/src/generators/latex/line_g.h new file mode 100644 index 0000000..4d43d3c --- /dev/null +++ b/src/generators/latex/line_g.h @@ -0,0 +1,32 @@ +/* +Copyright (c) 2010, 2011, Grégoire Duchêne <gduchene@fastmail.net> + +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_LATEX_LINE_G +#define _MPPDOWN_LATEX_LINE_G +#include <boost/spirit/include/karma.hpp> +#include "../../elements.h" +#include "text_g.h" + +namespace ka = boost::spirit::karma; + +namespace latex { +struct line_g : ka::grammar<oiterator, line_t()> { + ka::rule<oiterator, line_t()> line_; + text_g text_; + + line_g(); +}; +} +#endif diff --git a/src/generators/latex/paragraph_g.cpp b/src/generators/latex/paragraph_g.cpp index d93bc10..47f6e7e 100644 --- a/src/generators/latex/paragraph_g.cpp +++ b/src/generators/latex/paragraph_g.cpp @@ -16,5 +16,5 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "paragraph_g.h" latex::paragraph_g::paragraph_g() : paragraph_g::base_type(paragraph_) { - paragraph_ = +text_; + paragraph_ = +line_ << ka::eol; } diff --git a/src/generators/latex/paragraph_g.h b/src/generators/latex/paragraph_g.h index 8cbb750..5546ffe 100644 --- a/src/generators/latex/paragraph_g.h +++ b/src/generators/latex/paragraph_g.h @@ -17,14 +17,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define _MPPDOWN_LATEX_PARAGRAPH_G #include <boost/spirit/include/karma.hpp> #include "../../elements.h" -#include "text_g.h" +#include "line_g.h" namespace ka = boost::spirit::karma; namespace latex { struct paragraph_g : ka::grammar<oiterator, paragraph_t()> { ka::rule<oiterator, paragraph_t()> paragraph_; - text_g text_; + line_g line_; paragraph_g(); }; diff --git a/src/main.cpp b/src/main.cpp index 3c74993..92a0f04 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -76,7 +76,12 @@ int main(int argc, char** argv) { iiterator end = input.end(); document_t ast; - if (!qi::parse(begin, end, parser, ast) || begin != end) { + try { + if (!qi::parse(begin, end, parser, ast) || begin != end) { + cerr << "mppdown: error while parsing the file" << endl; + return 1; + } + } catch (...) { // VERY UGLY cerr << "mppdown: error while parsing the file" << endl; return 1; } 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 <gduchene@fastmail.net> + +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 <gduchene@fastmail.net> + +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 <boost/spirit/include/qi.hpp> +#include "../elements.h" +#include "text_p.h" + +namespace qi = boost::spirit::qi; +namespace ph = boost::phoenix; + +struct line_p : qi::grammar<iiterator, line_t()> { + qi::rule<iiterator, line_t()> 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 <boost/spirit/include/qi.hpp> #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<iiterator, paragraph_t()> { qi::rule<iiterator, paragraph_t()> 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"*'`$^}[")) >> '}' |
