summaryrefslogtreecommitdiff
path: root/src/parsers/mdown2
diff options
context:
space:
mode:
authorGrégoire Duchêne <gduchene@fastmail.net>2011-09-08 10:57:03 +0200
committerGrégoire Duchêne <gduchene@fastmail.net>2011-09-08 11:13:13 +0200
commit027031a505f9f0e5c8c5fafc94c4440667159e3c (patch)
tree957e52d351b4007f056eb3c03727667604bdd3f6 /src/parsers/mdown2
parent8487056e8119daeaac17f89125942850f6206e24 (diff)
Moved the default parser into a namespace.
This change is motivated by the need of having several parsers. This will make mppdown more extensible.
Diffstat (limited to 'src/parsers/mdown2')
-rw-r--r--src/parsers/mdown2/document_p.cpp20
-rw-r--r--src/parsers/mdown2/document_p.h33
-rw-r--r--src/parsers/mdown2/line_p.cpp20
-rw-r--r--src/parsers/mdown2/line_p.h33
-rw-r--r--src/parsers/mdown2/paragraph_p.cpp20
-rw-r--r--src/parsers/mdown2/paragraph_p.h33
-rw-r--r--src/parsers/mdown2/text_p.cpp45
-rw-r--r--src/parsers/mdown2/text_p.h39
8 files changed, 243 insertions, 0 deletions
diff --git a/src/parsers/mdown2/document_p.cpp b/src/parsers/mdown2/document_p.cpp
new file mode 100644
index 0000000..e0214ad
--- /dev/null
+++ b/src/parsers/mdown2/document_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 "document_p.h"
+
+mdown2::document_p::document_p() : document_p::base_type(document_) {
+ document_ = +paragraph_;
+}
diff --git a/src/parsers/mdown2/document_p.h b/src/parsers/mdown2/document_p.h
new file mode 100644
index 0000000..c949a06
--- /dev/null
+++ b/src/parsers/mdown2/document_p.h
@@ -0,0 +1,33 @@
+/*
+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_MDOWN2_DOCUMENT_P
+#define _MPPDOWN_MDOWN2_DOCUMENT_P
+#include <boost/spirit/include/qi.hpp>
+#include "../../elements.h"
+#include "paragraph_p.h"
+
+namespace qi = boost::spirit::qi;
+namespace ph = boost::phoenix;
+
+namespace mdown2 {
+struct document_p : qi::grammar<iiterator, document_t()> {
+ qi::rule<iiterator, document_t()> document_;
+ paragraph_p paragraph_;
+
+ document_p();
+};
+}
+#endif
diff --git a/src/parsers/mdown2/line_p.cpp b/src/parsers/mdown2/line_p.cpp
new file mode 100644
index 0000000..f408418
--- /dev/null
+++ b/src/parsers/mdown2/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"
+
+mdown2::line_p::line_p() : line_p::base_type(line_) {
+ line_ = +text_(ph::val(L"*'`$@_[\n")) > qi::eol;
+}
diff --git a/src/parsers/mdown2/line_p.h b/src/parsers/mdown2/line_p.h
new file mode 100644
index 0000000..ecdfd46
--- /dev/null
+++ b/src/parsers/mdown2/line_p.h
@@ -0,0 +1,33 @@
+/*
+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_MDOWN2_LINE_P
+#define _MPPDOWN_MDOWN2_LINE_P
+#include <boost/spirit/include/qi.hpp>
+#include "../../elements.h"
+#include "text_p.h"
+
+namespace qi = boost::spirit::qi;
+namespace ph = boost::phoenix;
+
+namespace mdown2 {
+struct line_p : qi::grammar<iiterator, line_t()> {
+ qi::rule<iiterator, line_t()> line_;
+ text_p text_;
+
+ line_p();
+};
+}
+#endif
diff --git a/src/parsers/mdown2/paragraph_p.cpp b/src/parsers/mdown2/paragraph_p.cpp
new file mode 100644
index 0000000..7dbbc61
--- /dev/null
+++ b/src/parsers/mdown2/paragraph_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 "paragraph_p.h"
+
+mdown2::paragraph_p::paragraph_p() : paragraph_p::base_type(paragraph_) {
+ paragraph_ = +line_ > qi::eol;
+}
diff --git a/src/parsers/mdown2/paragraph_p.h b/src/parsers/mdown2/paragraph_p.h
new file mode 100644
index 0000000..b90a2d1
--- /dev/null
+++ b/src/parsers/mdown2/paragraph_p.h
@@ -0,0 +1,33 @@
+/*
+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_MDOWN2_PARAGRAPH_P
+#define _MPPDOWN_MDOWN2_PARAGRAPH_P
+#include <boost/spirit/include/qi.hpp>
+#include "../../elements.h"
+#include "line_p.h"
+
+namespace qi = boost::spirit::qi;
+namespace ph = boost::phoenix;
+
+namespace mdown2 {
+struct paragraph_p : qi::grammar<iiterator, paragraph_t()> {
+ qi::rule<iiterator, paragraph_t()> paragraph_;
+ line_p line_;
+
+ paragraph_p();
+};
+}
+#endif
diff --git a/src/parsers/mdown2/text_p.cpp b/src/parsers/mdown2/text_p.cpp
new file mode 100644
index 0000000..d4d5e03
--- /dev/null
+++ b/src/parsers/mdown2/text_p.cpp
@@ -0,0 +1,45 @@
+/*
+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 "text_p.h"
+
+mdown2::text_p::text_p() : text_p::base_type(text_) {
+ using namespace qi;
+ using namespace ph;
+ using qi::standard_wide::char_;
+
+ text_ = stext_(_r1) | pstext_(_r1) | atom_ | ptext_(_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"*'`$^}[")) >> '}'
+ | lit('^') >> attr(SUPER) >> +text_(val(L"*'`$ "))
+ | lit(L"@\"") >> attr(QUOTE) >> +text_(val(L"*'`$@\"[")) >> '"'
+ | lit(L"@_") >> attr(SUB) >> +text_(val(L"*'`$@_[")) >> '_';
+
+ pstext_ = lit('[') >> attr(LINK) >> +text_(val(L"]")) >> ']' >>
+ lit('(') >> ptext_(val(L")")) >> ')';
+
+ atom_ = lit(L"\\ ") >> attr(NBSP) | lit('\\') >> eol >> attr(NEWLINE);
+
+ ptext_ = +(echar_ | rchar_(_r1));
+ echar_ = lit('\\') >> ~char_(L" \n");
+ rchar_ = ~char_('\\') - char_(_r1);
+}
diff --git a/src/parsers/mdown2/text_p.h b/src/parsers/mdown2/text_p.h
new file mode 100644
index 0000000..bbed1bd
--- /dev/null
+++ b/src/parsers/mdown2/text_p.h
@@ -0,0 +1,39 @@
+/*
+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_MDOWN2_TEXT_P
+#define _MPPDOWN_MDOWN2_TEXT_P
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/support_standard_wide.hpp>
+#include <string>
+#include "../../elements.h"
+
+namespace qi = boost::spirit::qi;
+namespace ph = boost::phoenix;
+
+namespace mdown2 {
+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, pstext_t(std::wstring)> pstext_;
+ qi::rule<iiterator, stattribute_t()> atom_;
+ qi::rule<iiterator, std::wstring(std::wstring)> ptext_;
+ qi::rule<iiterator, wchar_t()> echar_;
+ qi::rule<iiterator, wchar_t(std::wstring)> rchar_;
+
+ text_p();
+};
+}
+#endif