commonmarker 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of commonmarker might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +3 -2
- data/README.md +67 -42
- data/Rakefile +22 -2
- data/commonmarker.gemspec +13 -9
- data/ext/commonmarker/cmark/api_test/main.c +35 -0
- data/ext/commonmarker/cmark/build/CMakeFiles/CMakeError.log +12 -12
- data/ext/commonmarker/cmark/build/CMakeFiles/CMakeOutput.log +141 -141
- data/ext/commonmarker/cmark/build/api_test/CMakeFiles/api_test.dir/main.c.o +0 -0
- data/ext/commonmarker/cmark/build/api_test/api_test +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/houdini_html_u.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/iterator.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/houdini_html_u.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/iterator.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/houdini_html_u.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/iterator.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/cmark +0 -0
- data/ext/commonmarker/cmark/build/src/libcmark.0.19.0.dylib +0 -0
- data/ext/commonmarker/cmark/build/src/libcmark.a +0 -0
- data/ext/commonmarker/cmark/build/src/libcmark.dylib +0 -0
- data/ext/commonmarker/cmark/src/houdini_html_u.c +26 -13
- data/ext/commonmarker/cmark/src/iterator.c +2 -2
- data/ext/commonmarker/cmark/test/__pycache__/cmark.cpython-34.pyc +0 -0
- data/ext/commonmarker/cmark/test/__pycache__/normalize.cpython-34.pyc +0 -0
- data/ext/commonmarker/cmark/test/cmark.pyc +0 -0
- data/ext/commonmarker/cmark/test/normalize.pyc +0 -0
- data/ext/commonmarker/commonmarker.c +276 -3
- data/ext/commonmarker/extconf.rb +3 -1
- data/lib/commonmarker.rb +70 -360
- data/lib/commonmarker/config.rb +1 -1
- data/lib/commonmarker/renderer.rb +91 -0
- data/lib/commonmarker/renderer/html_renderer.rb +149 -0
- data/lib/commonmarker/version.rb +1 -1
- data/test/benchinput.md +148414 -0
- data/test/benchmark.rb +13 -9
- data/test/progit/Gemfile +5 -0
- data/test/progit/README.md +9 -0
- data/test/progit/README.original.md +70 -0
- data/test/progit/Rakefile +285 -0
- data/test/progit/ar/01-introduction/01-chapter1.markdown +264 -0
- data/test/progit/ar/02-git-basics/01-chapter2.markdown +1124 -0
- data/test/progit/ar/NOTES +18 -0
- data/test/progit/ar/README +14 -0
- data/test/progit/az/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/az/02-git-basics/01-chapter2.markdown +1127 -0
- data/test/progit/az/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/az/04-git-server/01-chapter4.markdown +861 -0
- data/test/progit/az/05-distributed-git/01-chapter5.markdown +897 -0
- data/test/progit/az/06-git-tools/01-chapter6.markdown +1126 -0
- data/test/progit/az/07-customizing-git/01-chapter7.markdown +937 -0
- data/test/progit/az/08-git-and-other-scms/01-chapter8.markdown +690 -0
- data/test/progit/az/09-git-internals/01-chapter9.markdown +977 -0
- data/test/progit/be/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/be/02-git-basics/01-chapter2.markdown +1126 -0
- data/test/progit/ca/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/ca/README.txt +1 -0
- data/test/progit/couchapp/Makefile +41 -0
- data/test/progit/couchapp/Readme.md +17 -0
- data/test/progit/couchapp/_id +1 -0
- data/test/progit/couchapp/shows/chapter.js +14 -0
- data/test/progit/couchapp/templates/foot.html +7 -0
- data/test/progit/couchapp/templates/head.html +51 -0
- data/test/progit/couchapp/vendor/markdown/showdown.js +420 -0
- data/test/progit/couchapp/vendor/mustache.js/mustache.js +302 -0
- data/test/progit/cs/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/cs/02-git-basics/01-chapter2.markdown +1225 -0
- data/test/progit/cs/03-git-branching/01-chapter3.markdown +606 -0
- data/test/progit/cs/04-git-server/01-chapter4.markdown +871 -0
- data/test/progit/cs/05-distributed-git/01-chapter5.markdown +914 -0
- data/test/progit/cs/06-git-tools/01-chapter6.markdown +1167 -0
- data/test/progit/cs/07-customizing-git/01-chapter7.markdown +940 -0
- data/test/progit/cs/08-git-and-other-scms/01-chapter8.markdown +700 -0
- data/test/progit/cs/09-git-internals/01-chapter9.markdown +1014 -0
- data/test/progit/de/01-introduction/01-chapter1.markdown +445 -0
- data/test/progit/de/02-git-basics/01-chapter2.markdown +1589 -0
- data/test/progit/de/03-git-branching/01-chapter3.markdown +964 -0
- data/test/progit/de/04-git-server/01-chapter4.markdown +1337 -0
- data/test/progit/de/05-distributed-git/01-chapter5.markdown +1329 -0
- data/test/progit/de/06-git-tools/01-chapter6.markdown +1502 -0
- data/test/progit/de/07-customizing-git/01-chapter7.markdown +1361 -0
- data/test/progit/de/08-git-and-other-scms/01-chapter8.markdown +919 -0
- data/test/progit/de/09-git-internals/01-chapter9.markdown +1361 -0
- data/test/progit/de/README.md +626 -0
- data/test/progit/ebooks/cover.png +0 -0
- data/test/progit/en/01-introduction/01-chapter1.markdown +263 -0
- data/test/progit/en/02-git-basics/01-chapter2.markdown +1228 -0
- data/test/progit/en/03-git-branching/01-chapter3.markdown +606 -0
- data/test/progit/en/04-git-server/01-chapter4.markdown +871 -0
- data/test/progit/en/05-distributed-git/01-chapter5.markdown +914 -0
- data/test/progit/en/06-git-tools/01-chapter6.markdown +1150 -0
- data/test/progit/en/07-customizing-git/01-chapter7.markdown +940 -0
- data/test/progit/en/08-git-and-other-scms/01-chapter8.markdown +700 -0
- data/test/progit/en/09-git-internals/01-chapter9.markdown +983 -0
- data/test/progit/eo/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/eo/02-git-basics/01-chapter2.markdown +1171 -0
- data/test/progit/epub/ProGit.css +28 -0
- data/test/progit/epub/title.png +0 -0
- data/test/progit/es-ni/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/es-ni/02-git-basics/01-chapter2.markdown +1127 -0
- data/test/progit/es/01-introduction/01-chapter1.markdown +262 -0
- data/test/progit/es/02-git-basics/01-chapter2.markdown +1165 -0
- data/test/progit/es/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/es/04-git-server/01-chapter4.markdown +707 -0
- data/test/progit/es/05-distributed-git/01-chapter5.markdown +890 -0
- data/test/progit/es/06-git-tools/01-chapter6.markdown +1113 -0
- data/test/progit/es/07-customizing-git/01-chapter7.markdown +875 -0
- data/test/progit/es/08-git-and-other-scms/01-chapter8.markdown +686 -0
- data/test/progit/es/09-git-internals/01-chapter9.markdown +976 -0
- data/test/progit/es/NOTES +29 -0
- data/test/progit/es/README +3 -0
- data/test/progit/es/glosario-Benzirpi.txt +27 -0
- data/test/progit/es/omegat-Benzirpi.tmx +29075 -0
- data/test/progit/fa/01-introduction/01-chapter1.markdown +262 -0
- data/test/progit/fa/03-git-branching/01-chapter3.markdown +608 -0
- data/test/progit/fa/04-git-server/01-chapter4.markdown +872 -0
- data/test/progit/fa/NOTES.en-fa.md +143 -0
- data/test/progit/fa/README.md +7 -0
- data/test/progit/fi/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/fi/02-git-basics/01-chapter2.markdown +1171 -0
- data/test/progit/fi/NOTES +5 -0
- data/test/progit/figures-dia/fig0101.dia +617 -0
- data/test/progit/figures-dia/fig0102.dia +921 -0
- data/test/progit/figures-dia/fig0103.dia +1468 -0
- data/test/progit/figures-dia/fig0104.dia +1432 -0
- data/test/progit/figures-dia/fig0105.dia +1924 -0
- data/test/progit/figures-dia/fig0106.dia +562 -0
- data/test/progit/figures-dia/fig0201.dia +774 -0
- data/test/progit/figures-dia/fig0301.dia +2006 -0
- data/test/progit/figures-dia/fig0302.dia +2148 -0
- data/test/progit/figures-dia/fig0303.dia +719 -0
- data/test/progit/figures-dia/fig0304.dia +525 -0
- data/test/progit/figures-dia/fig0305.dia +622 -0
- data/test/progit/figures-dia/fig0306.dia +622 -0
- data/test/progit/figures-dia/fig0307.dia +719 -0
- data/test/progit/figures-dia/fig0308.dia +734 -0
- data/test/progit/figures-dia/fig0309.dia +831 -0
- data/test/progit/figures-dia/fig0310.dia +412 -0
- data/test/progit/figures-dia/fig0311.dia +493 -0
- data/test/progit/figures-dia/fig0312.dia +596 -0
- data/test/progit/figures-dia/fig0313.dia +774 -0
- data/test/progit/figures-dia/fig0314.dia +846 -0
- data/test/progit/figures-dia/fig0315.dia +787 -0
- data/test/progit/figures-dia/fig0316.dia +1078 -0
- data/test/progit/figures-dia/fig0317.dia +881 -0
- data/test/progit/figures-dia/fig0318.dia +968 -0
- data/test/progit/figures-dia/fig0319.dia +957 -0
- data/test/progit/figures-dia/fig0320.dia +1637 -0
- data/test/progit/figures-dia/fig0321.dia +1494 -0
- data/test/progit/figures-dia/fig0322.dia +1142 -0
- data/test/progit/figures-dia/fig0323.dia +1377 -0
- data/test/progit/figures-dia/fig0324.dia +1603 -0
- data/test/progit/figures-dia/fig0325.dia +2003 -0
- data/test/progit/figures-dia/fig0326.dia +2013 -0
- data/test/progit/figures-dia/fig0327.dia +687 -0
- data/test/progit/figures-dia/fig0328.dia +814 -0
- data/test/progit/figures-dia/fig0329.dia +793 -0
- data/test/progit/figures-dia/fig0330.dia +693 -0
- data/test/progit/figures-dia/fig0331.dia +1159 -0
- data/test/progit/figures-dia/fig0332.dia +1362 -0
- data/test/progit/figures-dia/fig0333.dia +1165 -0
- data/test/progit/figures-dia/fig0334.dia +1450 -0
- data/test/progit/figures-dia/fig0335.dia +994 -0
- data/test/progit/figures-dia/fig0336.dia +786 -0
- data/test/progit/figures-dia/fig0337.dia +1546 -0
- data/test/progit/figures-dia/fig0338.dia +1755 -0
- data/test/progit/figures-dia/fig0339.dia +1882 -0
- data/test/progit/figures-dia/fig0501.dia +456 -0
- data/test/progit/figures-dia/fig0502.dia +956 -0
- data/test/progit/figures-dia/fig0503.dia +915 -0
- data/test/progit/figures-dia/fig0504.dia +620 -0
- data/test/progit/figures-dia/fig0505.dia +744 -0
- data/test/progit/figures-dia/fig0506.dia +747 -0
- data/test/progit/figures-dia/fig0507.dia +895 -0
- data/test/progit/figures-dia/fig0508.dia +1122 -0
- data/test/progit/figures-dia/fig0509.dia +1243 -0
- data/test/progit/figures-dia/fig0510.dia +1240 -0
- data/test/progit/figures-dia/fig0511.dia +1201 -0
- data/test/progit/figures-dia/fig0512.dia +801 -0
- data/test/progit/figures-dia/fig0513.dia +1387 -0
- data/test/progit/figures-dia/fig0514.dia +1568 -0
- data/test/progit/figures-dia/fig0515.dia +1721 -0
- data/test/progit/figures-dia/fig0516.dia +997 -0
- data/test/progit/figures-dia/fig0517.dia +994 -0
- data/test/progit/figures-dia/fig0518.dia +1145 -0
- data/test/progit/figures-dia/fig0519.dia +992 -0
- data/test/progit/figures-dia/fig0520.dia +1240 -0
- data/test/progit/figures-dia/fig0521.dia +801 -0
- data/test/progit/figures-dia/fig0522.dia +922 -0
- data/test/progit/figures-dia/fig0523.dia +922 -0
- data/test/progit/figures-dia/fig0524.dia +1828 -0
- data/test/progit/figures-dia/fig0525.dia +2685 -0
- data/test/progit/figures-dia/fig0526.dia +717 -0
- data/test/progit/figures-dia/fig0527.dia +856 -0
- data/test/progit/figures-dia/fig0601.dia +790 -0
- data/test/progit/figures-dia/fig0702.dia +795 -0
- data/test/progit/figures-dia/fig0703.dia +795 -0
- data/test/progit/figures-dia/fig0901.dia +669 -0
- data/test/progit/figures-dia/fig0902.dia +834 -0
- data/test/progit/figures-dia/fig0903.dia +1483 -0
- data/test/progit/figures-dia/fig0904.dia +1728 -0
- data/test/progit/figures-dia/makeimages +25 -0
- data/test/progit/figures-source/progit.graffle +123108 -0
- data/test/progit/figures/18333fig0101-tn.png +0 -0
- data/test/progit/figures/18333fig0102-tn.png +0 -0
- data/test/progit/figures/18333fig0103-tn.png +0 -0
- data/test/progit/figures/18333fig0104-tn.png +0 -0
- data/test/progit/figures/18333fig0105-tn.png +0 -0
- data/test/progit/figures/18333fig0106-tn.png +0 -0
- data/test/progit/figures/18333fig0107-tn.png +0 -0
- data/test/progit/figures/18333fig0201-tn.png +0 -0
- data/test/progit/figures/18333fig0202-tn.png +0 -0
- data/test/progit/figures/18333fig0301-tn.png +0 -0
- data/test/progit/figures/18333fig0302-tn.png +0 -0
- data/test/progit/figures/18333fig0303-tn.png +0 -0
- data/test/progit/figures/18333fig0304-tn.png +0 -0
- data/test/progit/figures/18333fig0305-tn.png +0 -0
- data/test/progit/figures/18333fig0306-tn.png +0 -0
- data/test/progit/figures/18333fig0307-tn.png +0 -0
- data/test/progit/figures/18333fig0308-tn.png +0 -0
- data/test/progit/figures/18333fig0309-tn.png +0 -0
- data/test/progit/figures/18333fig0310-tn.png +0 -0
- data/test/progit/figures/18333fig0311-tn.png +0 -0
- data/test/progit/figures/18333fig0312-tn.png +0 -0
- data/test/progit/figures/18333fig0313-tn.png +0 -0
- data/test/progit/figures/18333fig0314-tn.png +0 -0
- data/test/progit/figures/18333fig0315-tn.png +0 -0
- data/test/progit/figures/18333fig0316-tn.png +0 -0
- data/test/progit/figures/18333fig0317-tn.png +0 -0
- data/test/progit/figures/18333fig0318-tn.png +0 -0
- data/test/progit/figures/18333fig0319-tn.png +0 -0
- data/test/progit/figures/18333fig0320-tn.png +0 -0
- data/test/progit/figures/18333fig0321-tn.png +0 -0
- data/test/progit/figures/18333fig0322-tn.png +0 -0
- data/test/progit/figures/18333fig0323-tn.png +0 -0
- data/test/progit/figures/18333fig0324-tn.png +0 -0
- data/test/progit/figures/18333fig0325-tn.png +0 -0
- data/test/progit/figures/18333fig0326-tn.png +0 -0
- data/test/progit/figures/18333fig0327-tn.png +0 -0
- data/test/progit/figures/18333fig0328-tn.png +0 -0
- data/test/progit/figures/18333fig0329-tn.png +0 -0
- data/test/progit/figures/18333fig0330-tn.png +0 -0
- data/test/progit/figures/18333fig0331-tn.png +0 -0
- data/test/progit/figures/18333fig0332-tn.png +0 -0
- data/test/progit/figures/18333fig0333-tn.png +0 -0
- data/test/progit/figures/18333fig0334-tn.png +0 -0
- data/test/progit/figures/18333fig0335-tn.png +0 -0
- data/test/progit/figures/18333fig0336-tn.png +0 -0
- data/test/progit/figures/18333fig0337-tn.png +0 -0
- data/test/progit/figures/18333fig0338-tn.png +0 -0
- data/test/progit/figures/18333fig0339-tn.png +0 -0
- data/test/progit/figures/18333fig0401-tn.png +0 -0
- data/test/progit/figures/18333fig0402-tn.png +0 -0
- data/test/progit/figures/18333fig0403-tn.png +0 -0
- data/test/progit/figures/18333fig0404-tn.png +0 -0
- data/test/progit/figures/18333fig0405-tn.png +0 -0
- data/test/progit/figures/18333fig0406-tn.png +0 -0
- data/test/progit/figures/18333fig0407-tn.png +0 -0
- data/test/progit/figures/18333fig0408-tn.png +0 -0
- data/test/progit/figures/18333fig0409-tn.png +0 -0
- data/test/progit/figures/18333fig0410-tn.png +0 -0
- data/test/progit/figures/18333fig0411-tn.png +0 -0
- data/test/progit/figures/18333fig0412-tn.png +0 -0
- data/test/progit/figures/18333fig0413-tn.png +0 -0
- data/test/progit/figures/18333fig0414-tn.png +0 -0
- data/test/progit/figures/18333fig0415-tn.png +0 -0
- data/test/progit/figures/18333fig0501-tn.png +0 -0
- data/test/progit/figures/18333fig0502-tn.png +0 -0
- data/test/progit/figures/18333fig0503-tn.png +0 -0
- data/test/progit/figures/18333fig0504-tn.png +0 -0
- data/test/progit/figures/18333fig0505-tn.png +0 -0
- data/test/progit/figures/18333fig0506-tn.png +0 -0
- data/test/progit/figures/18333fig0507-tn.png +0 -0
- data/test/progit/figures/18333fig0508-tn.png +0 -0
- data/test/progit/figures/18333fig0509-tn.png +0 -0
- data/test/progit/figures/18333fig0510-tn.png +0 -0
- data/test/progit/figures/18333fig0511-tn.png +0 -0
- data/test/progit/figures/18333fig0512-tn.png +0 -0
- data/test/progit/figures/18333fig0513-tn.png +0 -0
- data/test/progit/figures/18333fig0514-tn.png +0 -0
- data/test/progit/figures/18333fig0515-tn.png +0 -0
- data/test/progit/figures/18333fig0516-tn.png +0 -0
- data/test/progit/figures/18333fig0517-tn.png +0 -0
- data/test/progit/figures/18333fig0518-tn.png +0 -0
- data/test/progit/figures/18333fig0519-tn.png +0 -0
- data/test/progit/figures/18333fig0520-tn.png +0 -0
- data/test/progit/figures/18333fig0521-tn.png +0 -0
- data/test/progit/figures/18333fig0522-tn.png +0 -0
- data/test/progit/figures/18333fig0523-tn.png +0 -0
- data/test/progit/figures/18333fig0524-tn.png +0 -0
- data/test/progit/figures/18333fig0525-tn.png +0 -0
- data/test/progit/figures/18333fig0526-tn.png +0 -0
- data/test/progit/figures/18333fig0527-tn.png +0 -0
- data/test/progit/figures/18333fig0601-tn.png +0 -0
- data/test/progit/figures/18333fig0701-tn.png +0 -0
- data/test/progit/figures/18333fig0702-tn.png +0 -0
- data/test/progit/figures/18333fig0703-tn.png +0 -0
- data/test/progit/figures/18333fig0901-tn.png +0 -0
- data/test/progit/figures/18333fig0902-tn.png +0 -0
- data/test/progit/figures/18333fig0903-tn.png +0 -0
- data/test/progit/figures/18333fig0904-tn.png +0 -0
- data/test/progit/fr/01-introduction/01-chapter1.markdown +371 -0
- data/test/progit/fr/02-git-basics/01-chapter2.markdown +1378 -0
- data/test/progit/fr/03-git-branching/01-chapter3.markdown +781 -0
- data/test/progit/fr/04-git-server/01-chapter4.markdown +1141 -0
- data/test/progit/fr/05-distributed-git/01-chapter5.markdown +1163 -0
- data/test/progit/fr/06-git-tools/01-chapter6.markdown +1356 -0
- data/test/progit/fr/07-customizing-git/01-chapter7.markdown +1200 -0
- data/test/progit/fr/08-git-and-other-scms/01-chapter8.markdown +832 -0
- data/test/progit/fr/09-git-internals/01-chapter9.markdown +1228 -0
- data/test/progit/fr/NOTES.fr-fr.markdown +1 -0
- data/test/progit/fr/NOTES.fr-fr.md +127 -0
- data/test/progit/fr/README.md +43 -0
- data/test/progit/fr/glossaire-git.adoc +108 -0
- data/test/progit/hi/01-introduction/01-chapter1.markdown +7 -0
- data/test/progit/hu/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/id/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/id/02-git-basics/01-chapter2.markdown +1127 -0
- data/test/progit/id/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/it/01-introduction/01-chapter1.markdown +263 -0
- data/test/progit/it/02-git-basics/01-chapter2.markdown +1227 -0
- data/test/progit/it/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/it/04-git-server/01-chapter4.markdown +864 -0
- data/test/progit/it/05-distributed-git/01-chapter5.markdown +897 -0
- data/test/progit/it/06-git-tools/01-chapter6.markdown +1144 -0
- data/test/progit/it/07-customizing-git/01-chapter7.markdown +606 -0
- data/test/progit/it/08-git-and-other-scms/01-chapter8.markdown +707 -0
- data/test/progit/it/09-git-internals/01-chapter9.markdown +1000 -0
- data/test/progit/ja/01-introduction/01-chapter1.markdown +260 -0
- data/test/progit/ja/02-git-basics/01-chapter2.markdown +1221 -0
- data/test/progit/ja/03-git-branching/01-chapter3.markdown +604 -0
- data/test/progit/ja/04-git-server/01-chapter4.markdown +863 -0
- data/test/progit/ja/05-distributed-git/01-chapter5.markdown +908 -0
- data/test/progit/ja/06-git-tools/01-chapter6.markdown +1133 -0
- data/test/progit/ja/07-customizing-git/01-chapter7.markdown +936 -0
- data/test/progit/ja/08-git-and-other-scms/01-chapter8.markdown +690 -0
- data/test/progit/ja/09-git-internals/01-chapter9.markdown +984 -0
- data/test/progit/ja/README.md +58 -0
- data/test/progit/ja/translation glossaries.txt +33 -0
- data/test/progit/ko/01-introduction/01-chapter1.markdown +258 -0
- data/test/progit/ko/02-git-basics/01-chapter2.markdown +1181 -0
- data/test/progit/ko/03-git-branching/01-chapter3.markdown +612 -0
- data/test/progit/ko/04-git-server/01-chapter4.markdown +867 -0
- data/test/progit/ko/05-distributed-git/01-chapter5.markdown +913 -0
- data/test/progit/ko/06-git-tools/01-chapter6.markdown +1142 -0
- data/test/progit/ko/07-customizing-git/01-chapter7.markdown +935 -0
- data/test/progit/ko/08-git-and-other-scms/01-chapter8.markdown +688 -0
- data/test/progit/ko/09-git-internals/01-chapter9.markdown +976 -0
- data/test/progit/ko/README.md +75 -0
- data/test/progit/ko/translation_guide.txt +65 -0
- data/test/progit/latex/README +27 -0
- data/test/progit/latex/config.yml +144 -0
- data/test/progit/latex/makepdf +207 -0
- data/test/progit/latex/template.tex +155 -0
- data/test/progit/makeebooks +125 -0
- data/test/progit/makepdfs +47 -0
- data/test/progit/mk/01-introduction/01-chapter1.markdown +258 -0
- data/test/progit/mk/02-git-basics/01-chapter2.markdown +1125 -0
- data/test/progit/mk/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/mk/05-distributed-git/01-chapter5.markdown +897 -0
- data/test/progit/nl/01-introduction/01-chapter1.markdown +296 -0
- data/test/progit/nl/02-git-basics/01-chapter2.markdown +1253 -0
- data/test/progit/nl/03-git-branching/01-chapter3.markdown +642 -0
- data/test/progit/nl/04-git-server/01-chapter4.markdown +902 -0
- data/test/progit/nl/05-distributed-git/01-chapter5.markdown +953 -0
- data/test/progit/nl/06-git-tools/01-chapter6.markdown +1177 -0
- data/test/progit/nl/07-customizing-git/01-chapter7.markdown +974 -0
- data/test/progit/nl/08-git-and-other-scms/01-chapter8.markdown +725 -0
- data/test/progit/nl/09-git-internals/01-chapter9.markdown +1013 -0
- data/test/progit/no-nb/01-introduction/01-chapter1.markdown +261 -0
- data/test/progit/no-nb/02-git-basics/01-chapter2.markdown +1225 -0
- data/test/progit/no-nb/03-git-branching/01-chapter3.markdown +606 -0
- data/test/progit/no-nb/04-git-server/01-chapter4.markdown +867 -0
- data/test/progit/no-nb/05-distributed-git/01-chapter5.markdown +914 -0
- data/test/progit/no-nb/06-git-tools/01-chapter6.markdown +1144 -0
- data/test/progit/no-nb/07-customizing-git/01-chapter7.markdown +936 -0
- data/test/progit/no-nb/08-git-and-other-scms/01-chapter8.markdown +689 -0
- data/test/progit/no-nb/09-git-internals/01-chapter9.markdown +977 -0
- data/test/progit/no-nb/README +2 -0
- data/test/progit/pl/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/pl/02-git-basics/02-chapter2.markdown +1128 -0
- data/test/progit/pl/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/pl/04-git-server/01-chapter4.markdown +897 -0
- data/test/progit/pl/05-distributed-git/01-chapter5.markdown +1278 -0
- data/test/progit/pl/06-git-tools/01-chapter6.markdown +1550 -0
- data/test/progit/pl/07-customizing-git/01-chapter7.markdown +1058 -0
- data/test/progit/pl/08-git-and-other-scms/01-chapter8.markdown +948 -0
- data/test/progit/pl/09-git-internals/01-chapter9.markdown +1382 -0
- data/test/progit/pl/translation-guidelines.txt +70 -0
- data/test/progit/pt-br/01-introduction/01-chapter1.markdown +256 -0
- data/test/progit/pt-br/02-git-basics/01-chapter2.markdown +1127 -0
- data/test/progit/pt-br/03-git-branching/01-chapter3.markdown +596 -0
- data/test/progit/pt-br/04-git-server/01-chapter4.markdown +888 -0
- data/test/progit/pt-br/05-distributed-git/01-chapter5.markdown +896 -0
- data/test/progit/pt-br/06-git-tools/01-chapter6.markdown +1122 -0
- data/test/progit/pt-br/07-customizing-git/01-chapter7.markdown +932 -0
- data/test/progit/pt-br/08-git-and-other-scms/01-chapter8.markdown +691 -0
- data/test/progit/pt-br/09-git-internals/01-chapter9.markdown +978 -0
- data/test/progit/pt-br/figures-dia/fig0101.dia +617 -0
- data/test/progit/pt-br/figures-dia/fig0102.dia +921 -0
- data/test/progit/pt-br/figures-dia/fig0103.dia +1468 -0
- data/test/progit/pt-br/figures-dia/fig0104.dia +1432 -0
- data/test/progit/pt-br/figures-dia/fig0105.dia +1924 -0
- data/test/progit/pt-br/figures-dia/fig0106.dia +562 -0
- data/test/progit/pt-br/figures-dia/fig0201.dia +776 -0
- data/test/progit/pt-br/figures-dia/fig0301.dia +2006 -0
- data/test/progit/pt-br/figures-dia/fig0302.dia +2148 -0
- data/test/progit/pt-br/figures-dia/fig0316.dia +1079 -0
- data/test/progit/pt-br/figures-dia/fig0322.dia +1142 -0
- data/test/progit/pt-br/figures-dia/fig0323.dia +1407 -0
- data/test/progit/pt-br/figures-dia/fig0324.dia +1603 -0
- data/test/progit/pt-br/figures-dia/fig0325.dia +2003 -0
- data/test/progit/pt-br/figures-dia/fig0326.dia +2013 -0
- data/test/progit/pt-br/figures-dia/fig0336.dia +786 -0
- data/test/progit/pt-br/figures-dia/fig0337.dia +1546 -0
- data/test/progit/pt-br/figures-dia/fig0338.dia +1755 -0
- data/test/progit/pt-br/figures-dia/fig0339.dia +1882 -0
- data/test/progit/pt-br/figures-dia/fig0501.dia +456 -0
- data/test/progit/pt-br/figures-dia/fig0502.dia +965 -0
- data/test/progit/pt-br/figures-dia/fig0503.dia +914 -0
- data/test/progit/pt-br/figures-dia/fig0511.dia +1201 -0
- data/test/progit/pt-br/figures-dia/fig0515.dia +1721 -0
- data/test/progit/pt-br/figures-dia/fig0702.dia +795 -0
- data/test/progit/pt-br/figures-dia/fig0703.dia +795 -0
- data/test/progit/pt-br/figures-dia/fig0901.dia +669 -0
- data/test/progit/pt-br/figures-dia/fig0902.dia +834 -0
- data/test/progit/pt-br/figures-dia/fig0903.dia +1483 -0
- data/test/progit/pt-br/figures-dia/fig0904.dia +1728 -0
- data/test/progit/ro/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/ru/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/ru/02-git-basics/01-chapter2.markdown +1155 -0
- data/test/progit/ru/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/ru/04-git-server/01-chapter4.markdown +854 -0
- data/test/progit/ru/05-distributed-git/01-chapter5.markdown +897 -0
- data/test/progit/ru/06-git-tools/01-chapter6.markdown +1126 -0
- data/test/progit/ru/07-customizing-git/01-chapter7.markdown +938 -0
- data/test/progit/ru/08-git-and-other-scms/01-chapter8.markdown +691 -0
- data/test/progit/ru/09-git-internals/01-chapter9.markdown +977 -0
- data/test/progit/ru/Glossary +38 -0
- data/test/progit/ru/README +12 -0
- data/test/progit/ru/figures-dia/fig0101.dia +647 -0
- data/test/progit/ru/figures-dia/fig0102.dia +1009 -0
- data/test/progit/ru/figures-dia/fig0103.dia +1468 -0
- data/test/progit/ru/figures-dia/fig0104.dia +1432 -0
- data/test/progit/ru/figures-dia/fig0105.dia +1924 -0
- data/test/progit/ru/figures-dia/fig0106.dia +561 -0
- data/test/progit/ru/figures-dia/fig0201.dia +774 -0
- data/test/progit/ru/figures-dia/fig0322.dia +1182 -0
- data/test/progit/ru/figures-dia/fig0323.dia +1457 -0
- data/test/progit/ru/figures-dia/fig0324.dia +1698 -0
- data/test/progit/ru/figures-dia/fig0325.dia +2101 -0
- data/test/progit/ru/figures-dia/fig0326.dia +2111 -0
- data/test/progit/ru/figures-dia/fig0336.dia +786 -0
- data/test/progit/ru/figures-dia/fig0337.dia +1546 -0
- data/test/progit/ru/figures-dia/fig0338.dia +1755 -0
- data/test/progit/ru/figures-dia/fig0339.dia +1882 -0
- data/test/progit/ru/figures-dia/fig0501.dia +477 -0
- data/test/progit/ru/figures-dia/fig0502.dia +1063 -0
- data/test/progit/ru/figures-dia/fig0503.dia +915 -0
- data/test/progit/ru/figures-dia/fig0511.dia +1201 -0
- data/test/progit/ru/figures-dia/fig0515.dia +1741 -0
- data/test/progit/ru/figures-dia/fig0702.dia +851 -0
- data/test/progit/ru/figures-dia/fig0703.dia +851 -0
- data/test/progit/sr/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/summary.rb +29 -0
- data/test/progit/th/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/th/02-git-basics/01-chapter2.markdown +1126 -0
- data/test/progit/th/README.md +47 -0
- data/test/progit/tr/01-introduction/01-chapter1.markdown +258 -0
- data/test/progit/tr/02-git-basics/01-chapter2.markdown +1129 -0
- data/test/progit/tr/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/tr/04-git-server/01-chapter4.markdown +73 -0
- data/test/progit/tr/05-distributed-git/01-chapter5.markdown +215 -0
- data/test/progit/uk/01-introduction/01-chapter1.markdown +522 -0
- data/test/progit/vi/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/vi/02-git-basics/01-chapter2.markdown +1172 -0
- data/test/progit/vi/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/zh-tw/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/zh-tw/02-git-basics/01-chapter2.markdown +1183 -0
- data/test/progit/zh-tw/03-git-branching/01-chapter3.markdown +604 -0
- data/test/progit/zh-tw/04-git-server/01-chapter4.markdown +866 -0
- data/test/progit/zh-tw/05-distributed-git/01-chapter5.markdown +912 -0
- data/test/progit/zh-tw/06-git-tools/01-chapter6.markdown +1139 -0
- data/test/progit/zh-tw/07-customizing-git/01-chapter7.markdown +932 -0
- data/test/progit/zh-tw/08-git-and-other-scms/01-chapter8.markdown +689 -0
- data/test/progit/zh-tw/09-git-internals/01-chapter9.markdown +977 -0
- data/test/progit/zh/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/zh/02-git-basics/01-chapter2.markdown +1177 -0
- data/test/progit/zh/03-git-branching/01-chapter3.markdown +604 -0
- data/test/progit/zh/04-git-server/01-chapter4.markdown +866 -0
- data/test/progit/zh/05-distributed-git/01-chapter5.markdown +912 -0
- data/test/progit/zh/06-git-tools/01-chapter6.markdown +1125 -0
- data/test/progit/zh/07-customizing-git/01-chapter7.markdown +935 -0
- data/test/progit/zh/08-git-and-other-scms/01-chapter8.markdown +689 -0
- data/test/progit/zh/09-git-internals/01-chapter9.markdown +976 -0
- data/test/spec_tests.json +4382 -4070
- data/test/test_basics.rb +1 -1
- data/test/test_helper.rb +1 -0
- data/test/test_maliciousness.rb +4 -2
- data/test/test_pathological_inputs.rb +31 -30
- data/test/test_spec.rb +5 -4
- metadata +972 -4
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -12,32 +12,45 @@ houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, size_t size)
|
|
12
12
|
{
|
13
13
|
size_t i = 0;
|
14
14
|
|
15
|
-
if (size
|
16
|
-
int codepoint
|
15
|
+
if (size >= 3 && src[0] == '#') {
|
16
|
+
int codepoint = 0;
|
17
|
+
int num_digits = 0;
|
17
18
|
|
18
19
|
if (_isdigit(src[1])) {
|
19
20
|
for (i = 1; i < size && _isdigit(src[i]); ++i) {
|
20
|
-
|
21
|
+
codepoint = (codepoint * 10) + (src[i] - '0');
|
21
22
|
|
22
|
-
if (
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
if (codepoint >= 0x110000) {
|
24
|
+
// Keep counting digits but
|
25
|
+
// avoid integer overflow.
|
26
|
+
codepoint = 0x110000;
|
27
|
+
}
|
26
28
|
}
|
29
|
+
|
30
|
+
num_digits = i - 1;
|
27
31
|
}
|
28
32
|
|
29
33
|
else if (src[1] == 'x' || src[1] == 'X') {
|
30
34
|
for (i = 2; i < size && _isxdigit(src[i]); ++i) {
|
31
|
-
|
35
|
+
codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9);
|
32
36
|
|
33
|
-
if (
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
+
if (codepoint >= 0x110000) {
|
38
|
+
// Keep counting digits but
|
39
|
+
// avoid integer overflow.
|
40
|
+
codepoint = 0x110000;
|
41
|
+
}
|
37
42
|
}
|
43
|
+
|
44
|
+
num_digits = i - 2;
|
38
45
|
}
|
39
46
|
|
40
|
-
if (
|
47
|
+
if (num_digits >= 1 && num_digits <= 8 &&
|
48
|
+
i < size && src[i] == ';') {
|
49
|
+
if (codepoint == 0 ||
|
50
|
+
(codepoint >= 0xD800 && codepoint < 0xE000) ||
|
51
|
+
codepoint >= 0x110000) {
|
52
|
+
codepoint = 0xFFFD;
|
53
|
+
}
|
41
54
|
utf8proc_encode_char(codepoint, ob);
|
42
55
|
return i + 1;
|
43
56
|
}
|
@@ -138,8 +138,8 @@ void cmark_consolidate_text_nodes(cmark_node *root)
|
|
138
138
|
cmark_node_free(tmp);
|
139
139
|
tmp = next;
|
140
140
|
}
|
141
|
-
|
142
|
-
|
141
|
+
cmark_chunk_free(&cur->as.literal);
|
142
|
+
cur->as.literal = cmark_chunk_buf_detach(&buf);
|
143
143
|
}
|
144
144
|
}
|
145
145
|
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -5,9 +5,14 @@
|
|
5
5
|
VALUE rb_mCommonMark;
|
6
6
|
|
7
7
|
static VALUE
|
8
|
-
rb_markdown_to_html(VALUE
|
8
|
+
rb_markdown_to_html(VALUE self, VALUE rb_text)
|
9
9
|
{
|
10
|
-
|
10
|
+
Check_Type(rb_text, T_STRING);
|
11
|
+
|
12
|
+
char *str = (char *)RSTRING_PTR(rb_text);
|
13
|
+
int len = RSTRING_LEN(rb_text);
|
14
|
+
|
15
|
+
return rb_str_new2(cmark_markdown_to_html(str, len, 0));
|
11
16
|
}
|
12
17
|
|
13
18
|
static VALUE
|
@@ -41,7 +46,11 @@ rb_node_get_string_content(VALUE self, VALUE n)
|
|
41
46
|
cmark_node *node;
|
42
47
|
Data_Get_Struct(n, cmark_node, node);
|
43
48
|
|
44
|
-
|
49
|
+
char *text = (char *) cmark_node_get_literal(node);
|
50
|
+
if (text == NULL)
|
51
|
+
return Qnil;
|
52
|
+
|
53
|
+
return rb_str_new2(text);
|
45
54
|
}
|
46
55
|
|
47
56
|
static VALUE
|
@@ -145,6 +154,250 @@ rb_render_html(VALUE self, VALUE n, VALUE rb_options)
|
|
145
154
|
return rb_str_new2(cmark_render_html(node, options));
|
146
155
|
}
|
147
156
|
|
157
|
+
static VALUE
|
158
|
+
rb_node_insert_after(VALUE self, VALUE n1, VALUE n2)
|
159
|
+
{
|
160
|
+
cmark_node *node1;
|
161
|
+
Data_Get_Struct(n1, cmark_node, node1);
|
162
|
+
|
163
|
+
cmark_node *node2;
|
164
|
+
Data_Get_Struct(n2, cmark_node, node2);
|
165
|
+
|
166
|
+
return INT2NUM(cmark_node_insert_after(node1, node2));
|
167
|
+
}
|
168
|
+
|
169
|
+
|
170
|
+
static VALUE
|
171
|
+
rb_node_prepend_child(VALUE self, VALUE n1, VALUE n2)
|
172
|
+
{
|
173
|
+
cmark_node *node1;
|
174
|
+
Data_Get_Struct(n1, cmark_node, node1);
|
175
|
+
|
176
|
+
cmark_node *node2;
|
177
|
+
Data_Get_Struct(n2, cmark_node, node2);
|
178
|
+
|
179
|
+
return INT2NUM(cmark_node_prepend_child(node1, node2));
|
180
|
+
}
|
181
|
+
|
182
|
+
|
183
|
+
static VALUE
|
184
|
+
rb_node_append_child(VALUE self, VALUE n1, VALUE n2)
|
185
|
+
{
|
186
|
+
cmark_node *node1;
|
187
|
+
Data_Get_Struct(n1, cmark_node, node1);
|
188
|
+
|
189
|
+
cmark_node *node2;
|
190
|
+
Data_Get_Struct(n2, cmark_node, node2);
|
191
|
+
|
192
|
+
return INT2NUM(cmark_node_append_child(node1, node2));
|
193
|
+
}
|
194
|
+
|
195
|
+
|
196
|
+
static VALUE
|
197
|
+
rb_node_last_child(VALUE self, VALUE n)
|
198
|
+
{
|
199
|
+
cmark_node *node;
|
200
|
+
Data_Get_Struct(n, cmark_node, node);
|
201
|
+
|
202
|
+
if (node == NULL)
|
203
|
+
return Qnil;
|
204
|
+
|
205
|
+
cmark_node *child = cmark_node_last_child(node);
|
206
|
+
|
207
|
+
return Data_Wrap_Struct(self, NULL, NULL, child);
|
208
|
+
}
|
209
|
+
|
210
|
+
|
211
|
+
static VALUE
|
212
|
+
rb_node_parent(VALUE self, VALUE n)
|
213
|
+
{
|
214
|
+
cmark_node *node;
|
215
|
+
Data_Get_Struct(n, cmark_node, node);
|
216
|
+
|
217
|
+
if (node == NULL)
|
218
|
+
return Qnil;
|
219
|
+
|
220
|
+
cmark_node *parent = cmark_node_parent(node);
|
221
|
+
|
222
|
+
return Data_Wrap_Struct(self, NULL, NULL, parent);
|
223
|
+
}
|
224
|
+
|
225
|
+
|
226
|
+
static VALUE
|
227
|
+
rb_node_previous(VALUE self, VALUE n)
|
228
|
+
{
|
229
|
+
cmark_node *node;
|
230
|
+
Data_Get_Struct(n, cmark_node, node);
|
231
|
+
|
232
|
+
if (node == NULL)
|
233
|
+
return Qnil;
|
234
|
+
|
235
|
+
cmark_node *previous = cmark_node_previous(node);
|
236
|
+
|
237
|
+
return Data_Wrap_Struct(self, NULL, NULL, previous);
|
238
|
+
}
|
239
|
+
|
240
|
+
|
241
|
+
static VALUE
|
242
|
+
rb_node_get_url(VALUE self, VALUE n)
|
243
|
+
{
|
244
|
+
cmark_node *node;
|
245
|
+
Data_Get_Struct(n, cmark_node, node);
|
246
|
+
|
247
|
+
char *text = (char *) cmark_node_get_url(node);
|
248
|
+
if (text == NULL)
|
249
|
+
return Qnil;
|
250
|
+
|
251
|
+
return rb_str_new2(text);
|
252
|
+
}
|
253
|
+
|
254
|
+
static VALUE
|
255
|
+
rb_node_set_url(VALUE self, VALUE n, VALUE s)
|
256
|
+
{
|
257
|
+
Check_Type(s, T_STRING);
|
258
|
+
|
259
|
+
cmark_node *node;
|
260
|
+
Data_Get_Struct(n, cmark_node, node);
|
261
|
+
char *text = (char *)RSTRING_PTR(s);
|
262
|
+
|
263
|
+
return INT2NUM(cmark_node_set_url(node, text));
|
264
|
+
}
|
265
|
+
|
266
|
+
|
267
|
+
static VALUE
|
268
|
+
rb_node_get_title(VALUE self, VALUE n)
|
269
|
+
{
|
270
|
+
cmark_node *node;
|
271
|
+
Data_Get_Struct(n, cmark_node, node);
|
272
|
+
|
273
|
+
char *text = (char *) cmark_node_get_title(node);
|
274
|
+
if (text == NULL)
|
275
|
+
return Qnil;
|
276
|
+
|
277
|
+
return rb_str_new2(text);
|
278
|
+
}
|
279
|
+
|
280
|
+
static VALUE
|
281
|
+
rb_node_set_title(VALUE self, VALUE n, VALUE s)
|
282
|
+
{
|
283
|
+
Check_Type(s, T_STRING);
|
284
|
+
|
285
|
+
cmark_node *node;
|
286
|
+
Data_Get_Struct(n, cmark_node, node);
|
287
|
+
char *text = (char *)RSTRING_PTR(s);
|
288
|
+
|
289
|
+
return INT2NUM(cmark_node_set_title(node, text));
|
290
|
+
}
|
291
|
+
|
292
|
+
|
293
|
+
static VALUE
|
294
|
+
rb_node_get_header_level(VALUE self, VALUE n)
|
295
|
+
{
|
296
|
+
cmark_node *node;
|
297
|
+
Data_Get_Struct(n, cmark_node, node);
|
298
|
+
|
299
|
+
return INT2NUM(cmark_node_get_header_level(node));
|
300
|
+
}
|
301
|
+
|
302
|
+
static VALUE
|
303
|
+
rb_node_set_header_level(VALUE self, VALUE n, VALUE l)
|
304
|
+
{
|
305
|
+
Check_Type(l, T_FIXNUM);
|
306
|
+
|
307
|
+
cmark_node *node;
|
308
|
+
Data_Get_Struct(n, cmark_node, node);
|
309
|
+
int level = FIX2INT(l);
|
310
|
+
|
311
|
+
return INT2NUM(cmark_node_set_header_level(node, level));
|
312
|
+
}
|
313
|
+
|
314
|
+
|
315
|
+
static VALUE
|
316
|
+
rb_node_get_list_type(VALUE self, VALUE n)
|
317
|
+
{
|
318
|
+
cmark_node *node;
|
319
|
+
Data_Get_Struct(n, cmark_node, node);
|
320
|
+
|
321
|
+
return INT2NUM(cmark_node_get_list_type(node));
|
322
|
+
}
|
323
|
+
|
324
|
+
static VALUE
|
325
|
+
rb_node_set_list_type(VALUE self, VALUE n, VALUE t)
|
326
|
+
{
|
327
|
+
Check_Type(t, T_FIXNUM);
|
328
|
+
|
329
|
+
cmark_node *node;
|
330
|
+
Data_Get_Struct(n, cmark_node, node);
|
331
|
+
int type = FIX2INT(t);
|
332
|
+
|
333
|
+
return INT2NUM(cmark_node_set_list_type(node, type));
|
334
|
+
}
|
335
|
+
|
336
|
+
|
337
|
+
static VALUE
|
338
|
+
rb_node_get_list_start(VALUE self, VALUE n)
|
339
|
+
{
|
340
|
+
cmark_node *node;
|
341
|
+
Data_Get_Struct(n, cmark_node, node);
|
342
|
+
|
343
|
+
return INT2NUM(cmark_node_get_list_start(node));
|
344
|
+
}
|
345
|
+
|
346
|
+
static VALUE
|
347
|
+
rb_node_set_list_start(VALUE self, VALUE n, VALUE s)
|
348
|
+
{
|
349
|
+
Check_Type(s, T_FIXNUM);
|
350
|
+
|
351
|
+
cmark_node *node;
|
352
|
+
Data_Get_Struct(n, cmark_node, node);
|
353
|
+
int start = FIX2INT(s);
|
354
|
+
|
355
|
+
return INT2NUM(cmark_node_set_list_start(node, start));
|
356
|
+
}
|
357
|
+
|
358
|
+
|
359
|
+
static VALUE
|
360
|
+
rb_node_get_list_tight(VALUE self, VALUE n)
|
361
|
+
{
|
362
|
+
cmark_node *node;
|
363
|
+
Data_Get_Struct(n, cmark_node, node);
|
364
|
+
int flag = cmark_node_get_list_tight(node);
|
365
|
+
|
366
|
+
return flag ? Qtrue : Qfalse;
|
367
|
+
}
|
368
|
+
|
369
|
+
static VALUE
|
370
|
+
rb_node_set_list_tight(VALUE self, VALUE n, VALUE t)
|
371
|
+
{
|
372
|
+
cmark_node *node;
|
373
|
+
Data_Get_Struct(n, cmark_node, node);
|
374
|
+
int tight = RTEST(t);
|
375
|
+
|
376
|
+
return INT2NUM(cmark_node_set_list_tight(node, tight));
|
377
|
+
}
|
378
|
+
|
379
|
+
|
380
|
+
static VALUE
|
381
|
+
rb_node_get_fence_info(VALUE self, VALUE n)
|
382
|
+
{
|
383
|
+
cmark_node *node;
|
384
|
+
Data_Get_Struct(n, cmark_node, node);
|
385
|
+
|
386
|
+
return rb_str_new2(cmark_node_get_fence_info(node));
|
387
|
+
}
|
388
|
+
|
389
|
+
static VALUE
|
390
|
+
rb_node_set_fence_info(VALUE self, VALUE n, VALUE s)
|
391
|
+
{
|
392
|
+
Check_Type(s, T_STRING);
|
393
|
+
|
394
|
+
cmark_node *node;
|
395
|
+
Data_Get_Struct(n, cmark_node, node);
|
396
|
+
char *text = (char *)RSTRING_PTR(s);
|
397
|
+
|
398
|
+
return INT2NUM(cmark_node_set_fence_info(node, text));
|
399
|
+
}
|
400
|
+
|
148
401
|
__attribute__((visibility("default")))
|
149
402
|
void Init_commonmarker()
|
150
403
|
{
|
@@ -162,4 +415,24 @@ void Init_commonmarker()
|
|
162
415
|
rb_define_singleton_method(rb_mCommonMark, "node_next", rb_node_next, 1);
|
163
416
|
rb_define_singleton_method(rb_mCommonMark, "node_insert_before", rb_node_insert_before, 2);
|
164
417
|
rb_define_singleton_method(rb_mCommonMark, "render_html", rb_render_html, 2);
|
418
|
+
rb_define_singleton_method(rb_mCommonMark, "node_insert_after", rb_node_insert_after, 2);
|
419
|
+
rb_define_singleton_method(rb_mCommonMark, "node_prepend_child", rb_node_prepend_child, 2);
|
420
|
+
rb_define_singleton_method(rb_mCommonMark, "node_append_child", rb_node_append_child, 2);
|
421
|
+
rb_define_singleton_method(rb_mCommonMark, "node_last_child", rb_node_last_child, 1);
|
422
|
+
rb_define_singleton_method(rb_mCommonMark, "node_parent", rb_node_parent, 1);
|
423
|
+
rb_define_singleton_method(rb_mCommonMark, "node_previous", rb_node_previous, 1);
|
424
|
+
rb_define_singleton_method(rb_mCommonMark, "node_get_url", rb_node_get_url, 1);
|
425
|
+
rb_define_singleton_method(rb_mCommonMark, "node_set_url", rb_node_set_url, 2);
|
426
|
+
rb_define_singleton_method(rb_mCommonMark, "node_get_title", rb_node_get_title, 1);
|
427
|
+
rb_define_singleton_method(rb_mCommonMark, "node_set_title", rb_node_set_title, 2);
|
428
|
+
rb_define_singleton_method(rb_mCommonMark, "node_get_header_level", rb_node_get_header_level, 1);
|
429
|
+
rb_define_singleton_method(rb_mCommonMark, "node_set_header_level", rb_node_set_header_level, 2);
|
430
|
+
rb_define_singleton_method(rb_mCommonMark, "node_get_list_type", rb_node_get_list_type, 1);
|
431
|
+
rb_define_singleton_method(rb_mCommonMark, "node_set_list_type", rb_node_set_list_type, 2);
|
432
|
+
rb_define_singleton_method(rb_mCommonMark, "node_get_list_start", rb_node_get_list_start, 1);
|
433
|
+
rb_define_singleton_method(rb_mCommonMark, "node_set_list_start", rb_node_set_list_start, 2);
|
434
|
+
rb_define_singleton_method(rb_mCommonMark, "node_get_list_tight", rb_node_get_list_tight, 1);
|
435
|
+
rb_define_singleton_method(rb_mCommonMark, "node_set_list_tight", rb_node_set_list_tight, 2);
|
436
|
+
rb_define_singleton_method(rb_mCommonMark, "node_get_fence_info", rb_node_get_fence_info, 1);
|
437
|
+
rb_define_singleton_method(rb_mCommonMark, "node_set_fence_info", rb_node_set_fence_info, 2);
|
165
438
|
}
|
data/ext/commonmarker/extconf.rb
CHANGED
@@ -10,9 +10,11 @@ FileUtils.mkdir_p(CMARK_BUILD_DIR)
|
|
10
10
|
Dir.chdir(CMARK_BUILD_DIR) do
|
11
11
|
system 'cmake ..'
|
12
12
|
system 'make'
|
13
|
+
# rake-compiler seems to complain about this line, not sure why it's messing with it
|
14
|
+
FileUtils.rm_rf(File.join(CMARK_BUILD_DIR, 'Testing', 'Temporary'))
|
13
15
|
end
|
14
16
|
|
17
|
+
$LDFLAGS << " -Wl,-rpath,#{CMARK_BUILD_DIR}/src -L#{CMARK_BUILD_DIR}/src -lcmark"
|
15
18
|
$CFLAGS << " -I#{CMARK_DIR}/src -I#{CMARK_BUILD_DIR}/src"
|
16
|
-
$LOCAL_LIBS << "#{CMARK_BUILD_DIR}/src/libcmark.a"
|
17
19
|
|
18
20
|
create_makefile('commonmarker/commonmarker')
|
data/lib/commonmarker.rb
CHANGED
@@ -1,53 +1,22 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'commonmarker/commonmarker'
|
3
3
|
require 'commonmarker/config'
|
4
|
-
require '
|
5
|
-
require '
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
# attach_function :cmark_node_unlink, [:node], :void
|
21
|
-
# attach_function :cmark_node_insert_before, [:node, :node], :int
|
22
|
-
# attach_function :cmark_node_insert_after, [:node, :node], :int
|
23
|
-
# attach_function :cmark_node_prepend_child, [:node, :node], :int
|
24
|
-
# attach_function :cmark_node_append_child, [:node, :node], :int
|
25
|
-
# attach_function :cmark_markdown_to_html, [:string, :int], :string
|
26
|
-
# attach_function :cmark_render_html, [:node], :string
|
27
|
-
# attach_function :cmark_parse_document, [:string, :int], :node
|
28
|
-
# attach_function :cmark_node_first_child, [:node], :node
|
29
|
-
# attach_function :cmark_node_last_child, [:node], :node
|
30
|
-
# attach_function :cmark_node_parent, [:node], :node
|
31
|
-
# attach_function :cmark_node_next, [:node], :node
|
32
|
-
# attach_function :cmark_node_previous, [:node], :node
|
33
|
-
# attach_function :cmark_node_get_type, [:node], :node_type
|
34
|
-
# attach_function :cmark_node_get_literal, [:node], :string
|
35
|
-
# attach_function :cmark_node_set_literal, [:node, :string], :int
|
36
|
-
# attach_function :cmark_node_get_url, [:node], :string
|
37
|
-
# attach_function :cmark_node_set_url, [:node, :string], :int
|
38
|
-
# attach_function :cmark_node_get_title, [:node], :string
|
39
|
-
# attach_function :cmark_node_set_title, [:node, :string], :int
|
40
|
-
# attach_function :cmark_node_get_header_level, [:node], :int
|
41
|
-
# attach_function :cmark_node_set_header_level, [:node, :int], :int
|
42
|
-
# attach_function :cmark_node_get_list_type, [:node], :list_type
|
43
|
-
# attach_function :cmark_node_set_list_type, [:node, :list_type], :int
|
44
|
-
# attach_function :cmark_node_get_list_start, [:node], :int
|
45
|
-
# attach_function :cmark_node_set_list_start, [:node, :int], :int
|
46
|
-
# attach_function :cmark_node_get_list_tight, [:node], :bool
|
47
|
-
# attach_function :cmark_node_set_list_tight, [:node, :bool], :int
|
48
|
-
# attach_function :cmark_node_get_fence_info, [:node], :string
|
49
|
-
# attach_function :cmark_node_set_fence_info, [:node, :string], :int
|
50
|
-
# end
|
4
|
+
require 'commonmarker/renderer'
|
5
|
+
require 'commonmarker/renderer/html_renderer'
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'awesome_print'
|
9
|
+
rescue LoadError; end
|
10
|
+
|
11
|
+
NODE_TYPES = %i(none document blockquote list list_item
|
12
|
+
code_block html paragraph
|
13
|
+
header hrule text softbreak
|
14
|
+
linebreak code inline_html
|
15
|
+
emph strong link image)
|
16
|
+
|
17
|
+
LIST_TYPES = %i(no_list bullet_list ordered_list)
|
18
|
+
|
19
|
+
NONE_TYPE = 'NONE'
|
51
20
|
|
52
21
|
module CommonMarker
|
53
22
|
class NodeError < StandardError
|
@@ -63,18 +32,17 @@ module CommonMarker
|
|
63
32
|
# Params:
|
64
33
|
# +type+:: +node_type+ of the node to be created (nil if +pointer+ is used).
|
65
34
|
# +pointer+:: pointer to C node (nil if +type+ is used).
|
66
|
-
def initialize(type=nil, pointer=nil)
|
35
|
+
def initialize(type = nil, pointer = nil)
|
67
36
|
if pointer
|
68
37
|
@pointer = pointer
|
69
38
|
else
|
70
39
|
unless NODE_TYPES.include?(type)
|
71
|
-
|
40
|
+
fail NodeError, "node type does not exist #{type}"
|
72
41
|
end
|
73
42
|
@pointer = CMark.node_new(type)
|
74
43
|
end
|
75
|
-
|
76
|
-
|
77
|
-
end
|
44
|
+
|
45
|
+
fail NodeError, "could not create node of type #{type}" if @pointer.nil?
|
78
46
|
end
|
79
47
|
|
80
48
|
# Parses a string into a :document Node. The
|
@@ -106,10 +74,22 @@ module CommonMarker
|
|
106
74
|
Node.new(nil, CMark.node_last_child(@pointer))
|
107
75
|
end
|
108
76
|
|
77
|
+
def parent
|
78
|
+
Node.new(nil, CMark.node_parent(@pointer))
|
79
|
+
end
|
80
|
+
|
81
|
+
def previous
|
82
|
+
Node.new(nil, CMark.node_previous(@pointer))
|
83
|
+
end
|
84
|
+
|
85
|
+
def next
|
86
|
+
Node.new(nil, CMark.node_next(@pointer))
|
87
|
+
end
|
88
|
+
|
109
89
|
# Iterator over the children (if any) of this Node.
|
110
90
|
def each_child
|
111
91
|
childptr = CMark.node_first_child(@pointer)
|
112
|
-
until CMark.node_get_type_string(childptr) ==
|
92
|
+
until CMark.node_get_type_string(childptr) == NONE_TYPE
|
113
93
|
nextptr = CMark.node_next(childptr)
|
114
94
|
yield Node.new(nil, childptr)
|
115
95
|
childptr = nextptr
|
@@ -128,31 +108,23 @@ module CommonMarker
|
|
128
108
|
# +sibling+:: Sibling node to insert.
|
129
109
|
def insert_before(sibling)
|
130
110
|
res = CMark.node_insert_before(@pointer, sibling.pointer)
|
131
|
-
|
111
|
+
fail NodeError, 'could not insert before' if res == 0
|
132
112
|
end
|
133
113
|
|
134
114
|
# Insert a node after this Node.
|
135
115
|
# Params:
|
136
116
|
# +sibling+:: Sibling Node to insert.
|
137
117
|
def insert_after(sibling)
|
138
|
-
CMark.node_insert_before(@pointer, sibling.pointer)
|
139
|
-
|
118
|
+
res = CMark.node_insert_before(@pointer, sibling.pointer)
|
119
|
+
fail NodeError, 'could not insert after' if res == 0
|
140
120
|
end
|
141
121
|
|
142
122
|
# Prepend a child to this Node.
|
143
123
|
# Params:
|
144
124
|
# +child+:: Child Node to prepend.
|
145
125
|
def prepend_child(child)
|
146
|
-
CMark.node_prepend_child(@pointer, child.pointer)
|
147
|
-
|
148
|
-
end
|
149
|
-
|
150
|
-
# Append a child to this Node.
|
151
|
-
# Params:
|
152
|
-
# +child+:: Child Node to append.
|
153
|
-
def prepend_child(child)
|
154
|
-
CMark.node_append_child(@pointer, child.pointer)
|
155
|
-
if res == 0 then raise NodeError, "could not append child" end
|
126
|
+
res = CMark.node_prepend_child(@pointer, child.pointer)
|
127
|
+
fail NodeError, 'could not prepend child' if res == 0
|
156
128
|
end
|
157
129
|
|
158
130
|
# Returns string content of this Node.
|
@@ -165,14 +137,12 @@ module CommonMarker
|
|
165
137
|
# +s+:: +String+ containing new content.
|
166
138
|
def string_content=(s)
|
167
139
|
res = CMark.node_set_string_content(@pointer, s)
|
168
|
-
|
140
|
+
fail NodeError, 'could not set string content' if res == 0
|
169
141
|
end
|
170
142
|
|
171
143
|
# Returns header level of this Node (must be a :header).
|
172
144
|
def header_level
|
173
|
-
|
174
|
-
raise NodeError, "can't get header_level for non-header"
|
175
|
-
end
|
145
|
+
fail NodeError, 'can\'t get header_level for non-header' unless type == :header
|
176
146
|
CMark.node_get_header_level(@pointer)
|
177
147
|
end
|
178
148
|
|
@@ -180,22 +150,18 @@ module CommonMarker
|
|
180
150
|
# Params:
|
181
151
|
# +level+:: New header level (+Integer+).
|
182
152
|
def header_level=(level)
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
if !level.kind_of?(Integer) || level < 0 || level > 6
|
187
|
-
raise NodeError, "level must be between 1-6"
|
153
|
+
fail NodeError, 'can\'t set header_level for non-header' unless type == :header
|
154
|
+
if !level.is_a?(Integer) || level < 0 || level > 6
|
155
|
+
fail NodeError, 'level must be between 1-6'
|
188
156
|
end
|
189
157
|
res = CMark.node_set_header_level(@pointer, level)
|
190
|
-
|
158
|
+
fail NodeError, 'could not set header level' if res == 0
|
191
159
|
end
|
192
160
|
|
193
161
|
# Returns list type of this Node (must be a :list).
|
194
162
|
def list_type
|
195
|
-
|
196
|
-
|
197
|
-
end
|
198
|
-
CMark.node_get_list_type(@pointer)
|
163
|
+
fail NodeError, 'can\'t get list_type for non-list' unless type == :list
|
164
|
+
LIST_TYPES[CMark.node_get_list_type(@pointer)]
|
199
165
|
end
|
200
166
|
|
201
167
|
# Sets list type of this Node (must be a :list).
|
@@ -203,18 +169,16 @@ module CommonMarker
|
|
203
169
|
# +list_type+:: New list type (+:list_type+), either
|
204
170
|
# :ordered_list or :bullet_list.
|
205
171
|
def list_type=(list_type)
|
206
|
-
|
207
|
-
raise NodeError, "can't set list_type for non-list"
|
208
|
-
end
|
172
|
+
fail NodeError, 'can\'t set list_type for non-list' unless type == :list
|
209
173
|
res = CMark.node_set_list_type(@pointer, list_type)
|
210
|
-
|
174
|
+
fail NodeError, 'could not set list_type' if res == 0
|
211
175
|
end
|
212
176
|
|
213
177
|
# Returns start number of this Node (must be a :list of
|
214
178
|
# list_type :ordered_list).
|
215
179
|
def list_start
|
216
|
-
if
|
217
|
-
|
180
|
+
if type != :list || list_type != :ordered_list
|
181
|
+
fail NodeError, 'can\'t get list_start for non-ordered list'
|
218
182
|
end
|
219
183
|
CMark.node_get_list_start(@pointer)
|
220
184
|
end
|
@@ -224,21 +188,17 @@ module CommonMarker
|
|
224
188
|
# Params:
|
225
189
|
# +start+:: New start number (+Integer+).
|
226
190
|
def list_start=(start)
|
227
|
-
if
|
228
|
-
|
229
|
-
end
|
230
|
-
if !start.kind_of?(Integer)
|
231
|
-
raise NodeError, "start must be Integer"
|
191
|
+
if type != :list || list_type != :ordered_list
|
192
|
+
fail NodeError, 'can\'t set list_start for non-ordered list'
|
232
193
|
end
|
194
|
+
fail NodeError, 'start must be Integer' unless start.is_a?(Integer)
|
233
195
|
res = CMark.node_set_list_start(@pointer, start)
|
234
|
-
|
196
|
+
fail NodeError, 'could not set list_start' if res == 0
|
235
197
|
end
|
236
198
|
|
237
199
|
# Returns tight status of this Node (must be a :list).
|
238
200
|
def list_tight
|
239
|
-
|
240
|
-
raise NodeError, "can't get list_tight for non-list"
|
241
|
-
end
|
201
|
+
fail NodeError, 'can\'t get list_tight for non-list' unless type == :list
|
242
202
|
CMark.node_get_list_tight(@pointer)
|
243
203
|
end
|
244
204
|
|
@@ -246,18 +206,14 @@ module CommonMarker
|
|
246
206
|
# Params:
|
247
207
|
# +tight+:: New tight status (boolean).
|
248
208
|
def list_tight=(tight)
|
249
|
-
|
250
|
-
raise NodeError, "can't set list_tight for non-list"
|
251
|
-
end
|
209
|
+
fail NodeError, 'can\'t set list_tight for non-list' unless type == :list
|
252
210
|
res = CMark.node_set_list_tight(@pointer, tight)
|
253
|
-
|
211
|
+
fail NodeError, 'could not set list_tight' if res == 0
|
254
212
|
end
|
255
213
|
|
256
214
|
# Returns URL of this Node (must be a :link or :image).
|
257
215
|
def url
|
258
|
-
if
|
259
|
-
raise NodeError, "can't get URL for non-link or image"
|
260
|
-
end
|
216
|
+
fail NodeError, 'can\'t get URL for non-link or image' if !(type == :link || type == :image)
|
261
217
|
CMark.node_get_url(@pointer)
|
262
218
|
end
|
263
219
|
|
@@ -265,23 +221,17 @@ module CommonMarker
|
|
265
221
|
# Params:
|
266
222
|
# +URL+:: New URL (+String+).
|
267
223
|
def url=(url)
|
268
|
-
if
|
269
|
-
|
270
|
-
end
|
271
|
-
if !url.kind_of?(String)
|
272
|
-
raise NodeError, "url must be a String"
|
273
|
-
end
|
224
|
+
fail NodeError, 'can\'t set URL for non-link or image' if !(type == :link || type == :image)
|
225
|
+
fail NodeError, 'url must be a String' unless url.is_a?(String)
|
274
226
|
# Make our own copy so ruby won't garbage-collect it:
|
275
227
|
c_url = FFI::MemoryPointer.from_string(url)
|
276
228
|
res = CMark.node_set_url(@pointer, c_url)
|
277
|
-
|
229
|
+
fail NodeError, 'could not set header level' if res == 0
|
278
230
|
end
|
279
231
|
|
280
232
|
# Returns title of this Node (must be a :link or :image).
|
281
233
|
def title
|
282
|
-
if
|
283
|
-
raise NodeError, "can't get title for non-link or image"
|
284
|
-
end
|
234
|
+
fail NodeError, 'can\'t get title for non-link or image' if !(type == :link || type == :image)
|
285
235
|
CMark.node_get_title(@pointer)
|
286
236
|
end
|
287
237
|
|
@@ -289,23 +239,17 @@ module CommonMarker
|
|
289
239
|
# Params:
|
290
240
|
# +title+:: New title (+String+).
|
291
241
|
def title=(title)
|
292
|
-
if
|
293
|
-
|
294
|
-
end
|
295
|
-
if !title.kind_of?(String)
|
296
|
-
raise NodeError, "title must be a String"
|
297
|
-
end
|
242
|
+
fail NodeError, 'can\'t set title for non-link or image' if !(type == :link || type == :image)
|
243
|
+
fail NodeError, 'title must be a String' unless title.is_a?(String)
|
298
244
|
# Make our own copy so ruby won't garbage-collect it:
|
299
245
|
c_title = FFI::MemoryPointer.from_string(title)
|
300
246
|
res = CMark.node_set_title(@pointer, c_title)
|
301
|
-
|
247
|
+
fail NodeError, 'could not set header level' if res == 0
|
302
248
|
end
|
303
249
|
|
304
250
|
# Returns fence info of this Node (must be a :code_block).
|
305
251
|
def fence_info
|
306
|
-
|
307
|
-
raise NodeError, "can't get fence_info for non code_block"
|
308
|
-
end
|
252
|
+
fail NodeError, 'can\'t get fence_info for non code_block' unless type == :code_block
|
309
253
|
CMark.node_get_fence_info(@pointer)
|
310
254
|
end
|
311
255
|
|
@@ -313,23 +257,19 @@ module CommonMarker
|
|
313
257
|
# Params:
|
314
258
|
# +info+:: New info (+String+).
|
315
259
|
def fence_info=(info)
|
316
|
-
|
317
|
-
|
318
|
-
end
|
319
|
-
if !info.kind_of?(String)
|
320
|
-
raise NodeError, "info must be a String"
|
321
|
-
end
|
260
|
+
fail NodeError, 'can\'t set fence_info for non code_block' unless type == :code_block
|
261
|
+
fail NodeError, 'info must be a String' unless info.is_a?(String)
|
322
262
|
# Make our own copy so ruby won't garbage-collect it:
|
323
263
|
c_info = FFI::MemoryPointer.from_string(info)
|
324
264
|
res = CMark.node_set_fence_info(@pointer, c_info)
|
325
|
-
|
265
|
+
fail NodeError, 'could not set info' if res == 0
|
326
266
|
end
|
327
267
|
|
328
268
|
# An iterator that "walks the tree," descending into children
|
329
269
|
# recursively.
|
330
270
|
def walk(&blk)
|
331
271
|
yield self
|
332
|
-
|
272
|
+
each_child do |child|
|
333
273
|
child.walk(&blk)
|
334
274
|
end
|
335
275
|
end
|
@@ -343,7 +283,6 @@ module CommonMarker
|
|
343
283
|
CMark.node_get_type_string(@pointer)
|
344
284
|
end
|
345
285
|
|
346
|
-
|
347
286
|
# Convert to HTML using libcmark's fast (but uncustomizable) renderer.
|
348
287
|
def to_html(option = :default)
|
349
288
|
Config.option_exists?(option)
|
@@ -356,233 +295,4 @@ module CommonMarker
|
|
356
295
|
# CMark.node_free(@pointer)
|
357
296
|
end
|
358
297
|
end
|
359
|
-
|
360
|
-
class Renderer
|
361
|
-
attr_accessor :in_tight, :warnings, :in_plain
|
362
|
-
def initialize
|
363
|
-
@stream = StringIO.new
|
364
|
-
@need_blocksep = false
|
365
|
-
@warnings = Set.new []
|
366
|
-
@in_tight = false
|
367
|
-
@in_plain = false
|
368
|
-
end
|
369
|
-
|
370
|
-
def out(*args)
|
371
|
-
args.each do |arg|
|
372
|
-
if arg == :children
|
373
|
-
@node.each_child do |child|
|
374
|
-
self.out(child)
|
375
|
-
end
|
376
|
-
elsif arg.kind_of?(Array)
|
377
|
-
arg.each do |x|
|
378
|
-
self.render(x)
|
379
|
-
end
|
380
|
-
elsif arg.kind_of?(Node)
|
381
|
-
self.render(arg)
|
382
|
-
else
|
383
|
-
@stream.write(arg)
|
384
|
-
end
|
385
|
-
end
|
386
|
-
end
|
387
|
-
|
388
|
-
def render(node)
|
389
|
-
@node = node
|
390
|
-
if node.type == :document
|
391
|
-
self.document(node)
|
392
|
-
return @stream.string
|
393
|
-
elsif self.in_plain && node.type != :text && node.type != :softbreak
|
394
|
-
node.each_child do |child|
|
395
|
-
render(child)
|
396
|
-
end
|
397
|
-
else
|
398
|
-
begin
|
399
|
-
self.send(node.type, node)
|
400
|
-
rescue NoMethodError => e
|
401
|
-
@warnings.add("WARNING: " + node.type.to_s + " not implemented.")
|
402
|
-
raise e
|
403
|
-
end
|
404
|
-
end
|
405
|
-
end
|
406
|
-
|
407
|
-
def document(node)
|
408
|
-
self.out(:children)
|
409
|
-
end
|
410
|
-
|
411
|
-
def code_block(node)
|
412
|
-
self.code_block(node)
|
413
|
-
end
|
414
|
-
|
415
|
-
def reference_def(node)
|
416
|
-
end
|
417
|
-
|
418
|
-
def blocksep
|
419
|
-
self.out("\n")
|
420
|
-
end
|
421
|
-
|
422
|
-
def containersep
|
423
|
-
if !self.in_tight
|
424
|
-
self.out("\n")
|
425
|
-
end
|
426
|
-
end
|
427
|
-
|
428
|
-
def block(&blk)
|
429
|
-
if @need_blocksep
|
430
|
-
self.blocksep
|
431
|
-
end
|
432
|
-
blk.call
|
433
|
-
@need_blocksep = true
|
434
|
-
end
|
435
|
-
|
436
|
-
def container(starter, ender, &blk)
|
437
|
-
self.out(starter)
|
438
|
-
self.containersep
|
439
|
-
@need_blocksep = false
|
440
|
-
blk.call
|
441
|
-
self.containersep
|
442
|
-
self.out(ender)
|
443
|
-
end
|
444
|
-
|
445
|
-
def plain(&blk)
|
446
|
-
old_in_plain = @in_plain
|
447
|
-
@in_plain = true
|
448
|
-
blk.call
|
449
|
-
@in_plain = old_in_plain
|
450
|
-
end
|
451
|
-
end
|
452
|
-
|
453
|
-
class HtmlRenderer < Renderer
|
454
|
-
def render(node)
|
455
|
-
result = super(node)
|
456
|
-
if node.type == :document
|
457
|
-
result += "\n"
|
458
|
-
end
|
459
|
-
end
|
460
|
-
|
461
|
-
def header(node)
|
462
|
-
block do
|
463
|
-
self.out("<h", node.header_level, ">", :children,
|
464
|
-
"</h", node.header_level, ">")
|
465
|
-
end
|
466
|
-
end
|
467
|
-
|
468
|
-
def paragraph(node)
|
469
|
-
block do
|
470
|
-
if self.in_tight
|
471
|
-
self.out(:children)
|
472
|
-
else
|
473
|
-
self.out("<p>", :children, "</p>")
|
474
|
-
end
|
475
|
-
end
|
476
|
-
end
|
477
|
-
|
478
|
-
def list(node)
|
479
|
-
old_in_tight = self.in_tight
|
480
|
-
self.in_tight = node.list_tight
|
481
|
-
block do
|
482
|
-
if node.list_type == :bullet_list
|
483
|
-
container("<ul>", "</ul>") do
|
484
|
-
self.out(:children)
|
485
|
-
end
|
486
|
-
else
|
487
|
-
start = node.list_start == 1 ? '' :
|
488
|
-
(' start="' + node.list_start.to_s + '"')
|
489
|
-
container(start, "</ol>") do
|
490
|
-
self.out(:children)
|
491
|
-
end
|
492
|
-
end
|
493
|
-
end
|
494
|
-
self.in_tight = old_in_tight
|
495
|
-
end
|
496
|
-
|
497
|
-
def list_item(node)
|
498
|
-
block do
|
499
|
-
container("<li>", "</li>") do
|
500
|
-
self.out(:children)
|
501
|
-
end
|
502
|
-
end
|
503
|
-
end
|
504
|
-
|
505
|
-
def blockquote(node)
|
506
|
-
block do
|
507
|
-
container("<blockquote>", "</blockquote>") do
|
508
|
-
self.out(:children)
|
509
|
-
end
|
510
|
-
end
|
511
|
-
end
|
512
|
-
|
513
|
-
def hrule(node)
|
514
|
-
block do
|
515
|
-
self.out("<hr />")
|
516
|
-
end
|
517
|
-
end
|
518
|
-
|
519
|
-
def code_block(node)
|
520
|
-
block do
|
521
|
-
self.out("<pre><code")
|
522
|
-
if node.fence_info && node.fence_info.length > 0
|
523
|
-
self.out(" class=\"language-", node.fence_info.split(/\s+/)[0], "\">")
|
524
|
-
else
|
525
|
-
self.out(">")
|
526
|
-
end
|
527
|
-
self.out(CGI.escapeHTML(node.string_content))
|
528
|
-
self.out("</code></pre>")
|
529
|
-
end
|
530
|
-
end
|
531
|
-
|
532
|
-
def html(node)
|
533
|
-
block do
|
534
|
-
self.out(node.string_content)
|
535
|
-
end
|
536
|
-
end
|
537
|
-
|
538
|
-
def inline_html(node)
|
539
|
-
self.out(node.string_content)
|
540
|
-
end
|
541
|
-
|
542
|
-
def emph(node)
|
543
|
-
self.out("<em>", :children, "</em>")
|
544
|
-
end
|
545
|
-
|
546
|
-
def strong(node)
|
547
|
-
self.out("<strong>", :children, "</strong>")
|
548
|
-
end
|
549
|
-
|
550
|
-
def link(node)
|
551
|
-
self.out('<a href="', node.url.nil? ? '' : URI.escape(node.url), '"')
|
552
|
-
if node.title && node.title.length > 0
|
553
|
-
self.out(' title="', CGI.escapeHTML(node.title), '"')
|
554
|
-
end
|
555
|
-
self.out('>', :children, '</a>')
|
556
|
-
end
|
557
|
-
|
558
|
-
def image(node)
|
559
|
-
self.out('<img src="', URI.escape(node.url), '"')
|
560
|
-
if node.title && node.title.length > 0
|
561
|
-
self.out(' title="', CGI.escapeHTML(node.title), '"')
|
562
|
-
end
|
563
|
-
plain do
|
564
|
-
self.out(' alt="', :children, '" />')
|
565
|
-
end
|
566
|
-
end
|
567
|
-
|
568
|
-
def text(node)
|
569
|
-
self.out(CGI.escapeHTML(node.string_content))
|
570
|
-
end
|
571
|
-
|
572
|
-
def code(node)
|
573
|
-
self.out("<code>")
|
574
|
-
self.out(CGI.escapeHTML(node.string_content))
|
575
|
-
self.out("</code>")
|
576
|
-
end
|
577
|
-
|
578
|
-
def linebreak(node)
|
579
|
-
self.out("<br/>")
|
580
|
-
self.softbreak(node)
|
581
|
-
end
|
582
|
-
|
583
|
-
def softbreak(node)
|
584
|
-
self.out("\n")
|
585
|
-
end
|
586
|
-
end
|
587
|
-
|
588
298
|
end
|