summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/elements.h3
-rw-r--r--src/generators/latex/line_g.cpp20
-rw-r--r--src/generators/latex/line_g.h32
-rw-r--r--src/generators/latex/paragraph_g.cpp2
-rw-r--r--src/generators/latex/paragraph_g.h4
-rw-r--r--src/main.cpp7
-rw-r--r--src/parser/line_p.cpp20
-rw-r--r--src/parser/line_p.h31
-rw-r--r--src/parser/paragraph_p.cpp2
-rw-r--r--src/parser/paragraph_p.h4
-rw-r--r--src/parser/text_p.cpp10
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"*'`$^}[")) >> '}'