summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/elements.h23
-rw-r--r--src/generators/latex/heading_g.cpp25
-rw-r--r--src/generators/latex/heading_g.h33
-rw-r--r--src/generators/latex/paragraph_g.cpp2
-rw-r--r--src/generators/latex/paragraph_g.h2
-rw-r--r--src/parsers/mdown2/heading_p.cpp27
-rw-r--r--src/parsers/mdown2/heading_p.h33
-rw-r--r--src/parsers/mdown2/paragraph_p.cpp2
-rw-r--r--src/parsers/mdown2/paragraph_p.h2
9 files changed, 146 insertions, 3 deletions
diff --git a/src/elements.h b/src/elements.h
index 54bab97..de9ceb8 100644
--- a/src/elements.h
+++ b/src/elements.h
@@ -58,7 +58,23 @@ struct pstext_t {
};
typedef std::vector<text_t> line_t;
-typedef std::vector<line_t> paragraph_t;
+
+enum hattribute_t {
+ HEADING_1,
+ HEADING_2,
+ HEADING_3,
+ HEADING_4,
+ HEADING_5
+};
+
+struct heading_t {
+ hattribute_t level;
+ line_t contents;
+};
+
+typedef boost::variant<heading_t,
+ std::vector<line_t> > paragraph_t;
+
typedef std::vector<paragraph_t> document_t;
BOOST_FUSION_ADAPT_STRUCT (stext_t,
@@ -71,4 +87,9 @@ BOOST_FUSION_ADAPT_STRUCT (pstext_t,
(std::vector<text_t>, value)
(std::wstring, parameter)
)
+
+BOOST_FUSION_ADAPT_STRUCT (heading_t,
+ (hattribute_t, level)
+ (line_t, contents)
+ )
#endif
diff --git a/src/generators/latex/heading_g.cpp b/src/generators/latex/heading_g.cpp
new file mode 100644
index 0000000..30cbaed
--- /dev/null
+++ b/src/generators/latex/heading_g.cpp
@@ -0,0 +1,25 @@
+/*
+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 "heading_g.h"
+
+latex::heading_g::heading_g() : heading_g::base_type(heading_) {
+ heading_ = element_ << ka::eol;
+ element_ = &ka::uint_(HEADING_1) << L"\\section*{" << line_ << '}'
+ | &ka::uint_(HEADING_2) << L"\\subsection*{" << line_ << '}'
+ | &ka::uint_(HEADING_3) << L"\\subsubsection*{" << line_ << '}'
+ | &ka::uint_(HEADING_4) << L"\\paragraph{" << line_ << '}'
+ | &ka::uint_(HEADING_5) << L"\\subparagraph{" << line_ << '}';
+}
diff --git a/src/generators/latex/heading_g.h b/src/generators/latex/heading_g.h
new file mode 100644
index 0000000..70fbedd
--- /dev/null
+++ b/src/generators/latex/heading_g.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_LATEX_HEADING_G
+#define _MPPDOWN_LATEX_HEADING_G
+#include <boost/spirit/include/karma.hpp>
+#include "../../elements.h"
+#include "line_g.h"
+
+namespace ka = boost::spirit::karma;
+
+namespace latex {
+struct heading_g : ka::grammar<oiterator, heading_t()> {
+ ka::rule<oiterator, heading_t()> heading_;
+ ka::rule<oiterator, heading_t()> element_;
+ line_g line_;
+
+ heading_g();
+};
+}
+#endif
diff --git a/src/generators/latex/paragraph_g.cpp b/src/generators/latex/paragraph_g.cpp
index 47f6e7e..adf3a26 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_ = +line_ << ka::eol;
+ paragraph_ = heading_ | (+line_ << ka::eol);
}
diff --git a/src/generators/latex/paragraph_g.h b/src/generators/latex/paragraph_g.h
index 5546ffe..dc42654 100644
--- a/src/generators/latex/paragraph_g.h
+++ b/src/generators/latex/paragraph_g.h
@@ -17,6 +17,7 @@ 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 "heading_g.h"
#include "line_g.h"
namespace ka = boost::spirit::karma;
@@ -24,6 +25,7 @@ namespace ka = boost::spirit::karma;
namespace latex {
struct paragraph_g : ka::grammar<oiterator, paragraph_t()> {
ka::rule<oiterator, paragraph_t()> paragraph_;
+ heading_g heading_;
line_g line_;
paragraph_g();
diff --git a/src/parsers/mdown2/heading_p.cpp b/src/parsers/mdown2/heading_p.cpp
new file mode 100644
index 0000000..7c97d84
--- /dev/null
+++ b/src/parsers/mdown2/heading_p.cpp
@@ -0,0 +1,27 @@
+/*
+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 "heading_p.h"
+
+mdown2::heading_p::heading_p() : heading_p::base_type(heading_) {
+ using qi::lit;
+
+ heading_ = prefix_ >> *lit(' ') >> line_ >> qi::eol;
+ prefix_ = lit("#####") >> qi::attr(HEADING_5)
+ | lit("####") >> qi::attr(HEADING_4)
+ | lit("###") >> qi::attr(HEADING_3)
+ | lit("##") >> qi::attr(HEADING_2)
+ | lit('#') >> qi::attr(HEADING_1);
+}
diff --git a/src/parsers/mdown2/heading_p.h b/src/parsers/mdown2/heading_p.h
new file mode 100644
index 0000000..0cac8fe
--- /dev/null
+++ b/src/parsers/mdown2/heading_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_HEADING_P
+#define _MPPDOWN_MDOWN2_HEADING_P
+#include <boost/spirit/include/qi.hpp>
+#include "../../elements.h"
+#include "line_p.h"
+
+namespace qi = boost::spirit::qi;
+
+namespace mdown2 {
+struct heading_p : qi::grammar<iiterator, heading_t()> {
+ qi::rule<iiterator, heading_t()> heading_;
+ qi::rule<iiterator, hattribute_t()> prefix_;
+ line_p line_;
+
+ heading_p();
+};
+}
+#endif
diff --git a/src/parsers/mdown2/paragraph_p.cpp b/src/parsers/mdown2/paragraph_p.cpp
index 7dbbc61..3d8e987 100644
--- a/src/parsers/mdown2/paragraph_p.cpp
+++ b/src/parsers/mdown2/paragraph_p.cpp
@@ -16,5 +16,5 @@ 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;
+ paragraph_ = heading_ | (+line_ > qi::eol);
}
diff --git a/src/parsers/mdown2/paragraph_p.h b/src/parsers/mdown2/paragraph_p.h
index b90a2d1..cb1cbc0 100644
--- a/src/parsers/mdown2/paragraph_p.h
+++ b/src/parsers/mdown2/paragraph_p.h
@@ -17,6 +17,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#define _MPPDOWN_MDOWN2_PARAGRAPH_P
#include <boost/spirit/include/qi.hpp>
#include "../../elements.h"
+#include "heading_p.h"
#include "line_p.h"
namespace qi = boost::spirit::qi;
@@ -25,6 +26,7 @@ namespace ph = boost::phoenix;
namespace mdown2 {
struct paragraph_p : qi::grammar<iiterator, paragraph_t()> {
qi::rule<iiterator, paragraph_t()> paragraph_;
+ heading_p heading_;
line_p line_;
paragraph_p();