diff options
| -rw-r--r-- | src/elements.h | 23 | ||||
| -rw-r--r-- | src/generators/latex/heading_g.cpp | 25 | ||||
| -rw-r--r-- | src/generators/latex/heading_g.h | 33 | ||||
| -rw-r--r-- | src/generators/latex/paragraph_g.cpp | 2 | ||||
| -rw-r--r-- | src/generators/latex/paragraph_g.h | 2 | ||||
| -rw-r--r-- | src/parsers/mdown2/heading_p.cpp | 27 | ||||
| -rw-r--r-- | src/parsers/mdown2/heading_p.h | 33 | ||||
| -rw-r--r-- | src/parsers/mdown2/paragraph_p.cpp | 2 | ||||
| -rw-r--r-- | src/parsers/mdown2/paragraph_p.h | 2 |
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(); |
