rpeg-multimarkdown2 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +96 -0
- data/README.markdown +52 -0
- data/Rakefile +167 -0
- data/bin/rpeg-multimarkdown2 +128 -0
- data/ext/extconf.h +3 -0
- data/ext/extconf.rb +15 -0
- data/ext/markdown.c +102 -0
- data/ext/markdown_lib.c +265 -0
- data/ext/markdown_lib.h +33 -0
- data/ext/markdown_output.c +2832 -0
- data/ext/markdown_parser.c +9091 -0
- data/ext/markdown_peg.h +144 -0
- data/ext/odf.c +183 -0
- data/ext/odf.h +3 -0
- data/ext/parsing_functions.c +199 -0
- data/ext/utility_functions.c +566 -0
- data/lib/multimarkdown2.rb +1 -0
- data/lib/peg_multimarkdown.rb +74 -0
- data/test/MultiMarkdownTest/BeamerTests/Beamer-Tables.html +76 -0
- data/test/MultiMarkdownTest/BeamerTests/Beamer-Tables.tex +64 -0
- data/test/MultiMarkdownTest/BeamerTests/Beamer-Tables.text +38 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Automatic Labels.html +35 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Automatic Labels.text +45 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Base Header Level.html +14 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Base Header Level.text +16 -0
- data/test/MultiMarkdownTest/CompatibilityTests/BibTeX.html +9 -0
- data/test/MultiMarkdownTest/CompatibilityTests/BibTeX.text +10 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Citations.html +40 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Citations.text +42 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Definition Lists.html +40 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Definition Lists.text +39 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Dutch.html +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Dutch.text +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Email.html +40 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Email.text +31 -0
- data/test/MultiMarkdownTest/CompatibilityTests/English.html +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/English.text +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Errors.html +9 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Errors.text +11 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Footnotes.html +23 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Footnotes.text +25 -0
- data/test/MultiMarkdownTest/CompatibilityTests/French.html +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/French.text +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/German.html +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/German.text +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/GermanGuillemets.html +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/GermanGuillemets.text +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Glossary.html +29 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Glossary.text +28 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Headers.html +42 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Headers.text +51 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Line Breaks.html +13 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Line Breaks.text +15 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Link Attributes.html +35 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Link Attributes.text +51 -0
- data/test/MultiMarkdownTest/CompatibilityTests/List Parsing.html +13 -0
- data/test/MultiMarkdownTest/CompatibilityTests/List Parsing.text +11 -0
- data/test/MultiMarkdownTest/CompatibilityTests/MarkdownInHTML.html +13 -0
- data/test/MultiMarkdownTest/CompatibilityTests/MarkdownInHTML.text +19 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Math.html +14 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Math.text +15 -0
- data/test/MultiMarkdownTest/CompatibilityTests/MetaData.html +14 -0
- data/test/MultiMarkdownTest/CompatibilityTests/MetaData.text +14 -0
- data/test/MultiMarkdownTest/CompatibilityTests/NotMetaData.html +3 -0
- data/test/MultiMarkdownTest/CompatibilityTests/NotMetaData.text +4 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Sanity.html +77 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Sanity.text +77 -0
- data/test/MultiMarkdownTest/CompatibilityTests/SmartQuotes.html +22 -0
- data/test/MultiMarkdownTest/CompatibilityTests/SmartQuotes.text +22 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Swedish.html +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Swedish.text +17 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Tables.html +65 -0
- data/test/MultiMarkdownTest/CompatibilityTests/Tables.text +71 -0
- data/test/MultiMarkdownTest/MarkdownTest.pl +182 -0
- data/test/MultiMarkdownTest/MemoirTests/Automatic Labels.html +42 -0
- data/test/MultiMarkdownTest/MemoirTests/Automatic Labels.tex +47 -0
- data/test/MultiMarkdownTest/MemoirTests/Automatic Labels.text +46 -0
- data/test/MultiMarkdownTest/MemoirTests/Base Header Level.html +20 -0
- data/test/MultiMarkdownTest/MemoirTests/Base Header Level.tex +19 -0
- data/test/MultiMarkdownTest/MemoirTests/Base Header Level.text +16 -0
- data/test/MultiMarkdownTest/MemoirTests/BibTeX.html +17 -0
- data/test/MultiMarkdownTest/MemoirTests/BibTeX.tex +12 -0
- data/test/MultiMarkdownTest/MemoirTests/BibTeX.text +11 -0
- data/test/MultiMarkdownTest/MemoirTests/Citations.html +63 -0
- data/test/MultiMarkdownTest/MemoirTests/Citations.tex +48 -0
- data/test/MultiMarkdownTest/MemoirTests/Citations.text +43 -0
- data/test/MultiMarkdownTest/MemoirTests/Definition Lists.html +61 -0
- data/test/MultiMarkdownTest/MemoirTests/Definition Lists.tex +58 -0
- data/test/MultiMarkdownTest/MemoirTests/Definition Lists.text +40 -0
- data/test/MultiMarkdownTest/MemoirTests/Dutch.html +23 -0
- data/test/MultiMarkdownTest/MemoirTests/Dutch.tex +18 -0
- data/test/MultiMarkdownTest/MemoirTests/Dutch.text +17 -0
- data/test/MultiMarkdownTest/MemoirTests/Email.html +48 -0
- data/test/MultiMarkdownTest/MemoirTests/Email.tex +61 -0
- data/test/MultiMarkdownTest/MemoirTests/Email.text +32 -0
- data/test/MultiMarkdownTest/MemoirTests/English.html +23 -0
- data/test/MultiMarkdownTest/MemoirTests/English.tex +18 -0
- data/test/MultiMarkdownTest/MemoirTests/English.text +17 -0
- data/test/MultiMarkdownTest/MemoirTests/Footnotes.html +47 -0
- data/test/MultiMarkdownTest/MemoirTests/Footnotes.tex +28 -0
- data/test/MultiMarkdownTest/MemoirTests/Footnotes.text +26 -0
- data/test/MultiMarkdownTest/MemoirTests/French.html +23 -0
- data/test/MultiMarkdownTest/MemoirTests/French.tex +18 -0
- data/test/MultiMarkdownTest/MemoirTests/French.text +17 -0
- data/test/MultiMarkdownTest/MemoirTests/German.html +23 -0
- data/test/MultiMarkdownTest/MemoirTests/German.tex +18 -0
- data/test/MultiMarkdownTest/MemoirTests/German.text +17 -0
- data/test/MultiMarkdownTest/MemoirTests/GermanGuillemets.html +23 -0
- data/test/MultiMarkdownTest/MemoirTests/GermanGuillemets.tex +18 -0
- data/test/MultiMarkdownTest/MemoirTests/GermanGuillemets.text +17 -0
- data/test/MultiMarkdownTest/MemoirTests/Glossary.html +47 -0
- data/test/MultiMarkdownTest/MemoirTests/Glossary.tex +30 -0
- data/test/MultiMarkdownTest/MemoirTests/Glossary.text +29 -0
- data/test/MultiMarkdownTest/MemoirTests/Line Breaks.html +21 -0
- data/test/MultiMarkdownTest/MemoirTests/Line Breaks.tex +16 -0
- data/test/MultiMarkdownTest/MemoirTests/Line Breaks.text +16 -0
- data/test/MultiMarkdownTest/MemoirTests/Link Attributes.html +40 -0
- data/test/MultiMarkdownTest/MemoirTests/Link Attributes.tex +61 -0
- data/test/MultiMarkdownTest/MemoirTests/Link Attributes.text +51 -0
- data/test/MultiMarkdownTest/MemoirTests/Math.html +22 -0
- data/test/MultiMarkdownTest/MemoirTests/Math.tex +16 -0
- data/test/MultiMarkdownTest/MemoirTests/Math.text +16 -0
- data/test/MultiMarkdownTest/MemoirTests/Memoir Mode.html +24 -0
- data/test/MultiMarkdownTest/MemoirTests/Memoir Mode.tex +23 -0
- data/test/MultiMarkdownTest/MemoirTests/Memoir Mode.text +20 -0
- data/test/MultiMarkdownTest/MemoirTests/MetaData.html +22 -0
- data/test/MultiMarkdownTest/MemoirTests/MetaData.tex +14 -0
- data/test/MultiMarkdownTest/MemoirTests/MetaData.text +15 -0
- data/test/MultiMarkdownTest/MemoirTests/Sanity.html +100 -0
- data/test/MultiMarkdownTest/MemoirTests/Sanity.tex +101 -0
- data/test/MultiMarkdownTest/MemoirTests/Sanity.text +78 -0
- data/test/MultiMarkdownTest/MemoirTests/SmartQuotes.html +26 -0
- data/test/MultiMarkdownTest/MemoirTests/SmartQuotes.tex +21 -0
- data/test/MultiMarkdownTest/MemoirTests/SmartQuotes.text +19 -0
- data/test/MultiMarkdownTest/MemoirTests/Swedish.html +23 -0
- data/test/MultiMarkdownTest/MemoirTests/Swedish.tex +18 -0
- data/test/MultiMarkdownTest/MemoirTests/Swedish.text +17 -0
- data/test/MultiMarkdownTest/MemoirTests/Tables.html +221 -0
- data/test/MultiMarkdownTest/MemoirTests/Tables.tex +134 -0
- data/test/MultiMarkdownTest/MemoirTests/Tables.text +64 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Automatic Labels.html +43 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Automatic Labels.tex +46 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Automatic Labels.text +45 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Base Header Level.html +22 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Base Header Level.tex +19 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Base Header Level.text +16 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/BibTeX.html +18 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/BibTeX.tex +11 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/BibTex.text +10 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Citations.html +64 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Citations.tex +47 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Citations.text +42 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Definition Lists.html +57 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Definition Lists.tex +57 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Definition Lists.text +39 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Dutch.html +25 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Dutch.tex +18 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Dutch.text +17 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Email.html +49 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Email.tex +54 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Email.text +31 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/English.html +25 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/English.tex +18 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/English.text +17 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Errors.html +18 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Errors.tex +11 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Errors.text +11 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Footnotes.html +48 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Footnotes.tex +24 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Footnotes.text +25 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/French.html +25 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/French.tex +18 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/French.text +17 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/German.html +25 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/German.tex +18 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/German.text +17 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/GermanGuillemets.html +25 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/GermanGuillemets.tex +18 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/GermanGuillemets.text +17 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Glossary.html +48 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Glossary.tex +26 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Glossary.text +28 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Headers.html +50 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Headers.tex +54 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Headers.text +51 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Line Breaks.html +22 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Line Breaks.tex +15 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Line Breaks.text +15 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Link Attributes.html +56 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Link Attributes.tex +60 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Link Attributes.text +50 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/List Parsing.html +22 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/List Parsing.tex +17 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/List Parsing.text +11 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/MarkdownInHTML.html +21 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/MarkdownInHTML.tex +13 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/MarkdownInHTML.text +19 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Math.html +23 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Math.tex +15 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Math.text +15 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/MetaData.html +23 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/MetaData.tex +13 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/MetaData.text +14 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/NotMetaData.html +3 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/NotMetaData.tex +3 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/NotMetaData.text +4 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Sanity.html +106 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Sanity.tex +100 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Sanity.text +77 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/SmartQuotes.html +31 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/SmartQuotes.tex +24 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/SmartQuotes.text +22 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Swedish.html +25 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Swedish.tex +18 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Swedish.text +17 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Tables.html +273 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Tables.tex +155 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/Tables.text +71 -0
- data/test/MultiMarkdownTest/MultiMarkdownTests/bibtex.bib +119 -0
- data/test/MultiMarkdownTest/README.md +58 -0
- data/test/MultiMarkdownTest/Tests/Amps and angle encoding.html +17 -0
- data/test/MultiMarkdownTest/Tests/Amps and angle encoding.text +21 -0
- data/test/MultiMarkdownTest/Tests/Auto links.html +18 -0
- data/test/MultiMarkdownTest/Tests/Auto links.text +13 -0
- data/test/MultiMarkdownTest/Tests/Backslash escapes.html +118 -0
- data/test/MultiMarkdownTest/Tests/Backslash escapes.text +120 -0
- data/test/MultiMarkdownTest/Tests/Blockquotes with code blocks.html +15 -0
- data/test/MultiMarkdownTest/Tests/Blockquotes with code blocks.text +11 -0
- data/test/MultiMarkdownTest/Tests/Code Blocks.html +18 -0
- data/test/MultiMarkdownTest/Tests/Code Blocks.text +14 -0
- data/test/MultiMarkdownTest/Tests/Code Spans.html +6 -0
- data/test/MultiMarkdownTest/Tests/Code Spans.text +6 -0
- data/test/MultiMarkdownTest/Tests/Compatibility.html +5 -0
- data/test/MultiMarkdownTest/Tests/Compatibility.text +9 -0
- data/test/MultiMarkdownTest/Tests/Hard-wrapped paragraphs with list-like lines.html +8 -0
- data/test/MultiMarkdownTest/Tests/Hard-wrapped paragraphs with list-like lines.text +8 -0
- data/test/MultiMarkdownTest/Tests/Horizontal rules.html +71 -0
- data/test/MultiMarkdownTest/Tests/Horizontal rules.text +67 -0
- data/test/MultiMarkdownTest/Tests/Inline HTML (Advanced).html +15 -0
- data/test/MultiMarkdownTest/Tests/Inline HTML (Advanced).text +15 -0
- data/test/MultiMarkdownTest/Tests/Inline HTML (Simple).html +72 -0
- data/test/MultiMarkdownTest/Tests/Inline HTML (Simple).text +69 -0
- data/test/MultiMarkdownTest/Tests/Inline HTML comments.html +13 -0
- data/test/MultiMarkdownTest/Tests/Inline HTML comments.text +13 -0
- data/test/MultiMarkdownTest/Tests/Links, inline style.html +11 -0
- data/test/MultiMarkdownTest/Tests/Links, inline style.text +12 -0
- data/test/MultiMarkdownTest/Tests/Links, reference style.html +52 -0
- data/test/MultiMarkdownTest/Tests/Links, reference style.text +71 -0
- data/test/MultiMarkdownTest/Tests/Links, shortcut references.html +9 -0
- data/test/MultiMarkdownTest/Tests/Links, shortcut references.text +20 -0
- data/test/MultiMarkdownTest/Tests/Literal quotes in titles.html +3 -0
- data/test/MultiMarkdownTest/Tests/Literal quotes in titles.text +7 -0
- data/test/MultiMarkdownTest/Tests/Markdown Documentation - Basics.html +314 -0
- data/test/MultiMarkdownTest/Tests/Markdown Documentation - Basics.text +306 -0
- data/test/MultiMarkdownTest/Tests/Markdown Documentation - Syntax.html +942 -0
- data/test/MultiMarkdownTest/Tests/Markdown Documentation - Syntax.text +888 -0
- data/test/MultiMarkdownTest/Tests/Nested blockquotes.html +9 -0
- data/test/MultiMarkdownTest/Tests/Nested blockquotes.text +5 -0
- data/test/MultiMarkdownTest/Tests/Ordered and unordered lists.html +148 -0
- data/test/MultiMarkdownTest/Tests/Ordered and unordered lists.text +131 -0
- data/test/MultiMarkdownTest/Tests/Strong and em together.html +7 -0
- data/test/MultiMarkdownTest/Tests/Strong and em together.text +7 -0
- data/test/MultiMarkdownTest/Tests/Tabs.html +25 -0
- data/test/MultiMarkdownTest/Tests/Tabs.text +21 -0
- data/test/MultiMarkdownTest/Tests/Tidyness.html +8 -0
- data/test/MultiMarkdownTest/Tests/Tidyness.text +5 -0
- data/test/benchmark.rb +49 -0
- data/test/multimarkdown_test.rb +89 -0
- metadata +318 -0
data/LICENSE
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
Ruby PEG MultiMarkdown 2, implemented using peg-multimarkdown
|
2
|
+
Copyright (c) 2012 Andor Chen
|
3
|
+
Ruby Markdown Extension, implemented using peg-markdown
|
4
|
+
Copyright (c) 2008 Ryan Tomayko
|
5
|
+
markdown in c, implemented using PEG grammar
|
6
|
+
Copyright (c) 2008 John MacFarlane
|
7
|
+
Additional MultiMarkdown files
|
8
|
+
Copyright (c) 2005-2011 Fletcher T. Penney
|
9
|
+
Micro-optparse (included in bin/rpeg-multimarkdown)
|
10
|
+
Copyright (c) 2011 Florian Pilz
|
11
|
+
|
12
|
+
Both peg-markdown and the rpeg-markdown license are released under both the GPL
|
13
|
+
and MIT licenses. You may pick the license that best fits your needs.
|
14
|
+
|
15
|
+
Micro-optparse is released under the MIT license.
|
16
|
+
|
17
|
+
The GPL
|
18
|
+
|
19
|
+
This program is free software; you can redistribute it and/or modify
|
20
|
+
it under the terms of the GNU General Public License as published by
|
21
|
+
the Free Software Foundation; either version 2 of the License, or
|
22
|
+
(at your option) any later version.
|
23
|
+
|
24
|
+
This program is distributed in the hope that it will be useful,
|
25
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
26
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
27
|
+
GNU General Public License for more details.
|
28
|
+
|
29
|
+
You should have received a copy of the GNU General Public License
|
30
|
+
along with this program; if not, write to the Free Software
|
31
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
32
|
+
|
33
|
+
The MIT License
|
34
|
+
|
35
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
36
|
+
of this software and associated documentation files (the "Software"), to deal
|
37
|
+
in the Software without restriction, including without limitation the rights
|
38
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
39
|
+
copies of the Software, and to permit persons to whom the Software is
|
40
|
+
furnished to do so, subject to the following conditions:
|
41
|
+
|
42
|
+
The above copyright notice and this permission notice shall be included in
|
43
|
+
all copies or substantial portions of the Software.
|
44
|
+
|
45
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
46
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
47
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
48
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
49
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
50
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
51
|
+
THE SOFTWARE.
|
52
|
+
|
53
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
54
|
+
|
55
|
+
peg-0.1.4 (included for convenience - http://piumarta.com/software/peg/)
|
56
|
+
|
57
|
+
Copyright (c) 2007 by Ian Piumarta
|
58
|
+
All rights reserved.
|
59
|
+
|
60
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
61
|
+
copy of this software and associated documentation files (the 'Software'),
|
62
|
+
to deal in the Software without restriction, including without limitation
|
63
|
+
the rights to use, copy, modify, merge, publish, distribute, and/or sell
|
64
|
+
copies of the Software, and to permit persons to whom the Software is
|
65
|
+
furnished to do so, provided that the above copyright notice(s) and this
|
66
|
+
permission notice appear in all copies of the Software. Acknowledgement
|
67
|
+
of the use of this Software in supporting documentation would be
|
68
|
+
appreciated but is not required.
|
69
|
+
|
70
|
+
THE SOFTWARE IS PROVIDED 'AS IS'. USE ENTIRELY AT YOUR OWN RISK.
|
71
|
+
|
72
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
73
|
+
|
74
|
+
my_getopt (included for convenience - http://www.geocities.com/bsittler/)
|
75
|
+
|
76
|
+
Copyright 1997, 2000, 2001, 2002, 2006, Benjamin Sittler
|
77
|
+
|
78
|
+
Permission is hereby granted, free of charge, to any person
|
79
|
+
obtaining a copy of this software and associated documentation
|
80
|
+
files (the "Software"), to deal in the Software without
|
81
|
+
restriction, including without limitation the rights to use, copy,
|
82
|
+
modify, merge, publish, distribute, sublicense, and/or sell copies
|
83
|
+
of the Software, and to permit persons to whom the Software is
|
84
|
+
furnished to do so, subject to the following conditions:
|
85
|
+
|
86
|
+
The above copyright notice and this permission notice shall be
|
87
|
+
included in all copies or substantial portions of the Software.
|
88
|
+
|
89
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
90
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
91
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
92
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
93
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
94
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
95
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
96
|
+
DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Ruby PEG MultiMarkdown 2
|
2
|
+
|
3
|
+
An extension library around [Fletcher Penney's implementation][1]
|
4
|
+
of MultiMarkdown in C. This library is based (almost entirely) on
|
5
|
+
[rpeg-multimarkdown][2].
|
6
|
+
|
7
|
+
[1]: http://github.com/fletcher/peg-multimarkdown/
|
8
|
+
[2]: https://github.com/djungelvral/rpeg-multimarkdown
|
9
|
+
|
10
|
+
## Synopsis
|
11
|
+
|
12
|
+
>> require 'multimarkdown2'
|
13
|
+
|
14
|
+
>> puts MultiMarkdown.new('Hello, world.').to_html
|
15
|
+
# <p>Hello, world.</p>
|
16
|
+
|
17
|
+
>> puts MultiMarkdown.new('_Hello World!_', :smart, :filter_html).to_html
|
18
|
+
# <p><em>Hello World!</em></p>
|
19
|
+
|
20
|
+
>> puts MultiMarkdown.new('_Hello World!_').to_latex
|
21
|
+
# \emph{Hello World!}
|
22
|
+
|
23
|
+
>> puts MultiMarkdown.new("Title: Some document\n\nSome text in the document").extract_metadata("title")
|
24
|
+
# Some document
|
25
|
+
|
26
|
+
>> PEGMultiMarkdown.new('Hello! World!')
|
27
|
+
|
28
|
+
## Installation / Hacking
|
29
|
+
|
30
|
+
This library requires a recent version of glib2. All modern GNU userland
|
31
|
+
systems should be fine.
|
32
|
+
|
33
|
+
Install from GEM:
|
34
|
+
|
35
|
+
$ sudo gem install rpeg-multimarkdown2
|
36
|
+
|
37
|
+
Hacking:
|
38
|
+
|
39
|
+
$ git clone git://github.com/AndorChen/rpeg-multimarkdown2.git
|
40
|
+
$ cd rpeg-multimarkdown2
|
41
|
+
$ rake test
|
42
|
+
|
43
|
+
## Changes
|
44
|
+
|
45
|
+
* [Version 0.1.1](http://github.com/djungelvral/rpeg-multimarkdown/tree/v0.1.1)
|
46
|
+
|
47
|
+
## COPYING
|
48
|
+
|
49
|
+
The peg-markdown, peg-multimarkdown, and Ruby PEG Markdown extension sources
|
50
|
+
are licensed under the GPL and the Ruby PEG MultiMarkdown extension sources
|
51
|
+
adopts this license. See the file LICENSE included with this distribution for
|
52
|
+
more information.
|
data/Rakefile
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'rake/clean'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rubygems/package_task'
|
4
|
+
|
5
|
+
task :default => :test
|
6
|
+
|
7
|
+
DLEXT = RbConfig::CONFIG['DLEXT']
|
8
|
+
VERS = '2.0.1'
|
9
|
+
|
10
|
+
spec = Gem::Specification.new do |s|
|
11
|
+
s.name = "rpeg-multimarkdown2"
|
12
|
+
s.version = VERS
|
13
|
+
s.summary = "Fast MultiMarkdown implementation"
|
14
|
+
s.description =<<-EOF
|
15
|
+
A Ruby extension to process MultiMarkdown-formatted
|
16
|
+
text, using Fletcher Penney's C peg-multimarkdown
|
17
|
+
implementation.
|
18
|
+
EOF
|
19
|
+
s.files = FileList[
|
20
|
+
'README.markdown','LICENSE','Rakefile',
|
21
|
+
'{lib,ext,test}/**.rb','ext/*.{c,h}',
|
22
|
+
'test/MultiMarkdownTest/**/*',
|
23
|
+
'bin/rpeg-multimarkdown2'
|
24
|
+
]
|
25
|
+
s.bindir = 'bin'
|
26
|
+
s.executables << 'rpeg-multimarkdown2'
|
27
|
+
s.require_path = 'lib'
|
28
|
+
s.extra_rdoc_files = ['LICENSE']
|
29
|
+
s.test_files = FileList['test/multimarkdown_test.rb']
|
30
|
+
s.extensions = ['ext/extconf.rb']
|
31
|
+
|
32
|
+
s.authors = ['Andor Chen']
|
33
|
+
s.email = ['andor.chen.27@gmail.com']
|
34
|
+
s.homepage = 'http://github.com/AndorChen/rpeg-multimarkdown2'
|
35
|
+
end
|
36
|
+
|
37
|
+
# For Mac OS X -- prevents prevent additional ._* files being added to tarball
|
38
|
+
ENV['COPYFILE_DISABLE'] = 'true'
|
39
|
+
|
40
|
+
Gem::PackageTask.new(spec) do |pkg|
|
41
|
+
pkg.need_tar_gz = true
|
42
|
+
pkg.need_tar = false
|
43
|
+
pkg.need_zip = false
|
44
|
+
end
|
45
|
+
|
46
|
+
namespace :submodule do
|
47
|
+
desc 'Init the peg-multimarkdown submodule'
|
48
|
+
task :init do |t|
|
49
|
+
unless File.exist? 'peg-multimarkdown/markdown.c'
|
50
|
+
rm_rf 'peg-multimarkdown'
|
51
|
+
sh 'git submodule init peg-multimarkdown'
|
52
|
+
sh 'git submodule update peg-multimarkdown'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
desc 'Update the peg-multimarkdown submodule'
|
57
|
+
task :update => :init do
|
58
|
+
sh 'git submodule update peg-multimarkdown' unless File.symlink?('peg-multimarkdown')
|
59
|
+
end
|
60
|
+
|
61
|
+
file 'peg-multimarkdown/markdown.c' do
|
62
|
+
Rake::Task['submodule:init'].invoke
|
63
|
+
end
|
64
|
+
task :exist => 'peg-multimarkdown/markdown.c'
|
65
|
+
end
|
66
|
+
|
67
|
+
desc 'Gather required peg-multimarkdown sources into extension directory'
|
68
|
+
task :gather => 'submodule:exist' do |t|
|
69
|
+
sh 'cd peg-multimarkdown && make markdown_parser.c'
|
70
|
+
files =
|
71
|
+
FileList[
|
72
|
+
'peg-multimarkdown/markdown_{peg.h,parser.c,output.c,lib.c,lib.h}',
|
73
|
+
'peg-multimarkdown/{utility,parsing}_functions.c',
|
74
|
+
'peg-multimarkdown/odf.{c,h}'
|
75
|
+
]
|
76
|
+
cp files, 'ext/',
|
77
|
+
:preserve => true,
|
78
|
+
:verbose => true
|
79
|
+
end
|
80
|
+
|
81
|
+
file 'ext/Makefile' => FileList['ext/{extconf.rb,*.c,*.h,*.rb}'] do
|
82
|
+
chdir('ext') { ruby 'extconf.rb' }
|
83
|
+
end
|
84
|
+
CLEAN.include 'ext/Makefile'
|
85
|
+
|
86
|
+
file "ext/peg_multimarkdown.#{DLEXT}" => FileList['ext/Makefile', 'ext/*.{c,h,rb}'] do |f|
|
87
|
+
sh 'cd ext && make'
|
88
|
+
end
|
89
|
+
CLEAN.include 'ext/*.{o,bundle,so}'
|
90
|
+
|
91
|
+
file "lib/peg_multimarkdown.#{DLEXT}" => "ext/peg_multimarkdown.#{DLEXT}" do |f|
|
92
|
+
cp f.prerequisites, "lib/", :preserve => true
|
93
|
+
end
|
94
|
+
CLEAN.include "lib/*.{so,bundle}"
|
95
|
+
|
96
|
+
desc 'Build the peg_multimarkdown extension'
|
97
|
+
task :build => "lib/peg_multimarkdown.#{DLEXT}"
|
98
|
+
|
99
|
+
desc 'Run unit and conformance tests'
|
100
|
+
task :test => [ 'test:unit', 'test:conformance' ]
|
101
|
+
|
102
|
+
desc 'Run unit tests'
|
103
|
+
task 'test:unit' => [:build] do |t|
|
104
|
+
ruby 'test/multimarkdown_test.rb'
|
105
|
+
end
|
106
|
+
|
107
|
+
desc "Run conformance tests"
|
108
|
+
task 'test:conformance' => [:build] do |t|
|
109
|
+
script = "#{pwd}/bin/rpeg-multimarkdown2"
|
110
|
+
chdir("test/MultiMarkdownTest") do
|
111
|
+
sh "./MarkdownTest.pl --script='#{script}' --flags='-c' --tidy"
|
112
|
+
sh "./MarkdownTest.pl --script='#{script}' --testdir='MultiMarkdownTests'"
|
113
|
+
sh "./MarkdownTest.pl --script='#{script}' --testdir='MultiMarkdownTests' --flags='-t latex' --ext='.tex'"
|
114
|
+
sh "./MarkdownTest.pl --script='#{script}' --testdir='BeamerTests' --flags='-t latex' --ext='.tex'"
|
115
|
+
sh "./MarkdownTest.pl --script='#{script}' --testdir='MemoirTests' --flags='-t latex' --ext='.tex'"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
desc 'Run conformance suite'
|
120
|
+
task 'test:conformance' => [:build] do |t|
|
121
|
+
Rake::Task['test:conformance'].invoke
|
122
|
+
end
|
123
|
+
|
124
|
+
desc 'Run unit and conformance tests'
|
125
|
+
task :test => %w[test:unit test:conformance]
|
126
|
+
|
127
|
+
desc 'Run benchmarks'
|
128
|
+
task :benchmark => :build do |t|
|
129
|
+
$:.unshift 'lib'
|
130
|
+
load 'test/benchmark.rb'
|
131
|
+
end
|
132
|
+
|
133
|
+
desc "See how much memory we're losing"
|
134
|
+
task 'test:mem' => %w[submodule:exist build] do |t|
|
135
|
+
$: << File.join(File.dirname(__FILE__), "lib")
|
136
|
+
require 'multimarkdown'
|
137
|
+
FileList['test/mem.txt', 'peg-multimarkdown/MarkdownTest/Tests/*.text'].each do |file|
|
138
|
+
printf "%s: \n", file
|
139
|
+
multimarkdown = MultiMarkdown.new(File.read(file),:compatibility)
|
140
|
+
iterations = (ENV['N'] || 100).to_i
|
141
|
+
total, growth = [], []
|
142
|
+
iterations.times do |i|
|
143
|
+
start = Time.now
|
144
|
+
GC.start
|
145
|
+
multimarkdown.to_html
|
146
|
+
duration = Time.now - start
|
147
|
+
GC.start
|
148
|
+
total << `ps -o rss= -p #{Process.pid}`.to_i
|
149
|
+
next if i == 0
|
150
|
+
growth << (total.last - (total[-2] || 0))
|
151
|
+
# puts "%03d: %06.02f ms / %dK used / %dK growth" % [ i, duration, total.last, growth.last ]
|
152
|
+
end
|
153
|
+
average = growth.inject(0) { |sum,x| sum + x } / growth.length
|
154
|
+
printf " %dK avg growth (per run) / %dK used (after %d runs)\n", average, total.last, iterations
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
# ==========================================================
|
159
|
+
# Rubyforge
|
160
|
+
# ==========================================================
|
161
|
+
|
162
|
+
PKGNAME = "pkg/rpeg-multimarkdown2-#{VERS}"
|
163
|
+
|
164
|
+
desc 'Publish new release to rubyforge'
|
165
|
+
task :release => [ "#{PKGNAME}.gem", "#{PKGNAME}.tar.gz" ] do |t|
|
166
|
+
sh "gem push #{PKGNAME}.gem"
|
167
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'multimarkdown2'
|
5
|
+
rescue LoadError => boom
|
6
|
+
local_path = File.expand_path(File.dirname(__FILE__))
|
7
|
+
$: << "#{local_path}/../lib"
|
8
|
+
require 'multimarkdown2'
|
9
|
+
end
|
10
|
+
|
11
|
+
# Option parser -- http://florianpilz.github.com/micro-optparse/
|
12
|
+
|
13
|
+
require 'ostruct'
|
14
|
+
require 'optparse'
|
15
|
+
|
16
|
+
class Parser
|
17
|
+
attr_accessor :banner, :version
|
18
|
+
def initialize
|
19
|
+
@options = []
|
20
|
+
@used_short = []
|
21
|
+
yield self if block_given?
|
22
|
+
end
|
23
|
+
|
24
|
+
def option(name, desc, settings = {})
|
25
|
+
@options << [name, desc, settings]
|
26
|
+
end
|
27
|
+
|
28
|
+
def short_from(name)
|
29
|
+
name.to_s.chars.each do |c|
|
30
|
+
next if @used_short.include?(c) || c == "_"
|
31
|
+
return c # returns from short_from method
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def validate(options) # remove this method if you want fewer lines of code and don't need validations
|
36
|
+
options.each_pair do |key, value|
|
37
|
+
opt = @options.find_all{ |o| o[0] == key }.first
|
38
|
+
key = "--" << key.to_s.gsub("_", "-")
|
39
|
+
unless opt[2][:value_in_set].nil? || opt[2][:value_in_set].include?(value)
|
40
|
+
puts "Parameter for #{key} must be in [" << opt[2][:value_in_set].join(", ") << "]" ; exit(1)
|
41
|
+
end
|
42
|
+
unless opt[2][:value_matches].nil? || opt[2][:value_matches] =~ value
|
43
|
+
puts "Parameter for #{key} must match /" << opt[2][:value_matches].source << "/" ; exit(1)
|
44
|
+
end
|
45
|
+
unless opt[2][:value_satisfies].nil? || opt[2][:value_satisfies].call(value)
|
46
|
+
puts "Parameter for #{key} must satisfy given conditions (see description)" ; exit(1)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def process!(arguments = ARGV)
|
52
|
+
@result = (@default_values || {}).clone # reset or new
|
53
|
+
@optionparser ||= OptionParser.new do |p| # prepare only once
|
54
|
+
@options.each do |o|
|
55
|
+
@used_short << short = o[2][:short] || short_from(o[0])
|
56
|
+
@result[o[0]] = o[2][:default] || false # set default
|
57
|
+
klass = o[2][:default].class == Fixnum ? Integer : o[2][:default].class
|
58
|
+
desk = o[1] + (o[2][:nodefault] ? "" : " (default is #{@result[o[0]]})")
|
59
|
+
if [TrueClass, FalseClass, NilClass].include?(klass) # boolean switch
|
60
|
+
p.on("-" << short, "--[no-]" << o[0].to_s.gsub("_", "-"), desk) {|x| @result[o[0]] = x}
|
61
|
+
else # argument with parameter
|
62
|
+
p.on("-" << short, "--" << o[0].to_s.gsub("_", "-") << " " << (o[2][:name] ? "[#{o[2][:name].to_s}]" : ""), klass, desk) {|x| @result[o[0]] = x}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
p.banner = @banner unless @banner.nil?
|
67
|
+
p.on_tail("-h", "--help", "Show this message") {puts p ; exit}
|
68
|
+
short = @used_short.include?("v") ? "-V" : "-v"
|
69
|
+
p.on_tail(short, "--version", "Print version") {puts @version ; exit} unless @version.nil?
|
70
|
+
@default_values = @result.clone # save default values to reset @result in subsequent calls
|
71
|
+
end
|
72
|
+
|
73
|
+
begin
|
74
|
+
@optionparser.parse!(arguments)
|
75
|
+
rescue OptionParser::ParseError => e
|
76
|
+
puts e.message ; exit(1)
|
77
|
+
end
|
78
|
+
|
79
|
+
validate(@result) if self.respond_to?("validate")
|
80
|
+
@result
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Parse options
|
85
|
+
options = Parser.new do |p|
|
86
|
+
p.banner = "Ruby interface to MultiMarkdown"
|
87
|
+
p.version = "rpeg-multimarkdown2 2.0.1"
|
88
|
+
p.option :compatibility, "markdown compatibility mode", :default => false
|
89
|
+
p.option :filter_html, "filter out raw HTML except styles", :default => false
|
90
|
+
p.option :process_html, "process MultiMarkdown inside of raw HTML", :default => false
|
91
|
+
p.option :filter_styles, "filter out HTML styles", :default => false
|
92
|
+
p.option :smart, "use smart typography extension", :default => true
|
93
|
+
p.option :notes, "use notes extension", :default => true
|
94
|
+
p.option :output, "send output to FILE (default is stdout)", :name => "FILE", :default => "", :nodefault => true
|
95
|
+
p.option :to, "convert to FORMAT", :name => "FORMAT", :default => "html", :value_in_set => ["html","latex","memoir","beamer","odf","opml"]
|
96
|
+
p.option :extract, "extract and display metadata specified by KEY", :name => "KEY", :default => "", :nodefault => true
|
97
|
+
end.process!
|
98
|
+
|
99
|
+
# Convert options to MultiMarkdown module's options
|
100
|
+
mmopts = []
|
101
|
+
mmopts << :filter_html if options[:filter_html]
|
102
|
+
mmopts << :filter_styles if options[:filter_styles]
|
103
|
+
mmopts << :process_html if options[:process_html]
|
104
|
+
mmopts << :smart if options[:smart]
|
105
|
+
mmopts << :notes if options[:notes]
|
106
|
+
mmopts << :compatibility if options[:compatibility]
|
107
|
+
|
108
|
+
# ARGV will now only contain input filename, if it contains anything
|
109
|
+
STDIN.reopen(ARGV[0], 'rb') if ARGV.any?
|
110
|
+
multimarkdown = MultiMarkdown.new(STDIN.read,*mmopts)
|
111
|
+
STDOUT.reopen(options[:output], 'w') if options[:output]!=""
|
112
|
+
|
113
|
+
# Print specified metadata if requested
|
114
|
+
if options[:extract]!=""
|
115
|
+
puts multimarkdown.extract_metadata(options[:extract])
|
116
|
+
exit(0)
|
117
|
+
end
|
118
|
+
|
119
|
+
# Do processing
|
120
|
+
case options[:to]
|
121
|
+
when "html"
|
122
|
+
STDOUT.write(multimarkdown.to_html)
|
123
|
+
when "latex"
|
124
|
+
STDOUT.write(multimarkdown.to_latex)
|
125
|
+
else
|
126
|
+
puts "Output other than html & latex not currently supported"
|
127
|
+
exit(1)
|
128
|
+
end
|
data/ext/extconf.h
ADDED
data/ext/extconf.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
3
|
+
dir_config('peg_multimarkdown')
|
4
|
+
|
5
|
+
$objs = %w[markdown.o markdown_lib.o markdown_output.o markdown_parser.o]
|
6
|
+
|
7
|
+
if pkg_config = find_executable('pkg-config')
|
8
|
+
$CFLAGS = "-fcommon "+`#{pkg_config} --cflags glib-2.0`
|
9
|
+
$LDFLAGS = `#{pkg_config} --libs glib-2.0`
|
10
|
+
else
|
11
|
+
fail "glib2 not found"
|
12
|
+
end
|
13
|
+
|
14
|
+
create_header
|
15
|
+
create_makefile('peg_multimarkdown')
|
data/ext/markdown.c
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
#include "ruby.h"
|
2
|
+
#include "markdown_peg.h"
|
3
|
+
|
4
|
+
static VALUE rb_cMultiMarkdown;
|
5
|
+
|
6
|
+
int get_exts(VALUE self)
|
7
|
+
{
|
8
|
+
int extensions = 0;
|
9
|
+
if ( rb_funcall(self, rb_intern("smart"), 0) == Qtrue )
|
10
|
+
extensions = extensions | EXT_SMART ;
|
11
|
+
if ( rb_funcall(self, rb_intern("notes"), 0) == Qtrue )
|
12
|
+
extensions = extensions | EXT_NOTES ;
|
13
|
+
if ( rb_funcall(self, rb_intern("filter_html"), 0) == Qtrue )
|
14
|
+
extensions = extensions | EXT_FILTER_HTML ;
|
15
|
+
if ( rb_funcall(self, rb_intern("filter_styles"), 0) == Qtrue )
|
16
|
+
extensions = extensions | EXT_FILTER_STYLES ;
|
17
|
+
if ( rb_funcall(self, rb_intern("process_html"), 0) == Qtrue )
|
18
|
+
extensions = extensions | EXT_PROCESS_HTML;
|
19
|
+
/* Compatibility overwrites all other extensions */
|
20
|
+
if ( rb_funcall(self, rb_intern("compatibility"), 0) == Qtrue )
|
21
|
+
extensions = EXT_COMPATIBILITY;
|
22
|
+
return extensions;
|
23
|
+
}
|
24
|
+
|
25
|
+
static VALUE
|
26
|
+
rb_multimarkdown_to_html(int argc, VALUE *argv, VALUE self)
|
27
|
+
{
|
28
|
+
/* grab char pointer to multimarkdown input text */
|
29
|
+
VALUE text = rb_funcall(self, rb_intern("text"), 0);
|
30
|
+
Check_Type(text, T_STRING);
|
31
|
+
char * ptext = StringValuePtr(text);
|
32
|
+
|
33
|
+
int extensions = get_exts(self);
|
34
|
+
|
35
|
+
char *html = markdown_to_string(ptext, extensions, HTML_FORMAT);
|
36
|
+
VALUE result = rb_str_new2(html);
|
37
|
+
free(html);
|
38
|
+
|
39
|
+
return result;
|
40
|
+
}
|
41
|
+
|
42
|
+
static VALUE
|
43
|
+
rb_multimarkdown_to_latex(int argc, VALUE *argv, VALUE self)
|
44
|
+
{
|
45
|
+
/* grab char pointer to multimarkdown input text */
|
46
|
+
VALUE text = rb_funcall(self, rb_intern("text"), 0);
|
47
|
+
Check_Type(text, T_STRING);
|
48
|
+
char * ptext = StringValuePtr(text);
|
49
|
+
|
50
|
+
int extensions = get_exts(self);
|
51
|
+
|
52
|
+
char *latex = markdown_to_string(ptext, extensions, LATEX_FORMAT);
|
53
|
+
VALUE result = rb_str_new2(latex);
|
54
|
+
free(latex);
|
55
|
+
|
56
|
+
return result;
|
57
|
+
}
|
58
|
+
|
59
|
+
static VALUE
|
60
|
+
rb_multimarkdown_extract_metadata(VALUE self, VALUE key)
|
61
|
+
{
|
62
|
+
/* grab char pointer to multimarkdown input text */
|
63
|
+
VALUE text = rb_funcall(self, rb_intern("text"), 0);
|
64
|
+
Check_Type(text, T_STRING);
|
65
|
+
char * ptext = StringValuePtr(text);
|
66
|
+
|
67
|
+
Check_Type(key, T_STRING);
|
68
|
+
char * pkey = StringValuePtr(key);
|
69
|
+
|
70
|
+
int extensions = get_exts(self);
|
71
|
+
|
72
|
+
/* Display metadata on request */
|
73
|
+
char *metadata = extract_metadata_value(ptext, extensions, pkey);
|
74
|
+
VALUE result = rb_str_new2(metadata);
|
75
|
+
free(metadata);
|
76
|
+
|
77
|
+
return result;
|
78
|
+
}
|
79
|
+
|
80
|
+
void Init_peg_multimarkdown()
|
81
|
+
{
|
82
|
+
rb_cMultiMarkdown = rb_define_class("PEGMultiMarkdown", rb_cObject);
|
83
|
+
/*
|
84
|
+
* Document-method: PEGMultiMarkdown#to_html
|
85
|
+
* Return string containing HTML generated from `text`
|
86
|
+
*/
|
87
|
+
rb_define_method(rb_cMultiMarkdown, "to_html", rb_multimarkdown_to_html, -1);
|
88
|
+
/*
|
89
|
+
* Document-method: PEGMultiMarkdown#to_latex
|
90
|
+
* Return string containing latex generated from `text`
|
91
|
+
*/
|
92
|
+
rb_define_method(rb_cMultiMarkdown, "to_latex", rb_multimarkdown_to_latex, -1);
|
93
|
+
/*
|
94
|
+
* Document-method: PEGMultiMarkdown#extract_metadata
|
95
|
+
* call-seq:
|
96
|
+
* extract_metadata(key)
|
97
|
+
* Extract metadata specified by `key` from `text`
|
98
|
+
*/
|
99
|
+
rb_define_method(rb_cMultiMarkdown, "extract_metadata", rb_multimarkdown_extract_metadata, 1);
|
100
|
+
}
|
101
|
+
|
102
|
+
// vim: ts=4 sw=4
|