docgenerator 2.1.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/docgenerator.rb +18 -18
- data/lib/docgenerator/characters.rb +1 -0
- data/lib/docgenerator/css.rb +5 -0
- data/lib/docgenerator/document.rb +7 -2
- data/lib/docgenerator/element.rb +2 -2
- data/lib/docgenerator/elements.rb +69 -2
- data/lib/docgenerator/index.rb +1 -1
- data/lib/docgenerator/packages/listings.rb +94 -94
- data/lib/docgenerator/packages/multicol.rb +1 -1
- data/lib/docgenerator/packages/pdfpages.rb +2 -1
- data/lib/docgenerator/packages/rubycode4doc.rb +173 -172
- data/lib/docgenerator/packages/struktex.rb +395 -379
- data/lib/docgenerator/packages/todonotes.rb +2 -2
- data/lib/docgenerator/packages/url.rb +4 -0
- data/lib/docgenerator/sections.rb +24 -2
- data/lib/docgenerator/tabular.rb +59 -14
- data/lib/docgenerator/templates/docgenerator_template.rb +1 -0
- data/lib/docgenerator/templates/docgenerator_template.yaml +30 -1
- data/lib/docgenerator/version.rb +13 -1
- data/meta_test_and_doc/build__meta.rb +3 -10
- data/meta_test_and_doc/build_doc.rb +4 -2
- data/meta_test_and_doc/build_test.rb +21 -17
- data/meta_test_and_doc/manpages/images.rb +152 -0
- data/unittest/expected/test_document_toc_article.latex +6 -6
- data/unittest/expected_struktex/test_struktex_krug.creole +5 -5
- data/unittest/expected_struktex/test_struktex_krug.wiki +5 -5
- data/unittest/expected_struktex/test_struktex_statement.creole +4 -4
- data/unittest/expected_struktex/test_struktex_statement.wiki +4 -4
- data/unittest/expected_templates/test_report_utf8.tex +34 -0
- data/unittest/expected_templates/test_standalone.tex +2 -1
- data/unittest/unittest_docgenerator.rb +37 -30
- data/unittest/unittest_docgenerator_characters.rb +113 -60
- data/unittest/unittest_docgenerator_runtex.rb +16 -12
- data/unittest/unittest_packages_multicol.rb +4 -9
- data/unittest/unittest_packages_struktex.rb +66 -90
- data/unittest/unittest_rubycode4doc.rb +38 -241
- data/unittest/unittest_templates.rb +4 -8
- metadata +23 -560
- data/examples/creole_example.rb +0 -81
- data/examples/creole_example_footnote.rb +0 -67
- data/examples/creole_example_new_plugin.rb +0 -51
- data/examples/creole_example_placeholder.rb +0 -77
- data/examples/creole_example_rail.rb +0 -154
- data/examples/creole_example_rubycode.rb +0 -144
- data/examples/creole_example_struktex.rb +0 -169
- data/examples/creole_example_tabular.rb +0 -97
- data/examples/wiki2docgenerator_example.rb +0 -299
- data/lib/creole/creole2doc.rb +0 -954
- data/lib/creole/creole_characters.rb +0 -120
- data/lib/creole/creole_inclusion_and_plugins.rb +0 -96
- data/lib/creole/creole_inclusions.rb +0 -154
- data/lib/creole/creole_placeholder.rb +0 -171
- data/lib/creole/creole_plugins.rb +0 -230
- data/lib/creole/creole_tabular.rb +0 -401
- data/lib/creole/plugins/rail.rb +0 -181
- data/lib/creole/plugins/rubycode4creole.rb +0 -136
- data/lib/creole/plugins/struktex.rb +0 -59
- data/lib/creole/plugins/todonotes.rb +0 -77
- data/lib/wiki2doc/plugins/rubycode4wiki.rb +0 -53
- data/lib/wiki2doc/plugins/struktex.rb +0 -12
- data/lib/wiki2doc/wiki2docgenerator.rb +0 -1276
- data/lib/wiki2doc/wikimedia_document.rb +0 -24
- data/meta_test_and_doc/manpages/packages.rb +0 -13
- data/unittest/Red_Flower.jpg +0 -0
- data/unittest/creole1.0test.txt +0 -128
- data/unittest/creole_testtext.creole +0 -11
- data/unittest/expected_creole/test_creole.html +0 -3
- data/unittest/expected_creole/test_creole_characters_all.creole +0 -28
- data/unittest/expected_creole/test_creole_characters_all.html +0 -18
- data/unittest/expected_creole/test_creole_characters_all.latex +0 -36
- data/unittest/expected_creole/test_creole_characters_special.html +0 -10
- data/unittest/expected_creole/test_creole_characters_special.latex +0 -18
- data/unittest/expected_creole/test_creole_comment.context +0 -11
- data/unittest/expected_creole/test_creole_comment.creole +0 -12
- data/unittest/expected_creole/test_creole_comment.html +0 -9
- data/unittest/expected_creole/test_creole_comment.latex +0 -11
- data/unittest/expected_creole/test_creole_countdown.html +0 -3
- data/unittest/expected_creole/test_creole_countdown.latex +0 -4
- data/unittest/expected_creole/test_creole_creole1.0test.html +0 -182
- data/unittest/expected_creole/test_creole_creole1.0test.latex +0 -253
- data/unittest/expected_creole/test_creole_creole1.0test.text +0 -160
- data/unittest/expected_creole/test_creole_footnotes.html +0 -9
- data/unittest/expected_creole/test_creole_footnotes.latex +0 -14
- data/unittest/expected_creole/test_creole_footnotes_groupid.html +0 -15
- data/unittest/expected_creole/test_creole_footnotes_label.html +0 -9
- data/unittest/expected_creole/test_creole_headings.html +0 -17
- data/unittest/expected_creole/test_creole_headings.latex +0 -19
- data/unittest/expected_creole/test_creole_headings.text +0 -48
- data/unittest/expected_creole/test_creole_headings.wiki +0 -37
- data/unittest/expected_creole/test_creole_hr.html +0 -7
- data/unittest/expected_creole/test_creole_hr.latex +0 -9
- data/unittest/expected_creole/test_creole_hr.text +0 -4
- data/unittest/expected_creole/test_creole_ignore.html +0 -3
- data/unittest/expected_creole/test_creole_ignore.latex +0 -4
- data/unittest/expected_creole/test_creole_ignore.text +0 -2
- data/unittest/expected_creole/test_creole_inline.html +0 -3
- data/unittest/expected_creole/test_creole_inline.latex +0 -4
- data/unittest/expected_creole/test_creole_inline.text +0 -2
- data/unittest/expected_creole/test_creole_inline_apostroph.html +0 -6
- data/unittest/expected_creole/test_creole_inline_apostroph.latex +0 -8
- data/unittest/expected_creole/test_creole_inline_apostroph.text +0 -4
- data/unittest/expected_creole/test_creole_inline_ruby.html +0 -12
- data/unittest/expected_creole/test_creole_inline_ruby.latex +0 -20
- data/unittest/expected_creole/test_creole_inline_ruby_raw.html +0 -6
- data/unittest/expected_creole/test_creole_inline_ruby_raw.latex +0 -8
- data/unittest/expected_creole/test_creole_input.normsource +0 -25
- data/unittest/expected_creole/test_creole_input.normsource_1.8 +0 -23
- data/unittest/expected_creole/test_creole_input_file_simple.html +0 -15
- data/unittest/expected_creole/test_creole_input_file_simple_readlines.html +0 -15
- data/unittest/expected_creole/test_creole_label.html +0 -12
- data/unittest/expected_creole/test_creole_label.latex +0 -15
- data/unittest/expected_creole/test_creole_line_break.html +0 -6
- data/unittest/expected_creole/test_creole_line_break.latex +0 -8
- data/unittest/expected_creole/test_creole_links_explicit_internal.html +0 -6
- data/unittest/expected_creole/test_creole_links_explicit_internal.text +0 -4
- data/unittest/expected_creole/test_creole_links_explicit_with_em.html +0 -3
- data/unittest/expected_creole/test_creole_links_explicit_with_em.latex +0 -4
- data/unittest/expected_creole/test_creole_links_explicit_with_em.text +0 -2
- data/unittest/expected_creole/test_creole_links_external.html +0 -6
- data/unittest/expected_creole/test_creole_links_external.latex +0 -8
- data/unittest/expected_creole/test_creole_links_external.text +0 -4
- data/unittest/expected_creole/test_creole_links_external_implicit.html +0 -9
- data/unittest/expected_creole/test_creole_links_external_implicit.latex +0 -12
- data/unittest/expected_creole/test_creole_links_external_implicit.text +0 -6
- data/unittest/expected_creole/test_creole_links_file.html +0 -6
- data/unittest/expected_creole/test_creole_links_file.latex +0 -8
- data/unittest/expected_creole/test_creole_links_file.text +0 -4
- data/unittest/expected_creole/test_creole_links_implicit_end.creole +0 -4
- data/unittest/expected_creole/test_creole_links_implicit_end.html +0 -3
- data/unittest/expected_creole/test_creole_links_implicit_end.latex +0 -4
- data/unittest/expected_creole/test_creole_list_ol.html +0 -12
- data/unittest/expected_creole/test_creole_list_ol.latex +0 -22
- data/unittest/expected_creole/test_creole_list_ol_after_ul.html +0 -12
- data/unittest/expected_creole/test_creole_list_ol_after_ul.latex +0 -20
- data/unittest/expected_creole/test_creole_list_ol_after_ul.text +0 -6
- data/unittest/expected_creole/test_creole_list_ol_ul.html +0 -15
- data/unittest/expected_creole/test_creole_list_ol_ul.latex +0 -26
- data/unittest/expected_creole/test_creole_list_ul.html +0 -22
- data/unittest/expected_creole/test_creole_list_ul.latex +0 -40
- data/unittest/expected_creole/test_creole_list_ul.normsource +0 -89
- data/unittest/expected_creole/test_creole_list_ul.normsource_1.8 +0 -83
- data/unittest/expected_creole/test_creole_list_ul_too_much.html +0 -24
- data/unittest/expected_creole/test_creole_list_ul_too_much.latex +0 -44
- data/unittest/expected_creole/test_creole_list_ulul_without_ul.html +0 -6
- data/unittest/expected_creole/test_creole_list_ulul_without_ul.latex +0 -12
- data/unittest/expected_creole/test_creole_mix_titles_list.html +0 -10
- data/unittest/expected_creole/test_creole_mix_titles_list.latex +0 -18
- data/unittest/expected_creole/test_creole_mix_titles_list.text +0 -12
- data/unittest/expected_creole/test_creole_newline.html +0 -9
- data/unittest/expected_creole/test_creole_newline.latex +0 -11
- data/unittest/expected_creole/test_creole_newline.text +0 -7
- data/unittest/expected_creole/test_creole_paragraphs.html +0 -6
- data/unittest/expected_creole/test_creole_paragraphs.latex +0 -8
- data/unittest/expected_creole/test_creole_paragraphs.normsource +0 -29
- data/unittest/expected_creole/test_creole_paragraphs.normsource_1.8 +0 -27
- data/unittest/expected_creole/test_creole_paragraphs.text +0 -4
- data/unittest/expected_creole/test_creole_paragraphs.wiki +0 -4
- data/unittest/expected_creole/test_creole_paragraphs_wrap.html +0 -5
- data/unittest/expected_creole/test_creole_paragraphs_wrap.latex +0 -6
- data/unittest/expected_creole/test_creole_paragraphs_wrap.text +0 -4
- data/unittest/expected_creole/test_creole_paragraphs_wrap.wiki +0 -4
- data/unittest/expected_creole/test_creole_paragraphs_wrap0.html +0 -9
- data/unittest/expected_creole/test_creole_paragraphs_wrap0.latex +0 -11
- data/unittest/expected_creole/test_creole_paragraphs_wrap0.text +0 -7
- data/unittest/expected_creole/test_creole_paragraphs_wrap0.wiki +0 -7
- data/unittest/expected_creole/test_creole_paragraphs_wrap60.html +0 -5
- data/unittest/expected_creole/test_creole_paragraphs_wrap60.latex +0 -6
- data/unittest/expected_creole/test_creole_paragraphs_wrap60.text +0 -4
- data/unittest/expected_creole/test_creole_paragraphs_wrap60.wiki +0 -4
- data/unittest/expected_creole/test_creole_picture_link.html +0 -6
- data/unittest/expected_creole/test_creole_pictures.html +0 -10
- data/unittest/expected_creole/test_creole_pictures.latex +0 -13
- data/unittest/expected_creole/test_creole_pictures_css.html +0 -6
- data/unittest/expected_creole/test_creole_pictures_css.latex +0 -8
- data/unittest/expected_creole/test_creole_pictures_imgclass.html +0 -6
- data/unittest/expected_creole/test_creole_pictures_imgclass.latex +0 -8
- data/unittest/expected_creole/test_creole_pictures_longdesc.html +0 -3
- data/unittest/expected_creole/test_creole_pictures_width.html +0 -3
- data/unittest/expected_creole/test_creole_pictures_width.latex +0 -4
- data/unittest/expected_creole/test_creole_placeholders_html.html +0 -7
- data/unittest/expected_creole/test_creole_placeholders_html.latex +0 -8
- data/unittest/expected_creole/test_creole_placeholders_html.text +0 -4
- data/unittest/expected_creole/test_creole_placeholders_latex.html +0 -6
- data/unittest/expected_creole/test_creole_placeholders_latex.latex +0 -9
- data/unittest/expected_creole/test_creole_placeholders_latex.text +0 -4
- data/unittest/expected_creole/test_creole_short_html.html +0 -3
- data/unittest/expected_creole/test_creole_short_html.latex +0 -4
- data/unittest/expected_creole/test_creole_short_html.text +0 -2
- data/unittest/expected_creole/test_creole_shy.creole +0 -6
- data/unittest/expected_creole/test_creole_shy.html +0 -6
- data/unittest/expected_creole/test_creole_shy.latex +0 -8
- data/unittest/expected_creole/test_creole_shy.text +0 -4
- data/unittest/expected_creole/test_creole_tabular.creole +0 -22
- data/unittest/expected_creole/test_creole_tabular.html +0 -20
- data/unittest/expected_creole/test_creole_tabular.latex +0 -22
- data/unittest/expected_creole/test_creole_tabular_creole.creole +0 -19
- data/unittest/expected_creole/test_creole_tabular_creole.html +0 -18
- data/unittest/expected_creole/test_creole_tabular_creole.latex +0 -19
- data/unittest/expected_creole/test_creole_tabular_css.creole +0 -24
- data/unittest/expected_creole/test_creole_tabular_css.html +0 -20
- data/unittest/expected_creole/test_creole_tabular_css.latex +0 -22
- data/unittest/expected_creole/test_creole_tabular_multicols.creole +0 -16
- data/unittest/expected_creole/test_creole_tabular_multicols.html +0 -14
- data/unittest/expected_creole/test_creole_tabular_multicols.latex +0 -16
- data/unittest/expected_creole/test_creole_tabular_row_parameters.latex +0 -22
- data/unittest/expected_creole/test_creole_tabular_with_cell_option.creole +0 -21
- data/unittest/expected_creole/test_creole_tabular_with_cell_option.html +0 -20
- data/unittest/expected_creole/test_creole_toc.html +0 -13
- data/unittest/expected_creole/test_creole_toc.latex +0 -22
- data/unittest/expected_creole/test_creole_toc.text +0 -4
- data/unittest/expected_creole/test_creole_toc_level.html +0 -7
- data/unittest/expected_creole/test_creole_toc_level.latex +0 -10
- data/unittest/expected_creole/test_creole_toc_level.text +0 -3
- data/unittest/expected_creole/test_creole_toc_level_text.html +0 -8
- data/unittest/expected_creole/test_creole_toc_level_text.latex +0 -9
- data/unittest/expected_creole/test_creole_toc_text.html +0 -5
- data/unittest/expected_creole/test_creole_toc_text.latex +0 -5
- data/unittest/expected_creole/test_creole_ul_multiple_line.html +0 -7
- data/unittest/expected_creole/test_creole_ul_multiple_line.latex +0 -14
- data/unittest/expected_creole/test_creole_ul_with_blank.html +0 -11
- data/unittest/expected_creole/test_creole_ul_with_blank.latex +0 -20
- data/unittest/expected_creole/test_creole_ul_with_bold.creole +0 -0
- data/unittest/expected_creole/test_creole_ul_with_bold.html +0 -11
- data/unittest/expected_creole/test_creole_ul_with_bold.latex +0 -18
- data/unittest/expected_creole/test_creole_ul_with_bold.text +0 -7
- data/unittest/expected_creole/test_creole_verbatim.html +0 -25
- data/unittest/expected_creole/test_creole_verbatim.latex +0 -33
- data/unittest/expected_creole/test_creole_verbatim.text +0 -17
- data/unittest/expected_creole/test_creole_verbatim_inline.html +0 -6
- data/unittest/expected_creole/test_creole_verbatim_inline.latex +0 -8
- data/unittest/expected_creole/test_creole_verbatim_inline_at_start.html +0 -6
- data/unittest/expected_creole/test_creole_verbatim_inline_at_start.latex +0 -8
- data/unittest/expected_creole_rail/test_rail_creole_object.tex +0 -33
- data/unittest/expected_creole_rail/test_rail_creole_placeholder.tex +0 -40
- data/unittest/expected_rubycode4doc/creole_complete.html +0 -26
- data/unittest/expected_rubycode4doc/creole_complete.tex +0 -40
- data/unittest/expected_rubycode4doc/creole_in_tab.html +0 -4
- data/unittest/expected_rubycode4doc/creole_in_tab.tex +0 -6
- data/unittest/expected_rubycode4doc/creole_inline_ruby.html +0 -7
- data/unittest/expected_rubycode4doc/creole_output.html +0 -2
- data/unittest/expected_rubycode4doc/creole_output.tex +0 -4
- data/unittest/expected_rubycode4doc/creole_rubycode.html +0 -1
- data/unittest/expected_rubycode4doc/creole_rubycode.tex +0 -3
- data/unittest/expected_rubycode4doc/creole_rubycode_evaluated.html +0 -1
- data/unittest/expected_rubycode4doc/creole_rubycode_evaluated.tex +0 -3
- data/unittest/expected_rubycode4doc/creole_rubycode_evaluated_listings.html +0 -3
- data/unittest/expected_rubycode4doc/creole_rubycode_evaluated_listings.tex +0 -5
- data/unittest/expected_rubycode4doc/wiki_1.html +0 -8
- data/unittest/expected_rubycode4doc/wiki_2.html +0 -8
- data/unittest/expected_rubycode4doc/wiki_3.html +0 -9
- data/unittest/expected_rubycode4doc/wiki_immediate_1.html +0 -5
- data/unittest/expected_rubycode4doc/wiki_immediate_2.html +0 -5
- data/unittest/expected_rubycode4doc/wiki_immediate_3.html +0 -8
- data/unittest/expected_rubycode4doc/wiki_immediate_full.html +0 -21
- data/unittest/expected_wikimedia/test_wiki.html +0 -6
- data/unittest/expected_wikimedia/test_wiki.latex +0 -12
- data/unittest/expected_wikimedia/test_wiki.text +0 -14
- data/unittest/expected_wikimedia/test_wiki.wiki +0 -12
- data/unittest/expected_wikimedia/test_wiki_description.html +0 -7
- data/unittest/expected_wikimedia/test_wiki_description.latex +0 -11
- data/unittest/expected_wikimedia/test_wiki_description.text +0 -6
- data/unittest/expected_wikimedia/test_wiki_description.wiki +0 -6
- data/unittest/expected_wikimedia/test_wiki_footnote.html +0 -8
- data/unittest/expected_wikimedia/test_wiki_footnote.latex +0 -17
- data/unittest/expected_wikimedia/test_wiki_footnote.text +0 -10
- data/unittest/expected_wikimedia/test_wiki_footnote.wiki +0 -10
- data/unittest/expected_wikimedia/test_wiki_footnote_2.html +0 -8
- data/unittest/expected_wikimedia/test_wiki_footnote_groupid.html +0 -21
- data/unittest/expected_wikimedia/test_wiki_html_code.html +0 -7
- data/unittest/expected_wikimedia/test_wiki_html_code.latex +0 -10
- data/unittest/expected_wikimedia/test_wiki_html_code.text +0 -6
- data/unittest/expected_wikimedia/test_wiki_html_code.wiki +0 -6
- data/unittest/expected_wikimedia/test_wiki_inline.html +0 -6
- data/unittest/expected_wikimedia/test_wiki_inline.latex +0 -12
- data/unittest/expected_wikimedia/test_wiki_inline.text +0 -8
- data/unittest/expected_wikimedia/test_wiki_inline.wiki +0 -8
- data/unittest/expected_wikimedia/test_wiki_label.html +0 -6
- data/unittest/expected_wikimedia/test_wiki_link.html +0 -8
- data/unittest/expected_wikimedia/test_wiki_link.latex +0 -17
- data/unittest/expected_wikimedia/test_wiki_link.wiki +0 -11
- data/unittest/expected_wikimedia/test_wiki_list_ol.html +0 -24
- data/unittest/expected_wikimedia/test_wiki_list_ol.latex +0 -30
- data/unittest/expected_wikimedia/test_wiki_list_ol.text +0 -10
- data/unittest/expected_wikimedia/test_wiki_list_ol.wiki +0 -12
- data/unittest/expected_wikimedia/test_wiki_list_ol_after_ul.html +0 -16
- data/unittest/expected_wikimedia/test_wiki_list_ol_after_ul.latex +0 -24
- data/unittest/expected_wikimedia/test_wiki_list_ol_after_ul.text +0 -8
- data/unittest/expected_wikimedia/test_wiki_list_ol_after_ul.wiki +0 -10
- data/unittest/expected_wikimedia/test_wiki_list_ol_ul.html +0 -24
- data/unittest/expected_wikimedia/test_wiki_list_ol_ul.latex +0 -30
- data/unittest/expected_wikimedia/test_wiki_list_ol_ul.text +0 -10
- data/unittest/expected_wikimedia/test_wiki_list_ol_ul.wiki +0 -12
- data/unittest/expected_wikimedia/test_wiki_list_ul.html +0 -24
- data/unittest/expected_wikimedia/test_wiki_list_ul.latex +0 -30
- data/unittest/expected_wikimedia/test_wiki_list_ul.text +0 -10
- data/unittest/expected_wikimedia/test_wiki_list_ul.wiki +0 -12
- data/unittest/expected_wikimedia/test_wiki_list_ul_too_much.html +0 -39
- data/unittest/expected_wikimedia/test_wiki_list_ul_too_much.latex +0 -51
- data/unittest/expected_wikimedia/test_wiki_list_ul_too_much.text +0 -11
- data/unittest/expected_wikimedia/test_wiki_list_ul_too_much.wiki +0 -15
- data/unittest/expected_wikimedia/test_wiki_picture.html +0 -55
- data/unittest/expected_wikimedia/test_wiki_picture.latex +0 -76
- data/unittest/expected_wikimedia/test_wiki_picture_thumb.html +0 -5
- data/unittest/expected_wikimedia/test_wiki_tab1.html +0 -30
- data/unittest/expected_wikimedia/test_wiki_tab1.latex +0 -30
- data/unittest/expected_wikimedia/test_wiki_tab1.wiki +0 -29
- data/unittest/expected_wikimedia/test_wiki_textformatting.html +0 -7
- data/unittest/expected_wikimedia/test_wiki_textformatting.latex +0 -16
- data/unittest/expected_wikimedia/test_wiki_textformatting.text +0 -11
- data/unittest/expected_wikimedia/test_wiki_textformatting.wiki +0 -9
- data/unittest/expected_wikimedia/test_wiki_toc.html +0 -9
- data/unittest/expected_wikimedia/test_wiki_toc.latex +0 -18
- data/unittest/expected_wikimedia/test_wiki_toc.text +0 -21
- data/unittest/expected_wikimedia/test_wiki_toc.wiki +0 -18
- data/unittest/expected_wikimedia/test_wiki_ul_multiple_line.html +0 -18
- data/unittest/expected_wikimedia/test_wiki_ul_multiple_line.latex +0 -19
- data/unittest/expected_wikimedia/test_wiki_ul_multiple_line.text +0 -6
- data/unittest/expected_wikimedia/test_wiki_ul_multiple_line.wiki +0 -7
- data/unittest/unittest_creole.rb +0 -1361
- data/unittest/unittest_creole_placeholders.rb +0 -150
- data/unittest/unittest_creole_plugin_rail.rb +0 -147
- data/unittest/unittest_creole_tabular.rb +0 -207
- data/unittest/unittest_wikimedia.rb +0 -479
data/lib/creole/creole2doc.rb
DELETED
|
@@ -1,954 +0,0 @@
|
|
|
1
|
-
#encoding: utf-8
|
|
2
|
-
=begin rdoc
|
|
3
|
-
This is a Creole-to-Docgenerator converter.
|
|
4
|
-
The Docgenerator-data can be exported as
|
|
5
|
-
- HTML
|
|
6
|
-
- LaTeX
|
|
7
|
-
- Creole
|
|
8
|
-
- Wikimedia-like wiki
|
|
9
|
-
- Plain text
|
|
10
|
-
|
|
11
|
-
For another Creole-to-XHTML converter see
|
|
12
|
-
https://rubyforge.org/projects/wikicreole/
|
|
13
|
-
|
|
14
|
-
More about creole at http://www.wikicreole.org/
|
|
15
|
-
=end
|
|
16
|
-
|
|
17
|
-
$:.unshift("..") if $0 == __FILE__ #for test purposes.
|
|
18
|
-
require 'docgenerator'
|
|
19
|
-
|
|
20
|
-
module Docgenerator
|
|
21
|
-
|
|
22
|
-
=begin rdoc
|
|
23
|
-
Collect the classes to handle Creole-input.
|
|
24
|
-
|
|
25
|
-
More about creole at http://www.wikicreole.org/
|
|
26
|
-
=end
|
|
27
|
-
module Creole
|
|
28
|
-
|
|
29
|
-
=begin rdoc
|
|
30
|
-
Some class definitions for the Creole-class.
|
|
31
|
-
=end
|
|
32
|
-
class Creole
|
|
33
|
-
|
|
34
|
-
#Little structure to store the parsing result.
|
|
35
|
-
Creole_line = Struct.new('Creole_line', :type, :content, :add_info)
|
|
36
|
-
|
|
37
|
-
#Hash with Characters.
|
|
38
|
-
#This characters will be converted into elements.
|
|
39
|
-
CHARACTERS = {
|
|
40
|
-
'%' => element(:'%'),
|
|
41
|
-
'$' => element(:'$'),
|
|
42
|
-
'&' => element(:ampersand),
|
|
43
|
-
'->' => element(:rightarrow),
|
|
44
|
-
'=>' => element(:Rightarrow),
|
|
45
|
-
'<-' => element(:leftarrow),
|
|
46
|
-
'<=' => element(:Leftarrow),
|
|
47
|
-
'_' => element(:underscore),
|
|
48
|
-
'…' => element(:ldots),
|
|
49
|
-
'‚' => element(:sbquo), # einfaches low-9-Zeichen, U+201A , ‚
|
|
50
|
-
'’' => element(:rsquo), #'zu ’
|
|
51
|
-
'„' => element(:bdquo), #"auf „ #bottom double quote
|
|
52
|
-
'“' => element(:ldquo), #"zu “ #left double quote
|
|
53
|
-
'”' => element(:rdquo), #right double quote
|
|
54
|
-
'–' => element(:ndash), # –
|
|
55
|
-
'—' => element(:mdash), # –
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
=begin rdoc
|
|
59
|
-
Add a quick online-help.
|
|
60
|
-
=end
|
|
61
|
-
def self.help( option = :syntax)
|
|
62
|
-
hlp = []
|
|
63
|
-
hlp << "==Creole help #{option}"
|
|
64
|
-
case option
|
|
65
|
-
when :syntax
|
|
66
|
-
hlp << <<Syntax
|
|
67
|
-
Headings:
|
|
68
|
-
= Level 1 (largest) =
|
|
69
|
-
== Level 2 ==
|
|
70
|
-
see also Creole.help(:headings)
|
|
71
|
-
|
|
72
|
-
Bold And Italics:
|
|
73
|
-
** Bold
|
|
74
|
-
// Italics
|
|
75
|
-
You can close them. If not, the markup end with the paragraph.
|
|
76
|
-
|
|
77
|
-
Links: See Creole.help(:links)
|
|
78
|
-
|
|
79
|
-
Coming from Wikimedia/wiki2docgenerator? Check Creole.help(:wikimedia)
|
|
80
|
-
Familiar with Creole? Check Creole.help(:creole) for differences.
|
|
81
|
-
Syntax
|
|
82
|
-
when :creole
|
|
83
|
-
hlp << <<creole
|
|
84
|
-
creole2doc has some special features:
|
|
85
|
-
*headings allows labels ([key] direct after the =)
|
|
86
|
-
*line breaks are ignored, the text is wrapped.
|
|
87
|
-
(you can set it off with option :wrap_at => 0)
|
|
88
|
-
creole
|
|
89
|
-
when :wikimedia
|
|
90
|
-
hlp << <<tripfalls
|
|
91
|
-
Main Trippfalls when you used wiki2docgenerator before:
|
|
92
|
-
|
|
93
|
-
Lists: You need an empty line after a list.
|
|
94
|
-
#Listentry 2
|
|
95
|
-
|
|
96
|
-
Text afterwords
|
|
97
|
-
tripfalls
|
|
98
|
-
when :headings
|
|
99
|
-
hlp << <<headings
|
|
100
|
-
Headings:
|
|
101
|
-
= Level 1 (largest) =
|
|
102
|
-
== Level 2 ==
|
|
103
|
-
=== Level 3 ===
|
|
104
|
-
==== Level 4 ====
|
|
105
|
-
===== Level 5 =====
|
|
106
|
-
====== Level 6 ======
|
|
107
|
-
=== Also level 3
|
|
108
|
-
=== Also level 3 =
|
|
109
|
-
=== Also level 3 ==
|
|
110
|
-
=== **not** //parsed// ===
|
|
111
|
-
Headings with label:
|
|
112
|
-
=[lev1] Level 1 (largest) =
|
|
113
|
-
==[lev1.1] Level 2 ==
|
|
114
|
-
|
|
115
|
-
The content is not parsed.
|
|
116
|
-
Details see http://www.wikicreole.org/wiki/Headings
|
|
117
|
-
headings
|
|
118
|
-
when :links
|
|
119
|
-
hlp << <<links
|
|
120
|
-
Explicit:
|
|
121
|
-
* [[http://ruby.lickert.net/docgenerator]]
|
|
122
|
-
* [[http://ruby.lickert.net/docgenerator|Details on docgenerator.rb]]
|
|
123
|
-
|
|
124
|
-
Implicit:
|
|
125
|
-
* http://ruby.lickert.net/docgenerator
|
|
126
|
-
links
|
|
127
|
-
when :tabular
|
|
128
|
-
hlp << <<tabular
|
|
129
|
-
Wikimedia-like syntax:
|
|
130
|
-
<<<tabular
|
|
131
|
-
|!columns=3
|
|
132
|
-
|!columndescription=ccc
|
|
133
|
-
|=1
|
|
134
|
-
|=2
|
|
135
|
-
|=3
|
|
136
|
-
|-
|
|
137
|
-
|eins
|
|
138
|
-
|zwei
|
|
139
|
-
|drei
|
|
140
|
-
|-
|
|
141
|
-
|one
|
|
142
|
-
|two
|
|
143
|
-
|three
|
|
144
|
-
>>>
|
|
145
|
-
tabular
|
|
146
|
-
else
|
|
147
|
-
hlp << "Undefined help for #{option.inspect}"
|
|
148
|
-
end
|
|
149
|
-
return hlp.join("\n")
|
|
150
|
-
end
|
|
151
|
-
end #Creole
|
|
152
|
-
|
|
153
|
-
#Load sub-classes.
|
|
154
|
-
#~ Dir.chdir(File.dirname(__FILE__)){
|
|
155
|
-
require_relative 'creole_placeholder.rb'
|
|
156
|
-
require_relative 'creole_tabular.rb'
|
|
157
|
-
require_relative 'creole_inclusion_and_plugins.rb'
|
|
158
|
-
#~ begin require 'privat/creole_affiliate.rb'; rescue LoadError; end #Just some privat extension
|
|
159
|
-
|
|
160
|
-
require 'log4r'
|
|
161
|
-
|
|
162
|
-
=begin rdoc
|
|
163
|
-
Build a document.
|
|
164
|
-
This is just a little combination of the classes Document and Creole.
|
|
165
|
-
|
|
166
|
-
For the future: This class could allow features t build one TeX-file and
|
|
167
|
-
multiple HTML (corresponding to pages).
|
|
168
|
-
|
|
169
|
-
HTML-pagebreak could be forced with ======== or something similar.
|
|
170
|
-
=end
|
|
171
|
-
class Creole_document
|
|
172
|
-
|
|
173
|
-
=begin rdoc
|
|
174
|
-
Define a creole document. The settings are forwarded to Document#new()
|
|
175
|
-
|
|
176
|
-
Some settings are used only directly in Creole_document.
|
|
177
|
-
- :with_toc: Add a table of contents at the beginning of the document.
|
|
178
|
-
- :content: Wiki-text. Same as Creole_document#<<
|
|
179
|
-
- :logname: Name for Creole#log
|
|
180
|
-
=end
|
|
181
|
-
def initialize( settings = {} )
|
|
182
|
-
@with_toc = settings[:with_toc ]
|
|
183
|
-
settings.delete(:with_toc) #Avoid error message in Document.new
|
|
184
|
-
settings[:logname] ||= 'CreoleDoc' #Just a name for easier debugging/logging
|
|
185
|
-
|
|
186
|
-
@creole = Creole.new(
|
|
187
|
-
#Get content if available and delete setting to avoid error message in Document.new
|
|
188
|
-
:logname => settings.delete(:logname), #for logger
|
|
189
|
-
:content => settings.delete(:content),
|
|
190
|
-
:ignore => settings.delete(:ignore),
|
|
191
|
-
:targetdir => settings.delete(:targetdir)
|
|
192
|
-
)
|
|
193
|
-
#fixme/ideen parameter
|
|
194
|
-
#preamble -> vor wiki-texten
|
|
195
|
-
#post -> nach wiki-texten
|
|
196
|
-
|
|
197
|
-
@doc = Document.new(settings)
|
|
198
|
-
|
|
199
|
-
@doc.runtex = settings[:runtex] if settings[:runtex]
|
|
200
|
-
|
|
201
|
-
@log = @doc.log
|
|
202
|
-
|
|
203
|
-
@doc.body << creole
|
|
204
|
-
|
|
205
|
-
end
|
|
206
|
-
#The related document
|
|
207
|
-
attr_reader :doc
|
|
208
|
-
#The related creole-object
|
|
209
|
-
attr_reader :creole
|
|
210
|
-
#Add content to the wiki.
|
|
211
|
-
def << (content)
|
|
212
|
-
@creole << content
|
|
213
|
-
end
|
|
214
|
-
=begin rdoc
|
|
215
|
-
Save the creole document.
|
|
216
|
-
|
|
217
|
-
If requested, the tableofcontents is added.
|
|
218
|
-
The first Creole_document#save decides, which variant is added (html/tex)
|
|
219
|
-
=end
|
|
220
|
-
def save( filename, options = {} )
|
|
221
|
-
if @with_toc
|
|
222
|
-
@doc.body.insertbefore(creole, element(:htmlonly,{}, creole.toc(:level => @with_toc )))
|
|
223
|
-
@doc.body.insertbefore(creole, element(:latexonly,{},element(:tableofcontents).cr))
|
|
224
|
-
case @with_toc
|
|
225
|
-
when Numeric
|
|
226
|
-
@doc.head << element(:latexonly,{},"\\setcounter{tocdepth}{#{@with_toc}}\n")
|
|
227
|
-
end
|
|
228
|
-
@with_toc = false #Add it only once
|
|
229
|
-
end #@with_toc
|
|
230
|
-
|
|
231
|
-
@doc.save(filename, options )
|
|
232
|
-
end
|
|
233
|
-
#Use runtex if available.
|
|
234
|
-
def runtex=(option)
|
|
235
|
-
@doc.runtex = option
|
|
236
|
-
end
|
|
237
|
-
end
|
|
238
|
-
=begin rdoc
|
|
239
|
-
Creole is a standard wiki-syntax for wikitexts.
|
|
240
|
-
Definition see http://www.wikicreole.org
|
|
241
|
-
|
|
242
|
-
I liked this definition.
|
|
243
|
-
When you look at the website, you get a definition and
|
|
244
|
-
you get an explanation, why it is like this. - great!
|
|
245
|
-
|
|
246
|
-
This class gets a creole-text and translate it to elements of the docgenerator,
|
|
247
|
-
they can be used by Document or directly like Element#to_doc.
|
|
248
|
-
|
|
249
|
-
Example:
|
|
250
|
-
wiki = Creole.new()
|
|
251
|
-
wiki << <<txt
|
|
252
|
-
=Test document
|
|
253
|
-
This is a little test text with **bold** and //italic// text.
|
|
254
|
-
txt
|
|
255
|
-
wiki.to_latex()
|
|
256
|
-
|
|
257
|
-
Often I use it in combination with "Here"-Documents with __END__:
|
|
258
|
-
|
|
259
|
-
require 'creole/creole2doc'
|
|
260
|
-
|
|
261
|
-
doc = Creole_document.new()
|
|
262
|
-
doc << DATA
|
|
263
|
-
doc.save('test.html')
|
|
264
|
-
__ END__
|
|
265
|
-
Content
|
|
266
|
-
--
|
|
267
|
-
Im Code beispiel steht __<space>END__
|
|
268
|
-
Würde dort __END__ stehen, hätte rdoc einen Fehler.
|
|
269
|
-
++
|
|
270
|
-
=end
|
|
271
|
-
class Creole
|
|
272
|
-
class << Creole
|
|
273
|
-
#Define a default for targetdir-option in Creole.new.
|
|
274
|
-
attr_accessor :targetdir
|
|
275
|
-
end
|
|
276
|
-
|
|
277
|
-
=begin rdoc
|
|
278
|
-
Define the Creole-object.
|
|
279
|
-
|
|
280
|
-
Options:
|
|
281
|
-
* :log => Logger to catch information.
|
|
282
|
-
|
|
283
|
-
Alternativ you have access to the default logger via Creole#log
|
|
284
|
-
* :targetdir => directory, where you want to save the result.
|
|
285
|
-
|
|
286
|
-
This directory is important for checks for internal links.
|
|
287
|
-
|
|
288
|
-
You may change the default '.' with
|
|
289
|
-
Docgenerator::Creole::Creole.targetdir = 'mysubdir'
|
|
290
|
-
* :ignore: A regex describing parts to be ignored during text parsing. e.g. /^#~.*$/ for usage with scite.
|
|
291
|
-
* :encoding: The encoding used for creole.
|
|
292
|
-
Default is UTF-8
|
|
293
|
-
=end
|
|
294
|
-
def initialize( options = {} )
|
|
295
|
-
@options = {
|
|
296
|
-
:logname => 'Creole', #Just a name for easier debugging/logging
|
|
297
|
-
:targetdir => self.class.targetdir || '.',
|
|
298
|
-
:wrap_at => 75, #Default line wrapping
|
|
299
|
-
#~ :parsetest => false #Make an immediate test for parsing #fixme
|
|
300
|
-
#~ :placeholders =
|
|
301
|
-
#Definition how to handle the sectioning.
|
|
302
|
-
:title_levels => {
|
|
303
|
-
0 => nil,
|
|
304
|
-
1 => :h1,
|
|
305
|
-
2 => :h2,
|
|
306
|
-
3 => :h3,
|
|
307
|
-
4 => :h4,
|
|
308
|
-
5 => :h5,
|
|
309
|
-
6 => :h6,
|
|
310
|
-
},
|
|
311
|
-
:ignore => nil, #Define a "local" comment, e.g /^#~.*$/
|
|
312
|
-
:encoding => __ENCODING__,
|
|
313
|
-
}.update(options)
|
|
314
|
-
@placeholders = Placeholders::Collection.dup
|
|
315
|
-
@inclusions = Inclusions::Collection.dup
|
|
316
|
-
@plugins = Plugins::Collection.dup
|
|
317
|
-
|
|
318
|
-
#Store the given source text
|
|
319
|
-
@source = []
|
|
320
|
-
#Store the pre-parsed content
|
|
321
|
-
@normsource = []
|
|
322
|
-
@toc = [] #Collection of all heading lines
|
|
323
|
-
@footnotegroups = {} #Collection of footnote groups
|
|
324
|
-
|
|
325
|
-
@targetdir = @options[:targetdir] if @options[:targetdir]
|
|
326
|
-
|
|
327
|
-
@log = @options[:log]
|
|
328
|
-
@log = Log4r::Logger.new(@options[:logname], Log4r::INFO) unless @log
|
|
329
|
-
@log.outputters = Log4r::StdoutOutputter.new('log_stdout') if @log.outputters.empty?
|
|
330
|
-
|
|
331
|
-
@creation_caller = caller.first
|
|
332
|
-
self << @options[:content] if @options[:content]
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
#Hash with placeholders.
|
|
336
|
-
#
|
|
337
|
-
#Placeholders are used with <<<'name'.
|
|
338
|
-
#This accessor is needed to add more placeholders for specific wikis.
|
|
339
|
-
#Default: Creole::Placeholders
|
|
340
|
-
attr_reader :placeholders
|
|
341
|
-
attr_reader :options
|
|
342
|
-
|
|
343
|
-
#Hash with inclusions.
|
|
344
|
-
#This accessor is needed to add more inclusions for specific wikis.
|
|
345
|
-
#Default: Creole::Inclusions
|
|
346
|
-
attr_reader :inclusions
|
|
347
|
-
#Hash with all plugins
|
|
348
|
-
#This accessor is needed to add more plugins for specific wikis.
|
|
349
|
-
#Default: Creole::Plugins
|
|
350
|
-
attr_reader :plugins
|
|
351
|
-
#All footnotegroups of the wiki
|
|
352
|
-
attr_reader :footnotegroups
|
|
353
|
-
|
|
354
|
-
#Error Class
|
|
355
|
-
class InputError < ArgumentError; end
|
|
356
|
-
=begin rdoc
|
|
357
|
-
Get some content.
|
|
358
|
-
Strings are taken like strings.
|
|
359
|
-
Array items are handled like lines.
|
|
360
|
-
|
|
361
|
-
It is possible to add the content of a file. Just add the open file handle.
|
|
362
|
-
In case of ruby scripts, the part after __END__ is used as input.
|
|
363
|
-
|
|
364
|
-
Content added with << starts always with a new paragraph, but it may contain
|
|
365
|
-
multiple paragraphs, lists...
|
|
366
|
-
=end
|
|
367
|
-
def << ( input )
|
|
368
|
-
case input
|
|
369
|
-
when String
|
|
370
|
-
source = input
|
|
371
|
-
when Array
|
|
372
|
-
#Items of the array are handled like single lines.
|
|
373
|
-
#The chomp avoid double \n (the array items may already have their own newlines).
|
|
374
|
-
source = input.map{|item| item.chomp}.join("\n") #ohne doppelte xx
|
|
375
|
-
when File
|
|
376
|
-
#If file is a ruby script, then use the wiki-code after __END__
|
|
377
|
-
#
|
|
378
|
-
#Often scripts contains there own text content after __END__.
|
|
379
|
-
#So we have to catch, if << is called with DATA
|
|
380
|
-
if /\.rb\Z/ =~ input.path and $0 != input.path
|
|
381
|
-
@log.info("Take content of #{input.inspect} after __END__") if @log.info?
|
|
382
|
-
begin
|
|
383
|
-
line = input.readline while line != "__END__\n"
|
|
384
|
-
rescue EOFError
|
|
385
|
-
@log.error("No __END__ found in #{input.inspect}") if @log.error?
|
|
386
|
-
end
|
|
387
|
-
end
|
|
388
|
-
#Read the code
|
|
389
|
-
source = input.readlines.join
|
|
390
|
-
else
|
|
391
|
-
raise InputError, "Don't know, how to handle #{input.class} in Creole#<<"
|
|
392
|
-
end
|
|
393
|
-
begin
|
|
394
|
-
source_enc = source.encode(@options[:encoding])
|
|
395
|
-
rescue Encoding::UndefinedConversionError => err
|
|
396
|
-
@log.warn("Encoding conversion error <#{err}>") if @log.warn?
|
|
397
|
-
source_enc = source.encode(@options[:encoding], :undef => :replace)
|
|
398
|
-
end
|
|
399
|
-
@source << source_enc
|
|
400
|
-
#Parse the given source.
|
|
401
|
-
#This is done immediate, so you have a chance to localize the line, where an error occurs.
|
|
402
|
-
#(Some errors are reported later during to_doc).
|
|
403
|
-
#fixme: option to parse immediate at << or later
|
|
404
|
-
#immediate_parse => true...
|
|
405
|
-
@normsource.push( *parse( source_enc ) )
|
|
406
|
-
end #<< ( input )
|
|
407
|
-
=begin rdoc
|
|
408
|
-
Parse the given creole code and build a "normalized source"
|
|
409
|
-
=end
|
|
410
|
-
def parse( source = @source )
|
|
411
|
-
|
|
412
|
-
normsource = []
|
|
413
|
-
statusflag = nil #Variable to store the actual status. nil = nothing special.
|
|
414
|
-
normsource << Creole_line.new(:dummy)
|
|
415
|
-
|
|
416
|
-
if ! source.respond_to?(:each_with_index)
|
|
417
|
-
#Ruby 1.9 removed each from String
|
|
418
|
-
if source.respond_to? :each_line
|
|
419
|
-
source = source.each_line
|
|
420
|
-
else
|
|
421
|
-
@log.fatal("Unable to parse #{source.class}: #{source.inspect}" ) if @log.fatal?
|
|
422
|
-
return normsource
|
|
423
|
-
end
|
|
424
|
-
end
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
#
|
|
428
|
-
#Check code line by line
|
|
429
|
-
#
|
|
430
|
-
source.each_with_index{|line, lineno|
|
|
431
|
-
#Check special status
|
|
432
|
-
case statusflag
|
|
433
|
-
when nil #Nothing to do
|
|
434
|
-
when :pre
|
|
435
|
-
line =~ /\}\}\}/ ? statusflag = nil : normsource.last.content << line
|
|
436
|
-
next
|
|
437
|
-
when :placeholder
|
|
438
|
-
#~ if line =~ /^>>>$/ #did not catch each system specific line end.
|
|
439
|
-
if line =~ /^>>>(\r\n?|\n)/
|
|
440
|
-
statusflag = nil
|
|
441
|
-
normsource.last.content.close
|
|
442
|
-
else
|
|
443
|
-
normsource.last.content << line
|
|
444
|
-
end
|
|
445
|
-
next
|
|
446
|
-
else
|
|
447
|
-
@log.fatal("Undefinded status #{statusflag}: #{line.inspect}" ) if @log.fatal?
|
|
448
|
-
end #statusflag
|
|
449
|
-
|
|
450
|
-
#
|
|
451
|
-
#Parse the wiki text on line level (main structure)
|
|
452
|
-
case line
|
|
453
|
-
#Skip this line, if it correspond to a special comment-pattern.
|
|
454
|
-
#Can be used for application-specific comments.
|
|
455
|
-
#
|
|
456
|
-
#Example:
|
|
457
|
-
# :ignore => /^(#~.*)$/
|
|
458
|
-
#This comment is created by scite using Ctrl-Q (for ruby-scripts).
|
|
459
|
-
when @options[:ignore]
|
|
460
|
-
@log.info("Found comment in line %2i: %s" % [
|
|
461
|
-
lineno, #line.inspect
|
|
462
|
-
[$~.pre_match, '<<', $1, '>>', $~.post_match].join.strip,
|
|
463
|
-
]) if @log.info?
|
|
464
|
-
#Headings
|
|
465
|
-
#http://www.wikicreole.org/wiki/Headings
|
|
466
|
-
#
|
|
467
|
-
#Modification of standard: Labels are possible.
|
|
468
|
-
when /^(=+)(?:\[(.*)\])?(.+?)(=*)\s*$/
|
|
469
|
-
normsource << Creole_line.new(:title, $3, :level => $1.size, :label => $2 )
|
|
470
|
-
@toc << normsource.last
|
|
471
|
-
#Creole doesn't need a trailing ===, but when it is ther, it should be correct
|
|
472
|
-
if $1.size != $4.size and $4.size > 0
|
|
473
|
-
@log.warn("Heading problem #{$1} doesn't match <#{$4}>: #{line.inspect}" ) if @log.warn?
|
|
474
|
-
end
|
|
475
|
-
if $~.post_match !~ /\s*/
|
|
476
|
-
@log.warn("Ignore text #{$~.post_match.inspect} after title <#{line.inspect}>" ) if @log.warn?
|
|
477
|
-
end
|
|
478
|
-
#And close the actual level
|
|
479
|
-
#See unit test test_creole_mix_titles_list
|
|
480
|
-
normsource << Creole_line.new(:dummy )
|
|
481
|
-
#Empty line
|
|
482
|
-
when /^\s*$/
|
|
483
|
-
normsource << Creole_line.new(:dummy )
|
|
484
|
-
when /^----\s*$/
|
|
485
|
-
normsource << Creole_line.new(:hr )
|
|
486
|
-
#List entry
|
|
487
|
-
when /^\s*((\*|\#)+)/
|
|
488
|
-
normsource << Creole_line.new(:list, $~.post_match, :listtype => $1 )
|
|
489
|
-
#Tabular
|
|
490
|
-
when /^\|/
|
|
491
|
-
#fixme tab soll in par...
|
|
492
|
-
#~ normsource.last << Creole_line.new(:placeholder,
|
|
493
|
-
#~ ... unless anpassen...
|
|
494
|
-
normsource << Creole_line.new(:placeholder,
|
|
495
|
-
@placeholders['creole_tabular'].new(self),
|
|
496
|
-
:start => lineno
|
|
497
|
-
) unless normsource.last.content.is_a?(Creole_tab)
|
|
498
|
-
normsource.last.content << line
|
|
499
|
-
#http://www.wikicreole.org/wiki/PreformattedAndNowiki
|
|
500
|
-
when /^\{\{\{\s*$/ #Kind of verbatim
|
|
501
|
-
normsource << Creole_line.new(:pre, [], :start => lineno )
|
|
502
|
-
statusflag = :pre
|
|
503
|
-
#~ when /^<<<(.*)\|?(.*?)/ #fixme options for placeholders?
|
|
504
|
-
when /^<<<(.*)/
|
|
505
|
-
ph, par = $1.split(/\|/,2)
|
|
506
|
-
placeholder = @placeholders[ph].new(self, par)
|
|
507
|
-
if placeholder.instance_of?(Placeholders::Dummy)
|
|
508
|
-
@log.warn("Unknown placeholder #{ph.inspect} used in line #{lineno}" ) if @log.warn?
|
|
509
|
-
end
|
|
510
|
-
normsource << Creole_line.new(:placeholder, placeholder, :start => lineno )
|
|
511
|
-
statusflag = :placeholder
|
|
512
|
-
else
|
|
513
|
-
case normsource.last.type
|
|
514
|
-
when :par, :list
|
|
515
|
-
normsource.last.content << line
|
|
516
|
-
else
|
|
517
|
-
normsource << Creole_line.new(:par, line )
|
|
518
|
-
end
|
|
519
|
-
end
|
|
520
|
-
}
|
|
521
|
-
case statusflag
|
|
522
|
-
when nil #ok
|
|
523
|
-
when :pre
|
|
524
|
-
@log.warn("Unclosed verbatim found (start at #{normsource.last.add_info[:start]})" ) if @log.warn?
|
|
525
|
-
#~ raise ''
|
|
526
|
-
when :placeholder
|
|
527
|
-
#One possible source: Regexp $ is system specific.
|
|
528
|
-
@log.warn("Unclosed placeholder #{normsource.last.type} (start at #{normsource.last.add_info[:start]})" ) if @log.warn?
|
|
529
|
-
else
|
|
530
|
-
@log.warn("Wiki ends with status #{statusflag.inspect}" ) if @log.warn?
|
|
531
|
-
end
|
|
532
|
-
return normsource
|
|
533
|
-
end #parse
|
|
534
|
-
#Logger to collect messages.
|
|
535
|
-
attr_reader :log
|
|
536
|
-
#Returns the source as it was received
|
|
537
|
-
attr_reader :source
|
|
538
|
-
#The pre-parsed content.
|
|
539
|
-
attr_reader :normsource
|
|
540
|
-
#Directory for the target.
|
|
541
|
-
#Can be used to check internal links (images, local files...)
|
|
542
|
-
attr_reader :targetdir
|
|
543
|
-
|
|
544
|
-
=begin rdoc
|
|
545
|
-
Return a table of contents as a list.
|
|
546
|
-
=end
|
|
547
|
-
def toc( i_options = {})
|
|
548
|
-
options = {
|
|
549
|
-
:listtype => :ul,
|
|
550
|
-
:level => 4,
|
|
551
|
-
#~ :startlevel => 1,
|
|
552
|
-
}.update(i_options)
|
|
553
|
-
|
|
554
|
-
if ! options[:level].is_a?(Fixnum)
|
|
555
|
-
@log.error("Toc: toclevel is no number but '#{options[:level].inspect}'. Set 4") if @log.error?
|
|
556
|
-
options[:level] = 4
|
|
557
|
-
end
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
toclist = []
|
|
561
|
-
toclabel = [0] #help variable to construct labels
|
|
562
|
-
listtype = '*'
|
|
563
|
-
case options[:listtype]
|
|
564
|
-
when '*', :ul, :itemize
|
|
565
|
-
listtype = '*'
|
|
566
|
-
when '#', :ol, :enumerate
|
|
567
|
-
listtype = '#'
|
|
568
|
-
else
|
|
569
|
-
@log.error("Toc: Unknown listtype #{options[:listtype]}") if @log.error?
|
|
570
|
-
end
|
|
571
|
-
|
|
572
|
-
@toc.each{|tocentry|
|
|
573
|
-
level = tocentry.add_info[:level]
|
|
574
|
-
#Skip deeper levels then wanted.
|
|
575
|
-
next if level > options[:level]
|
|
576
|
-
|
|
577
|
-
#Build the label
|
|
578
|
-
if level > toclabel.size
|
|
579
|
-
toclabel << 0
|
|
580
|
-
elsif level < toclabel.size
|
|
581
|
-
toclabel.pop
|
|
582
|
-
end
|
|
583
|
-
#Happens if there is a jump gap on section levels (subsubsection inside section without subsection)
|
|
584
|
-
if ! toclabel[level-1]
|
|
585
|
-
@log.warn("Missing toclevel for <#{tocentry.content}> #{tocentry.add_info.inspect}")
|
|
586
|
-
#add dummy level
|
|
587
|
-
toclabel << 0
|
|
588
|
-
toclist << "#{listtype * ( level - 1)} ---"
|
|
589
|
-
end
|
|
590
|
-
toclabel[level-1] = toclabel[level-1] + 1
|
|
591
|
-
|
|
592
|
-
#Check if there was already a label.
|
|
593
|
-
#If yes: use it. If not: build a new one with the help of toclabel.
|
|
594
|
-
if tocentry.add_info[:label]
|
|
595
|
-
label = tocentry.add_info[:label]
|
|
596
|
-
else
|
|
597
|
-
label = tocentry.add_info[:label] = toclabel.join('-')
|
|
598
|
-
end
|
|
599
|
-
|
|
600
|
-
#Feature to create the toc if higher levels are missing /start at h3...)
|
|
601
|
-
#~ if level < options[:startlevel]
|
|
602
|
-
#~ @log.warn( "toc: TOC starts not at #{options[:startlevel]}, but level #{level}" ) if @log.warn?
|
|
603
|
-
#~ next
|
|
604
|
-
#~ end
|
|
605
|
-
|
|
606
|
-
toclist << "#{listtype * level}[[##{label}|#{tocentry.content}]]"
|
|
607
|
-
}
|
|
608
|
-
toclist = <<toc
|
|
609
|
-
<<<html
|
|
610
|
-
<div class = 'toc'>
|
|
611
|
-
>>>
|
|
612
|
-
#{toclist.join("\n")}
|
|
613
|
-
<<<html
|
|
614
|
-
</div>
|
|
615
|
-
>>>
|
|
616
|
-
toc
|
|
617
|
-
|
|
618
|
-
return Creole.new( :content => toclist, :log => @log )
|
|
619
|
-
end #toc
|
|
620
|
-
=begin rdoc
|
|
621
|
-
Wrapping mechanism for texts.
|
|
622
|
-
|
|
623
|
-
Don't do anything, if line_width is 0.
|
|
624
|
-
|
|
625
|
-
See also http://stackoverflow.com/questions/7548968/format-output-to-40-characters-long-per-line/7549032#7549032
|
|
626
|
-
and http://forum.ruby-portal.de/viewtopic.php?t=3844&p=24578
|
|
627
|
-
=end
|
|
628
|
-
def word_wrap(text, line_width = @options[:wrap_at] )
|
|
629
|
-
return text if line_width <= 0
|
|
630
|
-
text.gsub(/\n/, ' ').gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip
|
|
631
|
-
end
|
|
632
|
-
=begin rdoc
|
|
633
|
-
Prepare document.
|
|
634
|
-
=end
|
|
635
|
-
def to_doc( target, options = {} )
|
|
636
|
-
options[:log] = @log unless options[:log]
|
|
637
|
-
#
|
|
638
|
-
#Delete again all footnotegroups.
|
|
639
|
-
#Else you get footnotes doubled.
|
|
640
|
-
@footnotegroups = {} #Collection of footnote groups
|
|
641
|
-
return normsource2elements( @normsource, options ).to_doc(target, options)
|
|
642
|
-
end #to_doc
|
|
643
|
-
=begin rdoc
|
|
644
|
-
Take the given normsource and build a list of elements.
|
|
645
|
-
Used by
|
|
646
|
-
- Creole#to_doc
|
|
647
|
-
- Creole_ruby#to_doc
|
|
648
|
-
=end
|
|
649
|
-
def normsource2elements( normsource, options )
|
|
650
|
-
doc = []
|
|
651
|
-
elements = {} #little collector for lists
|
|
652
|
-
normsource.each{|line|
|
|
653
|
-
case line.type
|
|
654
|
-
when :dummy
|
|
655
|
-
elements = {}
|
|
656
|
-
#Here we define the sectioning.
|
|
657
|
-
#line.add_info[:level] contains the number of = from the wiki.
|
|
658
|
-
#
|
|
659
|
-
when :title
|
|
660
|
-
|
|
661
|
-
doc << element(@options[:title_levels][line.add_info[:level]], {
|
|
662
|
-
:id => line.add_info[:label]
|
|
663
|
-
#inline or not?
|
|
664
|
-
#Required for filenames with _
|
|
665
|
-
#But: http://www.wikicreole.org/wiki/Headings says no.
|
|
666
|
-
#Make decision depending on a setting?
|
|
667
|
-
}, line.content ).cr
|
|
668
|
-
#~ }, inline(line.content, options ) ).cr
|
|
669
|
-
when :list
|
|
670
|
-
key = line.add_info[:listtype]
|
|
671
|
-
if ! elements[key]
|
|
672
|
-
case key[-1,1]
|
|
673
|
-
when '*'; elements[key] = element(:ul).cR
|
|
674
|
-
when '#'; elements[key] = element(:ol).cR
|
|
675
|
-
else
|
|
676
|
-
options[:log].error("Undefined listtype #{key[-1,1]}") if options[:log].error?
|
|
677
|
-
end
|
|
678
|
-
if key.size == 1 #new list, add to document
|
|
679
|
-
doc << elements[key]
|
|
680
|
-
elsif parent_list = elements[key[0,key.size-1]] #new sublist, add to "parent"
|
|
681
|
-
parent_list << element(:li).cr unless parent_list.content.last.is_a?(:li)
|
|
682
|
-
parent_list.content.last << elements[key]
|
|
683
|
-
else #sublist without parent.
|
|
684
|
-
options[:log].error("List #{key} with missing superlist") if options[:log].error?
|
|
685
|
-
doc << element(:comment,{},'Sublist without superlist - move on top level').cr #add pending list on top level.
|
|
686
|
-
doc << elements[key] #add pending list on top level.
|
|
687
|
-
end
|
|
688
|
-
end
|
|
689
|
-
elements.each{|ekey, list|
|
|
690
|
-
case ekey
|
|
691
|
-
when key
|
|
692
|
-
list << element(:li,{}, inline(line.content, options) ).cr
|
|
693
|
-
else
|
|
694
|
-
elements.delete(ekey) if ekey.size >= key.size
|
|
695
|
-
end
|
|
696
|
-
}
|
|
697
|
-
when :pre
|
|
698
|
-
doc << element(:verbatim, {}, line.content ).cR
|
|
699
|
-
when :hr
|
|
700
|
-
doc << element(:hr).cr
|
|
701
|
-
when :placeholder
|
|
702
|
-
doc << line.content
|
|
703
|
-
when :par
|
|
704
|
-
doc << element(:par, {}, inline(line.content, options)).cR
|
|
705
|
-
else
|
|
706
|
-
options[:log].error("Wrong line type #{ line.type.inspect }") if options[:log].error?
|
|
707
|
-
end
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
return doc
|
|
711
|
-
end #to_doc_internal
|
|
712
|
-
=begin rdoc
|
|
713
|
-
Parse the inline text.
|
|
714
|
-
|
|
715
|
-
Options is a Hash and may contain:
|
|
716
|
-
* :log (default: @log)
|
|
717
|
-
=end
|
|
718
|
-
def inline( text, options )
|
|
719
|
-
|
|
720
|
-
raise ArgumentError, "Creole#inline: Options no Hash" unless options.is_a?(Hash)
|
|
721
|
-
options[:log] = @log unless options[:log]
|
|
722
|
-
options[:plugins] = @plugins unless options[:plugins]
|
|
723
|
-
options[:inclusions] = @inclusions unless options[:inclusions]
|
|
724
|
-
|
|
725
|
-
res = [] #result
|
|
726
|
-
stack = [] #
|
|
727
|
-
|
|
728
|
-
#~ http_regex =
|
|
729
|
-
#fixme: Only once to reduce runtime
|
|
730
|
-
splitregex = Regexp.new(
|
|
731
|
-
'(' + [
|
|
732
|
-
'\[\[.+?\]\]', # [[...links]]
|
|
733
|
-
'https?:\/\/.+?(\s|\Z)', #including the next space!!
|
|
734
|
-
'\*\*', #bold
|
|
735
|
-
'\/\/', #emph
|
|
736
|
-
'\\\\\\\\', #newline
|
|
737
|
-
'\{\{\{.*?\}\}\}', #inline verbatim
|
|
738
|
-
'\{\{.*?\}\}', #images/inclusion
|
|
739
|
-
'<<.*?>>', #Plugins
|
|
740
|
-
CHARACTERS.keys.join('|')
|
|
741
|
-
].join('|') + ')'
|
|
742
|
-
)
|
|
743
|
-
#Splitt along 'active' elements.
|
|
744
|
-
#~ @options[:wrap_at]
|
|
745
|
-
#~ text.gsub(/\n/, ' ').split(splitregex).each{|el|
|
|
746
|
-
text.split(splitregex).each{|el|
|
|
747
|
-
case el
|
|
748
|
-
when '**' #bold
|
|
749
|
-
if stack.last.is_a?(:textbf)
|
|
750
|
-
stack.pop #leave bold area
|
|
751
|
-
else
|
|
752
|
-
stack << newel = element(:textbf) #enter bold area
|
|
753
|
-
if stack.size > 1
|
|
754
|
-
stack[-2] << newel
|
|
755
|
-
else
|
|
756
|
-
res << newel
|
|
757
|
-
end
|
|
758
|
-
end
|
|
759
|
-
when '//' #italic
|
|
760
|
-
if stack.last.is_a?(:emph)
|
|
761
|
-
stack.pop #leave italic area
|
|
762
|
-
else
|
|
763
|
-
stack << newel = element(:emph) #enter italic area
|
|
764
|
-
if stack.size > 1
|
|
765
|
-
stack[-2] << newel
|
|
766
|
-
else
|
|
767
|
-
res << newel
|
|
768
|
-
end
|
|
769
|
-
end
|
|
770
|
-
when '\\\\' #newline
|
|
771
|
-
( stack.last ? stack.last : res ) << element(:newline).cr
|
|
772
|
-
#Something like [[http:...]]
|
|
773
|
-
when %r{^\[\[(.+?)(?:\|(.*?))?\]\]} #Link
|
|
774
|
-
link = $1
|
|
775
|
-
linktext = $2 ? $2 : $1
|
|
776
|
-
case link
|
|
777
|
-
when /^(https?|ftp):\/\/.+?/
|
|
778
|
-
link = link
|
|
779
|
-
#local file via file://...
|
|
780
|
-
when /^(file):\/\/(.+)/
|
|
781
|
-
link = link
|
|
782
|
-
check_link_existence( $2, options[:log] )
|
|
783
|
-
when /^\./, /\S:[\\\/]/ #lokal file
|
|
784
|
-
link = link
|
|
785
|
-
check_link_existence( link, options[:log] )
|
|
786
|
-
when /^#/ #internal link
|
|
787
|
-
link = link
|
|
788
|
-
#fixme tex?
|
|
789
|
-
else #internal link
|
|
790
|
-
#This is normally the wiki-links.
|
|
791
|
-
#But this is no wiki, it's a documentgenerator with wiki syntax.
|
|
792
|
-
options[:log].warn("Unclear link <#{el}> #{self.inspect}") if options[:log].warn?
|
|
793
|
-
link = link
|
|
794
|
-
end
|
|
795
|
-
if link == linktext #Avoid replacement of // inside linktext
|
|
796
|
-
href = element(:a, {:href=>link}, linktext )
|
|
797
|
-
else
|
|
798
|
-
href = element(:a, {:href=>link}, inline(linktext, options) )
|
|
799
|
-
end
|
|
800
|
-
if stack.last
|
|
801
|
-
stack.last << href
|
|
802
|
-
else
|
|
803
|
-
res << href
|
|
804
|
-
end
|
|
805
|
-
#All links should be catched before
|
|
806
|
-
when %r{\[\[(.*)\]\]}
|
|
807
|
-
options[:log].error("Lost link <#{el}>") if options[:log].error?
|
|
808
|
-
#fixme: there are obsolete 2 additional spaces in the result.
|
|
809
|
-
when /^http/ #implicit link
|
|
810
|
-
#~ href = element(:a, {:href=>el.strip}, el.strip ) #This makes problems with TeX (unmasked _,%...)
|
|
811
|
-
href = element(:url, {}, el.strip )
|
|
812
|
-
el =~ /(\s|\Z)$/ #get the end-space/newline if available
|
|
813
|
-
endspace = ( $1.empty? ? nil : $1 )
|
|
814
|
-
if stack.last
|
|
815
|
-
stack.last << href
|
|
816
|
-
#~ stack.last << last_char #add again the
|
|
817
|
-
else
|
|
818
|
-
res << href
|
|
819
|
-
#~ res << last_char #add again the end-space/newline
|
|
820
|
-
end
|
|
821
|
-
#No-wiki inline: {{{text}}}
|
|
822
|
-
when /\{\{\{(.*)\}\}\}/
|
|
823
|
-
if stack.last
|
|
824
|
-
stack.last << element(:verb,{},$1)
|
|
825
|
-
else
|
|
826
|
-
res << element(:verb,{},$1)
|
|
827
|
-
end
|
|
828
|
-
#Inclusion
|
|
829
|
-
#creole2doc implements a general inclusion.
|
|
830
|
-
#Main usage are pictures/images ({{picname|alt}}),
|
|
831
|
-
#but it can be more...
|
|
832
|
-
#
|
|
833
|
-
#Available inclusions are defined in Creole::Inclusions resp. Creole#inclusions,
|
|
834
|
-
when /\{\{(.+?)(?:\|(.*))?\}\}/
|
|
835
|
-
if stack.last
|
|
836
|
-
stack.last << inclusion_or_plugin($1, $2, options[:inclusions])
|
|
837
|
-
else
|
|
838
|
-
res << inclusion_or_plugin($1, $2, options[:inclusions])
|
|
839
|
-
end
|
|
840
|
-
#Plugin
|
|
841
|
-
#Used like Inclusions.
|
|
842
|
-
#
|
|
843
|
-
#available plugins are defined in Creole::Plugins resp. Creole#plugins
|
|
844
|
-
when /<<(.+?)(?:\|(.*))?>>/
|
|
845
|
-
if stack.last
|
|
846
|
-
stack.last << inclusion_or_plugin($1, $2, options[:plugins])
|
|
847
|
-
else
|
|
848
|
-
res << inclusion_or_plugin($1, $2, options[:plugins])
|
|
849
|
-
end
|
|
850
|
-
#No special wiki command. The text is "normal" text.
|
|
851
|
-
else #text to add
|
|
852
|
-
#Replace characters.
|
|
853
|
-
if CHARACTERS[el]
|
|
854
|
-
insertion = CHARACTERS[el]
|
|
855
|
-
startspace = endspace = nil
|
|
856
|
-
else
|
|
857
|
-
startspace = ( el[0,1] =~ /\s/ )
|
|
858
|
-
endspace = ( el[-1,1] =~ /\s/ )
|
|
859
|
-
insertion = word_wrap( el ) #wrap content
|
|
860
|
-
end
|
|
861
|
-
if stack.last
|
|
862
|
-
stack.last << insertion
|
|
863
|
-
#This adds some obsolete spaces in case of newlines at the end.
|
|
864
|
-
#But if I compare with ' ', then words will be concatenated without separator.
|
|
865
|
-
stack.last << ' ' if endspace
|
|
866
|
-
else #Just some text without any format
|
|
867
|
-
res << ' ' if startspace #Keep space
|
|
868
|
-
res << insertion
|
|
869
|
-
res << ' ' if endspace #Keep space
|
|
870
|
-
end
|
|
871
|
-
end
|
|
872
|
-
}
|
|
873
|
-
res
|
|
874
|
-
end #inline
|
|
875
|
-
=begin rdoc
|
|
876
|
-
Inclusion or Plugin.
|
|
877
|
-
creole2doc implements a general inclusion.
|
|
878
|
-
Main usage are pictures/images ({{picname|alt}}),
|
|
879
|
-
but it can be more...
|
|
880
|
-
|
|
881
|
-
The last paramter contains a hash with the supported inclusions/plugins.
|
|
882
|
-
=end
|
|
883
|
-
def inclusion_or_plugin( link, p_additions, inclusions )
|
|
884
|
-
|
|
885
|
-
addition, additions = nil
|
|
886
|
-
#Splitt additions at |
|
|
887
|
-
if p_additions
|
|
888
|
-
addition, *additions = p_additions.split(/\|/)
|
|
889
|
-
end
|
|
890
|
-
|
|
891
|
-
inclusion = inclusions[link]
|
|
892
|
-
#check inclusion.ancestors?
|
|
893
|
-
#~ if inclusion.superclass != Creole_inclusion_and_plugin
|
|
894
|
-
if inclusion.is_a?(Creole_inclusion_and_plugin)
|
|
895
|
-
@log.error( "Wrong inclusion/plugin definition for #{link} (#{inclusion.inspect}, expected #{inclusions.default.superclass})") if @log.error?
|
|
896
|
-
return nil
|
|
897
|
-
end
|
|
898
|
-
ip = inclusion.new( link, addition, additions, self )
|
|
899
|
-
return ip
|
|
900
|
-
end #inclusion
|
|
901
|
-
=begin rdoc
|
|
902
|
-
Check for links and pictures if the target exist.
|
|
903
|
-
|
|
904
|
-
Absolute DOS-Pathes are detected (C:\...).
|
|
905
|
-
Relative pathes are searched from @options[:targetdir] (default '.').
|
|
906
|
-
|
|
907
|
-
Different locations are not supported (e.g. to implement LaTeXs \graphicspath)
|
|
908
|
-
=end
|
|
909
|
-
def check_link_existence( filename, log )
|
|
910
|
-
case filename
|
|
911
|
-
when /^.:/#absolute DOS-path (e.g. c:\...)
|
|
912
|
-
path = filename.dup
|
|
913
|
-
else #relative path
|
|
914
|
-
path = "#{@options[:targetdir]}/#{filename}".sub(/^\//, '')
|
|
915
|
-
end
|
|
916
|
-
path.sub!(/(\.html?)#.*$/, '\1') #Don't check anchor inside html
|
|
917
|
-
if ! File.exist?(path)
|
|
918
|
-
log.warn("Reference not found: <#{filename}> (looking at <#{path}>)") if log.warn?
|
|
919
|
-
#~ log.debug("Reference not found: <#{path}>") if log.debug?
|
|
920
|
-
fpath = File.expand_path("#{Dir.pwd}/#{path}")
|
|
921
|
-
log.debug("Reference not found: <#{fpath}>") if log.debug?
|
|
922
|
-
end
|
|
923
|
-
end #check_link_existence
|
|
924
|
-
|
|
925
|
-
def inspect()
|
|
926
|
-
"<#{self.class} (created #{@creation_caller})>"
|
|
927
|
-
end
|
|
928
|
-
end #Creole
|
|
929
|
-
end #module Creole
|
|
930
|
-
end #module Docgenerator
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
if [__FILE__ ].include?($0)
|
|
934
|
-
|
|
935
|
-
[
|
|
936
|
-
:syntax,
|
|
937
|
-
:creole,
|
|
938
|
-
:wikimedia,
|
|
939
|
-
:trippfall,
|
|
940
|
-
:headings,
|
|
941
|
-
:links,
|
|
942
|
-
].each{|key|
|
|
943
|
-
puts '='*50
|
|
944
|
-
puts Docgenerator::Creole::Creole.help(key)
|
|
945
|
-
puts '='*50
|
|
946
|
-
}
|
|
947
|
-
|
|
948
|
-
creole = Docgenerator::Creole::Creole.new
|
|
949
|
-
creole << 'x{{-}}y{{-}}z'
|
|
950
|
-
creole << 'x{{shy}}y{{shy}}z'
|
|
951
|
-
creole << ''
|
|
952
|
-
creole << '{{../index.html#aa}}'
|
|
953
|
-
puts creole.to_html
|
|
954
|
-
end
|