gitdown 0.0.1
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.
- data/AUTHORS +1 -0
- data/COPYING +24 -0
- data/GPL +674 -0
- data/README +43 -0
- data/Rakefile +370 -0
- data/VERSION +1 -0
- data/benchmark/benchmark.rb +34 -0
- data/benchmark/benchmark.sh +74 -0
- data/benchmark/generate_data.rb +119 -0
- data/benchmark/mdbasics.text +306 -0
- data/benchmark/mdsyntax.text +888 -0
- data/benchmark/testing.sh +9 -0
- data/benchmark/timing.sh +10 -0
- data/bin/kramdown +78 -0
- data/data/kramdown/document.html +18 -0
- data/data/kramdown/document.latex +43 -0
- data/doc/default.scss.css +530 -0
- data/doc/default.template +80 -0
- data/doc/documentation.page +71 -0
- data/doc/index.page +98 -0
- data/doc/installation.page +88 -0
- data/doc/links.markdown +6 -0
- data/doc/news.feed +10 -0
- data/doc/news.page +28 -0
- data/doc/quickref.page +585 -0
- data/doc/syntax.page +1644 -0
- data/doc/tests.page +52 -0
- data/doc/virtual +2 -0
- data/lib/kramdown.rb +23 -0
- data/lib/kramdown/compatibility.rb +35 -0
- data/lib/kramdown/converter.rb +41 -0
- data/lib/kramdown/converter/base.rb +169 -0
- data/lib/kramdown/converter/html.rb +410 -0
- data/lib/kramdown/converter/kramdown.rb +422 -0
- data/lib/kramdown/converter/latex.rb +607 -0
- data/lib/kramdown/converter/toc.rb +82 -0
- data/lib/kramdown/document.rb +117 -0
- data/lib/kramdown/element.rb +524 -0
- data/lib/kramdown/error.rb +30 -0
- data/lib/kramdown/options.rb +373 -0
- data/lib/kramdown/parser.rb +40 -0
- data/lib/kramdown/parser/base.rb +136 -0
- data/lib/kramdown/parser/github_markdown.rb +44 -0
- data/lib/kramdown/parser/github_markdown/github_codeblock.rb +44 -0
- data/lib/kramdown/parser/html.rb +570 -0
- data/lib/kramdown/parser/kramdown.rb +338 -0
- data/lib/kramdown/parser/kramdown/abbreviation.rb +71 -0
- data/lib/kramdown/parser/kramdown/autolink.rb +53 -0
- data/lib/kramdown/parser/kramdown/blank_line.rb +43 -0
- data/lib/kramdown/parser/kramdown/block_boundary.rb +46 -0
- data/lib/kramdown/parser/kramdown/blockquote.rb +51 -0
- data/lib/kramdown/parser/kramdown/codeblock.rb +63 -0
- data/lib/kramdown/parser/kramdown/codespan.rb +56 -0
- data/lib/kramdown/parser/kramdown/emphasis.rb +70 -0
- data/lib/kramdown/parser/kramdown/eob.rb +39 -0
- data/lib/kramdown/parser/kramdown/escaped_chars.rb +38 -0
- data/lib/kramdown/parser/kramdown/extensions.rb +204 -0
- data/lib/kramdown/parser/kramdown/footnote.rb +74 -0
- data/lib/kramdown/parser/kramdown/header.rb +68 -0
- data/lib/kramdown/parser/kramdown/horizontal_rule.rb +39 -0
- data/lib/kramdown/parser/kramdown/html.rb +169 -0
- data/lib/kramdown/parser/kramdown/html_entity.rb +44 -0
- data/lib/kramdown/parser/kramdown/line_break.rb +38 -0
- data/lib/kramdown/parser/kramdown/link.rb +148 -0
- data/lib/kramdown/parser/kramdown/list.rb +240 -0
- data/lib/kramdown/parser/kramdown/math.rb +64 -0
- data/lib/kramdown/parser/kramdown/paragraph.rb +63 -0
- data/lib/kramdown/parser/kramdown/smart_quotes.rb +214 -0
- data/lib/kramdown/parser/kramdown/table.rb +178 -0
- data/lib/kramdown/parser/kramdown/typographic_symbol.rb +52 -0
- data/lib/kramdown/parser/markdown.rb +69 -0
- data/lib/kramdown/utils.rb +37 -0
- data/lib/kramdown/utils/entities.rb +348 -0
- data/lib/kramdown/utils/html.rb +85 -0
- data/lib/kramdown/utils/ordered_hash.rb +100 -0
- data/lib/kramdown/version.rb +28 -0
- data/setup.rb +1585 -0
- data/test/run_tests.rb +59 -0
- data/test/test_files.rb +197 -0
- data/test/testcases/block/01_blank_line/spaces.html +1 -0
- data/test/testcases/block/01_blank_line/spaces.text +3 -0
- data/test/testcases/block/01_blank_line/tabs.html +1 -0
- data/test/testcases/block/01_blank_line/tabs.text +6 -0
- data/test/testcases/block/02_eob/beginning.html +1 -0
- data/test/testcases/block/02_eob/beginning.text +3 -0
- data/test/testcases/block/02_eob/end.html +1 -0
- data/test/testcases/block/02_eob/end.text +3 -0
- data/test/testcases/block/02_eob/middle.html +1 -0
- data/test/testcases/block/02_eob/middle.text +5 -0
- data/test/testcases/block/03_paragraph/indented.html +18 -0
- data/test/testcases/block/03_paragraph/indented.text +19 -0
- data/test/testcases/block/03_paragraph/no_newline_at_end.html +5 -0
- data/test/testcases/block/03_paragraph/no_newline_at_end.text +5 -0
- data/test/testcases/block/03_paragraph/one_para.html +1 -0
- data/test/testcases/block/03_paragraph/one_para.text +1 -0
- data/test/testcases/block/03_paragraph/two_para.html +4 -0
- data/test/testcases/block/03_paragraph/two_para.text +4 -0
- data/test/testcases/block/04_header/atx_header.html +37 -0
- data/test/testcases/block/04_header/atx_header.text +34 -0
- data/test/testcases/block/04_header/atx_header_no_newline_at_end.html +1 -0
- data/test/testcases/block/04_header/atx_header_no_newline_at_end.text +1 -0
- data/test/testcases/block/04_header/setext_header.html +30 -0
- data/test/testcases/block/04_header/setext_header.html.19 +30 -0
- data/test/testcases/block/04_header/setext_header.text +36 -0
- data/test/testcases/block/04_header/setext_header_no_newline_at_end.html +1 -0
- data/test/testcases/block/04_header/setext_header_no_newline_at_end.text +2 -0
- data/test/testcases/block/04_header/with_auto_id_prefix.html +3 -0
- data/test/testcases/block/04_header/with_auto_id_prefix.options +2 -0
- data/test/testcases/block/04_header/with_auto_id_prefix.text +3 -0
- data/test/testcases/block/04_header/with_auto_ids.html +17 -0
- data/test/testcases/block/04_header/with_auto_ids.options +1 -0
- data/test/testcases/block/04_header/with_auto_ids.text +19 -0
- data/test/testcases/block/05_blockquote/indented.html +25 -0
- data/test/testcases/block/05_blockquote/indented.text +14 -0
- data/test/testcases/block/05_blockquote/lazy.html +34 -0
- data/test/testcases/block/05_blockquote/lazy.text +20 -0
- data/test/testcases/block/05_blockquote/nested.html +10 -0
- data/test/testcases/block/05_blockquote/nested.text +6 -0
- data/test/testcases/block/05_blockquote/no_newline_at_end.html +4 -0
- data/test/testcases/block/05_blockquote/no_newline_at_end.text +2 -0
- data/test/testcases/block/05_blockquote/very_long_line.html +3 -0
- data/test/testcases/block/05_blockquote/very_long_line.text +1 -0
- data/test/testcases/block/05_blockquote/with_code_blocks.html +15 -0
- data/test/testcases/block/05_blockquote/with_code_blocks.text +11 -0
- data/test/testcases/block/06_codeblock/error.html +4 -0
- data/test/testcases/block/06_codeblock/error.text +4 -0
- data/test/testcases/block/06_codeblock/lazy.html +4 -0
- data/test/testcases/block/06_codeblock/lazy.text +5 -0
- data/test/testcases/block/06_codeblock/no_newline_at_end.html +2 -0
- data/test/testcases/block/06_codeblock/no_newline_at_end.text +1 -0
- data/test/testcases/block/06_codeblock/no_newline_at_end_1.html +2 -0
- data/test/testcases/block/06_codeblock/no_newline_at_end_1.text +2 -0
- data/test/testcases/block/06_codeblock/normal.html +13 -0
- data/test/testcases/block/06_codeblock/normal.text +10 -0
- data/test/testcases/block/06_codeblock/tilde_syntax.html +7 -0
- data/test/testcases/block/06_codeblock/tilde_syntax.text +9 -0
- data/test/testcases/block/06_codeblock/whitespace.html +3 -0
- data/test/testcases/block/06_codeblock/whitespace.text +3 -0
- data/test/testcases/block/06_codeblock/with_blank_line.html +13 -0
- data/test/testcases/block/06_codeblock/with_blank_line.text +12 -0
- data/test/testcases/block/06_codeblock/with_eob_marker.html +6 -0
- data/test/testcases/block/06_codeblock/with_eob_marker.text +5 -0
- data/test/testcases/block/06_codeblock/with_ial.html +6 -0
- data/test/testcases/block/06_codeblock/with_ial.text +5 -0
- data/test/testcases/block/07_horizontal_rule/error.html +7 -0
- data/test/testcases/block/07_horizontal_rule/error.html.19 +7 -0
- data/test/testcases/block/07_horizontal_rule/error.text +7 -0
- data/test/testcases/block/07_horizontal_rule/normal.html +17 -0
- data/test/testcases/block/07_horizontal_rule/normal.text +17 -0
- data/test/testcases/block/07_horizontal_rule/sepspaces.html +3 -0
- data/test/testcases/block/07_horizontal_rule/sepspaces.text +3 -0
- data/test/testcases/block/07_horizontal_rule/septabs.html +3 -0
- data/test/testcases/block/07_horizontal_rule/septabs.text +3 -0
- data/test/testcases/block/08_list/escaping.html +17 -0
- data/test/testcases/block/08_list/escaping.text +17 -0
- data/test/testcases/block/08_list/item_ial.html +10 -0
- data/test/testcases/block/08_list/item_ial.text +8 -0
- data/test/testcases/block/08_list/lazy.html +39 -0
- data/test/testcases/block/08_list/lazy.text +29 -0
- data/test/testcases/block/08_list/list_and_hr.html +9 -0
- data/test/testcases/block/08_list/list_and_hr.text +5 -0
- data/test/testcases/block/08_list/list_and_others.html +40 -0
- data/test/testcases/block/08_list/list_and_others.text +26 -0
- data/test/testcases/block/08_list/mixed.html +117 -0
- data/test/testcases/block/08_list/mixed.text +66 -0
- data/test/testcases/block/08_list/nested.html +17 -0
- data/test/testcases/block/08_list/nested.text +7 -0
- data/test/testcases/block/08_list/other_first_element.html +39 -0
- data/test/testcases/block/08_list/other_first_element.text +18 -0
- data/test/testcases/block/08_list/simple_ol.html +19 -0
- data/test/testcases/block/08_list/simple_ol.text +13 -0
- data/test/testcases/block/08_list/simple_ul.html +48 -0
- data/test/testcases/block/08_list/simple_ul.text +36 -0
- data/test/testcases/block/08_list/single_item.html +3 -0
- data/test/testcases/block/08_list/single_item.text +1 -0
- data/test/testcases/block/08_list/special_cases.html +55 -0
- data/test/testcases/block/08_list/special_cases.text +35 -0
- data/test/testcases/block/09_html/comment.html +18 -0
- data/test/testcases/block/09_html/comment.text +15 -0
- data/test/testcases/block/09_html/content_model/deflists.html +6 -0
- data/test/testcases/block/09_html/content_model/deflists.options +1 -0
- data/test/testcases/block/09_html/content_model/deflists.text +6 -0
- data/test/testcases/block/09_html/content_model/tables.html +14 -0
- data/test/testcases/block/09_html/content_model/tables.options +1 -0
- data/test/testcases/block/09_html/content_model/tables.text +14 -0
- data/test/testcases/block/09_html/html_and_codeblocks.html +15 -0
- data/test/testcases/block/09_html/html_and_codeblocks.options +1 -0
- data/test/testcases/block/09_html/html_and_codeblocks.text +13 -0
- data/test/testcases/block/09_html/html_and_headers.html +5 -0
- data/test/testcases/block/09_html/html_and_headers.text +6 -0
- data/test/testcases/block/09_html/html_to_native/code.html +10 -0
- data/test/testcases/block/09_html/html_to_native/code.text +9 -0
- data/test/testcases/block/09_html/html_to_native/comment.html +7 -0
- data/test/testcases/block/09_html/html_to_native/comment.text +8 -0
- data/test/testcases/block/09_html/html_to_native/emphasis.html +6 -0
- data/test/testcases/block/09_html/html_to_native/emphasis.text +6 -0
- data/test/testcases/block/09_html/html_to_native/entity.html +1 -0
- data/test/testcases/block/09_html/html_to_native/entity.text +1 -0
- data/test/testcases/block/09_html/html_to_native/header.html +6 -0
- data/test/testcases/block/09_html/html_to_native/header.options +2 -0
- data/test/testcases/block/09_html/html_to_native/header.text +6 -0
- data/test/testcases/block/09_html/html_to_native/list_dl.html +8 -0
- data/test/testcases/block/09_html/html_to_native/list_dl.text +8 -0
- data/test/testcases/block/09_html/html_to_native/list_ol.html +15 -0
- data/test/testcases/block/09_html/html_to_native/list_ol.text +17 -0
- data/test/testcases/block/09_html/html_to_native/list_ul.html +19 -0
- data/test/testcases/block/09_html/html_to_native/list_ul.text +22 -0
- data/test/testcases/block/09_html/html_to_native/options +1 -0
- data/test/testcases/block/09_html/html_to_native/paragraph.html +3 -0
- data/test/testcases/block/09_html/html_to_native/paragraph.text +4 -0
- data/test/testcases/block/09_html/html_to_native/table_normal.html +12 -0
- data/test/testcases/block/09_html/html_to_native/table_normal.text +12 -0
- data/test/testcases/block/09_html/html_to_native/table_simple.html +48 -0
- data/test/testcases/block/09_html/html_to_native/table_simple.text +56 -0
- data/test/testcases/block/09_html/html_to_native/typography.html +1 -0
- data/test/testcases/block/09_html/html_to_native/typography.html.19 +1 -0
- data/test/testcases/block/09_html/html_to_native/typography.text +1 -0
- data/test/testcases/block/09_html/invalid_html_1.html +5 -0
- data/test/testcases/block/09_html/invalid_html_1.text +5 -0
- data/test/testcases/block/09_html/invalid_html_2.html +5 -0
- data/test/testcases/block/09_html/invalid_html_2.text +5 -0
- data/test/testcases/block/09_html/markdown_attr.html +38 -0
- data/test/testcases/block/09_html/markdown_attr.text +38 -0
- data/test/testcases/block/09_html/not_parsed.html +24 -0
- data/test/testcases/block/09_html/not_parsed.text +24 -0
- data/test/testcases/block/09_html/parse_as_raw.html +35 -0
- data/test/testcases/block/09_html/parse_as_raw.htmlinput +34 -0
- data/test/testcases/block/09_html/parse_as_raw.options +1 -0
- data/test/testcases/block/09_html/parse_as_raw.text +33 -0
- data/test/testcases/block/09_html/parse_as_span.html +12 -0
- data/test/testcases/block/09_html/parse_as_span.htmlinput +12 -0
- data/test/testcases/block/09_html/parse_as_span.options +1 -0
- data/test/testcases/block/09_html/parse_as_span.text +9 -0
- data/test/testcases/block/09_html/parse_block_html.html +21 -0
- data/test/testcases/block/09_html/parse_block_html.options +1 -0
- data/test/testcases/block/09_html/parse_block_html.text +17 -0
- data/test/testcases/block/09_html/processing_instruction.html +13 -0
- data/test/testcases/block/09_html/processing_instruction.text +12 -0
- data/test/testcases/block/09_html/simple.html +64 -0
- data/test/testcases/block/09_html/simple.html.19 +64 -0
- data/test/testcases/block/09_html/simple.options +1 -0
- data/test/testcases/block/09_html/simple.text +59 -0
- data/test/testcases/block/10_ald/simple.html +2 -0
- data/test/testcases/block/10_ald/simple.text +8 -0
- data/test/testcases/block/11_ial/auto_id_and_ial.html +1 -0
- data/test/testcases/block/11_ial/auto_id_and_ial.options +1 -0
- data/test/testcases/block/11_ial/auto_id_and_ial.text +2 -0
- data/test/testcases/block/11_ial/nested.html +11 -0
- data/test/testcases/block/11_ial/nested.text +15 -0
- data/test/testcases/block/11_ial/simple.html +25 -0
- data/test/testcases/block/11_ial/simple.text +34 -0
- data/test/testcases/block/12_extension/comment.html +8 -0
- data/test/testcases/block/12_extension/comment.text +12 -0
- data/test/testcases/block/12_extension/ignored.html +8 -0
- data/test/testcases/block/12_extension/ignored.text +8 -0
- data/test/testcases/block/12_extension/nomarkdown.html +10 -0
- data/test/testcases/block/12_extension/nomarkdown.kramdown +20 -0
- data/test/testcases/block/12_extension/nomarkdown.latex +13 -0
- data/test/testcases/block/12_extension/nomarkdown.text +21 -0
- data/test/testcases/block/12_extension/options.html +21 -0
- data/test/testcases/block/12_extension/options.text +21 -0
- data/test/testcases/block/12_extension/options2.html +10 -0
- data/test/testcases/block/12_extension/options2.text +5 -0
- data/test/testcases/block/12_extension/options3.html +7 -0
- data/test/testcases/block/12_extension/options3.text +7 -0
- data/test/testcases/block/13_definition_list/definition_at_beginning.html +1 -0
- data/test/testcases/block/13_definition_list/definition_at_beginning.text +1 -0
- data/test/testcases/block/13_definition_list/item_ial.html +12 -0
- data/test/testcases/block/13_definition_list/item_ial.text +8 -0
- data/test/testcases/block/13_definition_list/multiple_terms.html +13 -0
- data/test/testcases/block/13_definition_list/multiple_terms.text +10 -0
- data/test/testcases/block/13_definition_list/no_def_list.html +2 -0
- data/test/testcases/block/13_definition_list/no_def_list.text +2 -0
- data/test/testcases/block/13_definition_list/para_wrapping.html +10 -0
- data/test/testcases/block/13_definition_list/para_wrapping.text +6 -0
- data/test/testcases/block/13_definition_list/separated_by_eob.html +8 -0
- data/test/testcases/block/13_definition_list/separated_by_eob.text +5 -0
- data/test/testcases/block/13_definition_list/simple.html +8 -0
- data/test/testcases/block/13_definition_list/simple.text +7 -0
- data/test/testcases/block/13_definition_list/styled_terms.html +4 -0
- data/test/testcases/block/13_definition_list/styled_terms.text +2 -0
- data/test/testcases/block/13_definition_list/too_much_space.html +3 -0
- data/test/testcases/block/13_definition_list/too_much_space.text +4 -0
- data/test/testcases/block/13_definition_list/with_blocks.html +38 -0
- data/test/testcases/block/13_definition_list/with_blocks.text +24 -0
- data/test/testcases/block/14_table/errors.html +8 -0
- data/test/testcases/block/14_table/errors.text +9 -0
- data/test/testcases/block/14_table/escaping.html +52 -0
- data/test/testcases/block/14_table/escaping.text +19 -0
- data/test/testcases/block/14_table/footer.html +65 -0
- data/test/testcases/block/14_table/footer.text +25 -0
- data/test/testcases/block/14_table/header.html +96 -0
- data/test/testcases/block/14_table/header.text +32 -0
- data/test/testcases/block/14_table/no_table.html +3 -0
- data/test/testcases/block/14_table/no_table.text +3 -0
- data/test/testcases/block/14_table/simple.html +177 -0
- data/test/testcases/block/14_table/simple.html.19 +177 -0
- data/test/testcases/block/14_table/simple.text +49 -0
- data/test/testcases/block/14_table/table_with_footnote.html +25 -0
- data/test/testcases/block/14_table/table_with_footnote.latex +11 -0
- data/test/testcases/block/14_table/table_with_footnote.text +6 -0
- data/test/testcases/block/15_math/normal.html +26 -0
- data/test/testcases/block/15_math/normal.text +28 -0
- data/test/testcases/block/16_toc/no_toc.html +33 -0
- data/test/testcases/block/16_toc/no_toc.options +1 -0
- data/test/testcases/block/16_toc/no_toc.text +16 -0
- data/test/testcases/block/16_toc/toc_levels.html +24 -0
- data/test/testcases/block/16_toc/toc_levels.options +1 -0
- data/test/testcases/block/16_toc/toc_levels.text +16 -0
- data/test/testcases/block/17_github_codeblock/backtick_syntax.html +7 -0
- data/test/testcases/block/17_github_codeblock/backtick_syntax.text +9 -0
- data/test/testcases/block/17_github_codeblock/error.html +4 -0
- data/test/testcases/block/17_github_codeblock/error.text +4 -0
- data/test/testcases/block/17_github_codeblock/no_newline_at_end.html +2 -0
- data/test/testcases/block/17_github_codeblock/no_newline_at_end.text +3 -0
- data/test/testcases/encoding.html +46 -0
- data/test/testcases/encoding.text +28 -0
- data/test/testcases/span/01_link/empty.html +5 -0
- data/test/testcases/span/01_link/empty.text +5 -0
- data/test/testcases/span/01_link/image_in_a.html +5 -0
- data/test/testcases/span/01_link/image_in_a.text +5 -0
- data/test/testcases/span/01_link/imagelinks.html +14 -0
- data/test/testcases/span/01_link/imagelinks.text +16 -0
- data/test/testcases/span/01_link/inline.html +46 -0
- data/test/testcases/span/01_link/inline.html.19 +46 -0
- data/test/testcases/span/01_link/inline.text +48 -0
- data/test/testcases/span/01_link/link_defs.html +9 -0
- data/test/testcases/span/01_link/link_defs.text +26 -0
- data/test/testcases/span/01_link/links_with_angle_brackets.html +3 -0
- data/test/testcases/span/01_link/links_with_angle_brackets.text +3 -0
- data/test/testcases/span/01_link/reference.html +36 -0
- data/test/testcases/span/01_link/reference.html.19 +36 -0
- data/test/testcases/span/01_link/reference.text +50 -0
- data/test/testcases/span/02_emphasis/empty.html +3 -0
- data/test/testcases/span/02_emphasis/empty.text +3 -0
- data/test/testcases/span/02_emphasis/errors.html +9 -0
- data/test/testcases/span/02_emphasis/errors.text +9 -0
- data/test/testcases/span/02_emphasis/nesting.html +38 -0
- data/test/testcases/span/02_emphasis/nesting.text +33 -0
- data/test/testcases/span/02_emphasis/normal.html +46 -0
- data/test/testcases/span/02_emphasis/normal.text +46 -0
- data/test/testcases/span/03_codespan/empty.html +5 -0
- data/test/testcases/span/03_codespan/empty.text +5 -0
- data/test/testcases/span/03_codespan/errors.html +1 -0
- data/test/testcases/span/03_codespan/errors.text +1 -0
- data/test/testcases/span/03_codespan/highlighting.html +1 -0
- data/test/testcases/span/03_codespan/highlighting.text +1 -0
- data/test/testcases/span/03_codespan/normal.html +16 -0
- data/test/testcases/span/03_codespan/normal.text +16 -0
- data/test/testcases/span/04_footnote/definitions.html +17 -0
- data/test/testcases/span/04_footnote/definitions.latex +17 -0
- data/test/testcases/span/04_footnote/definitions.text +24 -0
- data/test/testcases/span/04_footnote/footnote_nr.html +12 -0
- data/test/testcases/span/04_footnote/footnote_nr.latex +2 -0
- data/test/testcases/span/04_footnote/footnote_nr.options +1 -0
- data/test/testcases/span/04_footnote/footnote_nr.text +4 -0
- data/test/testcases/span/04_footnote/markers.html +46 -0
- data/test/testcases/span/04_footnote/markers.latex +23 -0
- data/test/testcases/span/04_footnote/markers.text +26 -0
- data/test/testcases/span/05_html/across_lines.html +1 -0
- data/test/testcases/span/05_html/across_lines.text +2 -0
- data/test/testcases/span/05_html/invalid.html +1 -0
- data/test/testcases/span/05_html/invalid.text +1 -0
- data/test/testcases/span/05_html/link_with_mailto.html +1 -0
- data/test/testcases/span/05_html/link_with_mailto.text +1 -0
- data/test/testcases/span/05_html/markdown_attr.html +6 -0
- data/test/testcases/span/05_html/markdown_attr.text +6 -0
- data/test/testcases/span/05_html/normal.html +34 -0
- data/test/testcases/span/05_html/normal.text +34 -0
- data/test/testcases/span/abbreviations/abbrev.html +8 -0
- data/test/testcases/span/abbreviations/abbrev.text +15 -0
- data/test/testcases/span/abbreviations/abbrev_defs.html +2 -0
- data/test/testcases/span/abbreviations/abbrev_defs.text +5 -0
- data/test/testcases/span/autolinks/url_links.html +12 -0
- data/test/testcases/span/autolinks/url_links.text +12 -0
- data/test/testcases/span/escaped_chars/normal.html +47 -0
- data/test/testcases/span/escaped_chars/normal.text +47 -0
- data/test/testcases/span/extension/comment.html +6 -0
- data/test/testcases/span/extension/comment.text +6 -0
- data/test/testcases/span/extension/ignored.html +1 -0
- data/test/testcases/span/extension/ignored.text +1 -0
- data/test/testcases/span/extension/nomarkdown.html +1 -0
- data/test/testcases/span/extension/nomarkdown.text +1 -0
- data/test/testcases/span/extension/options.html +1 -0
- data/test/testcases/span/extension/options.text +1 -0
- data/test/testcases/span/ial/simple.html +6 -0
- data/test/testcases/span/ial/simple.text +6 -0
- data/test/testcases/span/line_breaks/normal.html +11 -0
- data/test/testcases/span/line_breaks/normal.latex +12 -0
- data/test/testcases/span/line_breaks/normal.text +11 -0
- data/test/testcases/span/math/normal.html +5 -0
- data/test/testcases/span/math/normal.text +5 -0
- data/test/testcases/span/text_substitutions/entities.html +6 -0
- data/test/testcases/span/text_substitutions/entities.options +1 -0
- data/test/testcases/span/text_substitutions/entities.text +6 -0
- data/test/testcases/span/text_substitutions/entities_as_char.html +1 -0
- data/test/testcases/span/text_substitutions/entities_as_char.html.19 +1 -0
- data/test/testcases/span/text_substitutions/entities_as_char.options +1 -0
- data/test/testcases/span/text_substitutions/entities_as_char.text +1 -0
- data/test/testcases/span/text_substitutions/entities_as_input.html +1 -0
- data/test/testcases/span/text_substitutions/entities_as_input.options +1 -0
- data/test/testcases/span/text_substitutions/entities_as_input.text +1 -0
- data/test/testcases/span/text_substitutions/entities_numeric.html +1 -0
- data/test/testcases/span/text_substitutions/entities_numeric.options +1 -0
- data/test/testcases/span/text_substitutions/entities_numeric.text +1 -0
- data/test/testcases/span/text_substitutions/entities_symbolic.html +1 -0
- data/test/testcases/span/text_substitutions/entities_symbolic.options +1 -0
- data/test/testcases/span/text_substitutions/entities_symbolic.text +1 -0
- data/test/testcases/span/text_substitutions/greaterthan.html +1 -0
- data/test/testcases/span/text_substitutions/greaterthan.text +1 -0
- data/test/testcases/span/text_substitutions/lowerthan.html +1 -0
- data/test/testcases/span/text_substitutions/lowerthan.text +1 -0
- data/test/testcases/span/text_substitutions/typography.html +18 -0
- data/test/testcases/span/text_substitutions/typography.html.19 +18 -0
- data/test/testcases/span/text_substitutions/typography.text +18 -0
- metadata +817 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
#--
|
|
4
|
+
# Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of kramdown.
|
|
7
|
+
#
|
|
8
|
+
# kramdown is free software: you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
#++
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
require 'kramdown/parser/kramdown/block_boundary'
|
|
24
|
+
|
|
25
|
+
module Kramdown
|
|
26
|
+
module Parser
|
|
27
|
+
class Kramdown
|
|
28
|
+
|
|
29
|
+
TABLE_SEP_LINE = /^([+|: -]*?-[+|: -]*?)[ \t]*\n/
|
|
30
|
+
TABLE_HSEP_ALIGN = /[ ]?(:?)-+(:?)[ ]?/
|
|
31
|
+
TABLE_FSEP_LINE = /^[+|: =]*?=[+|: =]*?[ \t]*\n/
|
|
32
|
+
TABLE_ROW_LINE = /^(.*?)[ \t]*\n/
|
|
33
|
+
TABLE_PIPE_CHECK = /(?:\||.*?[^\\\n]\|)/
|
|
34
|
+
TABLE_LINE = /#{TABLE_PIPE_CHECK}.*?\n/
|
|
35
|
+
TABLE_START = /^#{OPT_SPACE}(?=\S)#{TABLE_LINE}/
|
|
36
|
+
|
|
37
|
+
# Parse the table at the current location.
|
|
38
|
+
def parse_table
|
|
39
|
+
return false if !after_block_boundary?
|
|
40
|
+
|
|
41
|
+
orig_pos = @src.pos
|
|
42
|
+
table = new_block_el(:table, nil, nil, :alignment => [])
|
|
43
|
+
leading_pipe = (@src.check(TABLE_LINE) =~ /^\s*\|/)
|
|
44
|
+
@src.scan(TABLE_SEP_LINE)
|
|
45
|
+
|
|
46
|
+
rows = []
|
|
47
|
+
has_footer = false
|
|
48
|
+
columns = 0
|
|
49
|
+
|
|
50
|
+
add_container = lambda do |type, force|
|
|
51
|
+
if !has_footer || type != :tbody || force
|
|
52
|
+
cont = Element.new(type)
|
|
53
|
+
cont.children, rows = rows, []
|
|
54
|
+
table.children << cont
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
while !@src.eos?
|
|
59
|
+
break if !@src.check(TABLE_LINE)
|
|
60
|
+
if @src.scan(TABLE_SEP_LINE) && !rows.empty?
|
|
61
|
+
if table.options[:alignment].empty? && !has_footer
|
|
62
|
+
add_container.call(:thead, false)
|
|
63
|
+
table.options[:alignment] = @src[1].scan(TABLE_HSEP_ALIGN).map do |left, right|
|
|
64
|
+
(left.empty? && right.empty? && :default) || (right.empty? && :left) || (left.empty? && :right) || :center
|
|
65
|
+
end
|
|
66
|
+
else # treat as normal separator line
|
|
67
|
+
add_container.call(:tbody, false)
|
|
68
|
+
end
|
|
69
|
+
elsif @src.scan(TABLE_FSEP_LINE)
|
|
70
|
+
add_container.call(:tbody, true) if !rows.empty?
|
|
71
|
+
has_footer = true
|
|
72
|
+
elsif @src.scan(TABLE_ROW_LINE)
|
|
73
|
+
trow = Element.new(:tr)
|
|
74
|
+
|
|
75
|
+
# parse possible code spans on the line and correctly split the line into cells
|
|
76
|
+
env = save_env
|
|
77
|
+
cells = []
|
|
78
|
+
@src[1].split(/(<code.*?>.*?<\/code>)/).each_with_index do |str, i|
|
|
79
|
+
if i % 2 == 1
|
|
80
|
+
(cells.empty? ? cells : cells.last) << str
|
|
81
|
+
else
|
|
82
|
+
reset_env(:src => StringScanner.new(str))
|
|
83
|
+
root = Element.new(:root)
|
|
84
|
+
parse_spans(root, nil, [:codespan])
|
|
85
|
+
|
|
86
|
+
root.children.each do |c|
|
|
87
|
+
if c.type == :raw_text
|
|
88
|
+
# Only on Ruby 1.9: f, *l = c.value.split(/(?<!\\)\|/).map {|t| t.gsub(/\\\|/, '|')}
|
|
89
|
+
f, *l = c.value.split(/\\\|/, -1).map {|t| t.split(/\|/, -1)}.inject([]) do |memo, t|
|
|
90
|
+
memo.last << "|#{t.shift}" if memo.size > 0
|
|
91
|
+
memo.concat(t)
|
|
92
|
+
end
|
|
93
|
+
(cells.empty? ? cells : cells.last) << f
|
|
94
|
+
cells.concat(l)
|
|
95
|
+
else
|
|
96
|
+
delim = (c.value.scan(/`+/).max || '') + '`'
|
|
97
|
+
tmp = "#{delim}#{' ' if delim.size > 1}#{c.value}#{' ' if delim.size > 1}#{delim}"
|
|
98
|
+
(cells.empty? ? cells : cells.last) << tmp
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
restore_env(env)
|
|
104
|
+
|
|
105
|
+
cells.shift if leading_pipe && cells.first.strip.empty?
|
|
106
|
+
cells.pop if cells.last.strip.empty?
|
|
107
|
+
cells.each do |cell_text|
|
|
108
|
+
tcell = Element.new(:td)
|
|
109
|
+
tcell.children << Element.new(:raw_text, cell_text.strip)
|
|
110
|
+
trow.children << tcell
|
|
111
|
+
end
|
|
112
|
+
columns = [columns, cells.length].max
|
|
113
|
+
rows << trow
|
|
114
|
+
else
|
|
115
|
+
break
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
if !before_block_boundary?
|
|
120
|
+
@src.pos = orig_pos
|
|
121
|
+
return false
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Parse all lines of the table with the code span parser
|
|
125
|
+
env = save_env
|
|
126
|
+
reset_env(:src => StringScanner.new(extract_string(orig_pos...(@src.pos-1), @src)))
|
|
127
|
+
root = Element.new(:root)
|
|
128
|
+
parse_spans(root, nil, [:codespan])
|
|
129
|
+
restore_env(env)
|
|
130
|
+
|
|
131
|
+
# Check if each line has at least one unescaped backslash that is not inside a code span
|
|
132
|
+
pipe_on_line = false
|
|
133
|
+
while (c = root.children.shift)
|
|
134
|
+
lines = c.value.split(/\n/)
|
|
135
|
+
if c.type == :codespan
|
|
136
|
+
if lines.size > 2 || (lines.size == 2 && !pipe_on_line)
|
|
137
|
+
break
|
|
138
|
+
elsif lines.size == 2 && pipe_on_line
|
|
139
|
+
pipe_on_line = false
|
|
140
|
+
end
|
|
141
|
+
else
|
|
142
|
+
break if lines.size > 1 && !pipe_on_line && lines.first !~ /^#{TABLE_PIPE_CHECK}/
|
|
143
|
+
pipe_on_line = (lines.size > 1 ? false : pipe_on_line) || (lines.last =~ /^#{TABLE_PIPE_CHECK}/)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
@src.pos = orig_pos and return false if !pipe_on_line
|
|
147
|
+
|
|
148
|
+
add_container.call(has_footer ? :tfoot : :tbody, false) if !rows.empty?
|
|
149
|
+
|
|
150
|
+
if !table.children.any? {|el| el.type == :tbody}
|
|
151
|
+
warning("Found table without body - ignoring it")
|
|
152
|
+
@src.pos = orig_pos
|
|
153
|
+
return false
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# adjust all table rows to have equal number of columns, same for alignment defs
|
|
157
|
+
table.children.each do |kind|
|
|
158
|
+
kind.children.each do |row|
|
|
159
|
+
(columns - row.children.length).times do
|
|
160
|
+
row.children << Element.new(:td)
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
if table.options[:alignment].length > columns
|
|
165
|
+
table.options[:alignment] = table.options[:alignment][0...columns]
|
|
166
|
+
else
|
|
167
|
+
table.options[:alignment] += [:default] * (columns - table.options[:alignment].length)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
@tree.children << table
|
|
171
|
+
|
|
172
|
+
true
|
|
173
|
+
end
|
|
174
|
+
define_parser(:table, TABLE_START)
|
|
175
|
+
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
#--
|
|
4
|
+
# Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of kramdown.
|
|
7
|
+
#
|
|
8
|
+
# kramdown is free software: you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
#++
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
module Kramdown
|
|
24
|
+
module Parser
|
|
25
|
+
class Kramdown
|
|
26
|
+
|
|
27
|
+
TYPOGRAPHIC_SYMS = [['---', :mdash], ['--', :ndash], ['...', :hellip],
|
|
28
|
+
['\\<<', '<<'], ['\\>>', '>>'],
|
|
29
|
+
['<< ', :laquo_space], [' >>', :raquo_space],
|
|
30
|
+
['<<', :laquo], ['>>', :raquo]]
|
|
31
|
+
TYPOGRAPHIC_SYMS_SUBST = Hash[*TYPOGRAPHIC_SYMS.flatten]
|
|
32
|
+
TYPOGRAPHIC_SYMS_RE = /#{TYPOGRAPHIC_SYMS.map {|k,v| Regexp.escape(k)}.join('|')}/
|
|
33
|
+
|
|
34
|
+
# Parse the typographic symbols at the current location.
|
|
35
|
+
def parse_typographic_syms
|
|
36
|
+
@src.pos += @src.matched_size
|
|
37
|
+
val = TYPOGRAPHIC_SYMS_SUBST[@src.matched]
|
|
38
|
+
if val.kind_of?(Symbol)
|
|
39
|
+
@tree.children << Element.new(:typographic_sym, val)
|
|
40
|
+
elsif @src.matched == '\\<<'
|
|
41
|
+
@tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('lt'))
|
|
42
|
+
@tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('lt'))
|
|
43
|
+
else
|
|
44
|
+
@tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('gt'))
|
|
45
|
+
@tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('gt'))
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
define_parser(:typographic_syms, TYPOGRAPHIC_SYMS_RE, '--|\\.\\.\\.|(?:\\\\| )?(?:<<|>>)')
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
#--
|
|
4
|
+
# Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of kramdown.
|
|
7
|
+
#
|
|
8
|
+
# kramdown is free software: you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
#++
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
require 'kramdown/parser/kramdown'
|
|
24
|
+
|
|
25
|
+
module Kramdown
|
|
26
|
+
|
|
27
|
+
module Parser
|
|
28
|
+
|
|
29
|
+
# Used for parsing a document in Markdown format.
|
|
30
|
+
#
|
|
31
|
+
# This parser is based on the kramdown parser and removes the parser methods for the additional
|
|
32
|
+
# non-Markdown features. However, since some things are handled differently by the kramdown
|
|
33
|
+
# parser methods (like deciding when a list item contains just text), this parser differs from
|
|
34
|
+
# real Markdown parsers in some respects.
|
|
35
|
+
#
|
|
36
|
+
# Note, though, that the parser basically fails just one of the Markdown test cases (some others
|
|
37
|
+
# also fail but those failures are negligible).
|
|
38
|
+
class Markdown < Kramdown
|
|
39
|
+
|
|
40
|
+
# Array with all the parsing methods that should be removed from the standard kramdown parser.
|
|
41
|
+
EXTENDED = [:codeblock_fenced, :table, :definition_list, :footnote_definition, :abbrev_definition, :block_math,
|
|
42
|
+
:block_extensions,
|
|
43
|
+
:footnote_marker, :smart_quotes, :inline_math, :span_extensions, :typographic_syms]
|
|
44
|
+
|
|
45
|
+
def initialize(source, options) # :nodoc:
|
|
46
|
+
super
|
|
47
|
+
@block_parsers.delete_if {|i| EXTENDED.include?(i)}
|
|
48
|
+
@span_parsers.delete_if {|i| EXTENDED.include?(i)}
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# :stopdoc:
|
|
52
|
+
|
|
53
|
+
BLOCK_BOUNDARY = /#{BLANK_LINE}|#{EOB_MARKER}|\Z/
|
|
54
|
+
LAZY_END = /#{BLANK_LINE}|#{EOB_MARKER}|^#{OPT_SPACE}#{LAZY_END_HTML_STOP}|^#{OPT_SPACE}#{LAZY_END_HTML_START}|\Z/
|
|
55
|
+
CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:#{INDENT}[ \t]*\S.*\n)+)*/
|
|
56
|
+
PARAGRAPH_END = LAZY_END
|
|
57
|
+
|
|
58
|
+
IAL_RAND_CHARS = (('a'..'z').to_a + ('0'..'9').to_a)
|
|
59
|
+
IAL_RAND_STRING = (1..20).collect {|a| IAL_RAND_CHARS[rand(IAL_RAND_CHARS.size)]}.join
|
|
60
|
+
LIST_ITEM_IAL = /^\s*(#{IAL_RAND_STRING})?\s*\n/
|
|
61
|
+
IAL_SPAN_START = LIST_ITEM_IAL
|
|
62
|
+
|
|
63
|
+
# :startdoc:
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
#--
|
|
4
|
+
# Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of kramdown.
|
|
7
|
+
#
|
|
8
|
+
# kramdown is free software: you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
#++
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
module Kramdown
|
|
24
|
+
|
|
25
|
+
# == \Utils Module
|
|
26
|
+
#
|
|
27
|
+
# This module contains utility class/modules/methods that can be used by both parsers and
|
|
28
|
+
# converters.
|
|
29
|
+
module Utils
|
|
30
|
+
|
|
31
|
+
autoload :Entities, 'kramdown/utils/entities'
|
|
32
|
+
autoload :Html, 'kramdown/utils/html'
|
|
33
|
+
autoload :OrderedHash, 'kramdown/utils/ordered_hash'
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
#--
|
|
4
|
+
# Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of kramdown.
|
|
7
|
+
#
|
|
8
|
+
# kramdown is free software: you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
#++
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
module Kramdown
|
|
24
|
+
|
|
25
|
+
module Utils
|
|
26
|
+
|
|
27
|
+
# Provides convenience methods for handling named and numeric entities.
|
|
28
|
+
module Entities
|
|
29
|
+
|
|
30
|
+
# Represents an entity that has a +code_point+ and +name+.
|
|
31
|
+
class Entity < Struct.new(:code_point, :name)
|
|
32
|
+
|
|
33
|
+
# Return the UTF8 representation of the entity.
|
|
34
|
+
def char
|
|
35
|
+
[code_point].pack('U*') rescue nil
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Array of arrays. Each sub-array specifies a code point and the associated name.
|
|
41
|
+
#
|
|
42
|
+
# This table is not used directly -- Entity objects are automatically created from it and put
|
|
43
|
+
# into a Hash map when this file is loaded.
|
|
44
|
+
ENTITY_TABLE = [
|
|
45
|
+
[913, 'Alpha'],
|
|
46
|
+
[914, 'Beta'],
|
|
47
|
+
[915, 'Gamma'],
|
|
48
|
+
[916, 'Delta'],
|
|
49
|
+
[917, 'Epsilon'],
|
|
50
|
+
[918, 'Zeta'],
|
|
51
|
+
[919, 'Eta'],
|
|
52
|
+
[920, 'Theta'],
|
|
53
|
+
[921, 'Iota'],
|
|
54
|
+
[922, 'Kappa'],
|
|
55
|
+
[923, 'Lambda'],
|
|
56
|
+
[924, 'Mu'],
|
|
57
|
+
[925, 'Nu'],
|
|
58
|
+
[926, 'Xi'],
|
|
59
|
+
[927, 'Omicron'],
|
|
60
|
+
[928, 'Pi'],
|
|
61
|
+
[929, 'Rho'],
|
|
62
|
+
[931, 'Sigma'],
|
|
63
|
+
[932, 'Tau'],
|
|
64
|
+
[933, 'Upsilon'],
|
|
65
|
+
[934, 'Phi'],
|
|
66
|
+
[935, 'Chi'],
|
|
67
|
+
[936, 'Psi'],
|
|
68
|
+
[937, 'Omega'],
|
|
69
|
+
[945, 'alpha'],
|
|
70
|
+
[946, 'beta'],
|
|
71
|
+
[947, 'gamma'],
|
|
72
|
+
[948, 'delta'],
|
|
73
|
+
[949, 'epsilon'],
|
|
74
|
+
[950, 'zeta'],
|
|
75
|
+
[951, 'eta'],
|
|
76
|
+
[952, 'theta'],
|
|
77
|
+
[953, 'iota'],
|
|
78
|
+
[954, 'kappa'],
|
|
79
|
+
[955, 'lambda'],
|
|
80
|
+
[956, 'mu'],
|
|
81
|
+
[957, 'nu'],
|
|
82
|
+
[958, 'xi'],
|
|
83
|
+
[959, 'omicron'],
|
|
84
|
+
[960, 'pi'],
|
|
85
|
+
[961, 'rho'],
|
|
86
|
+
[963, 'sigma'],
|
|
87
|
+
[964, 'tau'],
|
|
88
|
+
[965, 'upsilon'],
|
|
89
|
+
[966, 'phi'],
|
|
90
|
+
[967, 'chi'],
|
|
91
|
+
[968, 'psi'],
|
|
92
|
+
[969, 'omega'],
|
|
93
|
+
[962, 'sigmaf'],
|
|
94
|
+
[977, 'thetasym'],
|
|
95
|
+
[982, 'piv'],
|
|
96
|
+
[8230, 'hellip'],
|
|
97
|
+
[8242, 'prime'],
|
|
98
|
+
[8254, 'oline'],
|
|
99
|
+
[8260, 'frasl'],
|
|
100
|
+
[8472, 'weierp'],
|
|
101
|
+
[8465, 'image'],
|
|
102
|
+
[8476, 'real'],
|
|
103
|
+
[8501, 'alefsym'],
|
|
104
|
+
[8226, 'bull'],
|
|
105
|
+
[8482, 'trade'],
|
|
106
|
+
[8592, 'larr'],
|
|
107
|
+
[8594, 'rarr'],
|
|
108
|
+
[8593, 'uarr'],
|
|
109
|
+
[8595, 'darr'],
|
|
110
|
+
[8596, 'harr'],
|
|
111
|
+
[8629, 'crarr'],
|
|
112
|
+
[8657, 'uArr'],
|
|
113
|
+
[8659, 'dArr'],
|
|
114
|
+
[8656, 'lArr'],
|
|
115
|
+
[8658, 'rArr'],
|
|
116
|
+
[8660, 'hArr'],
|
|
117
|
+
[8704, 'forall'],
|
|
118
|
+
[8706, 'part'],
|
|
119
|
+
[8707, 'exist'],
|
|
120
|
+
[8709, 'empty'],
|
|
121
|
+
[8711, 'nabla'],
|
|
122
|
+
[8712, 'isin'],
|
|
123
|
+
[8715, 'ni'],
|
|
124
|
+
[8713, 'notin'],
|
|
125
|
+
[8721, 'sum'],
|
|
126
|
+
[8719, 'prod'],
|
|
127
|
+
[8722, 'minus'],
|
|
128
|
+
[8727, 'lowast'],
|
|
129
|
+
[8730, 'radic'],
|
|
130
|
+
[8733, 'prop'],
|
|
131
|
+
[8734, 'infin'],
|
|
132
|
+
[8736, 'ang'],
|
|
133
|
+
[8743, 'and'],
|
|
134
|
+
[8744, 'or'],
|
|
135
|
+
[8745, 'cup'],
|
|
136
|
+
[8746, 'cap'],
|
|
137
|
+
[8747, 'int'],
|
|
138
|
+
[8756, 'there4'],
|
|
139
|
+
[8764, 'sim'],
|
|
140
|
+
[8776, 'asymp'],
|
|
141
|
+
[8773, 'cong'],
|
|
142
|
+
[8800, 'ne'],
|
|
143
|
+
[8801, 'equiv'],
|
|
144
|
+
[8804, 'le'],
|
|
145
|
+
[8805, 'ge'],
|
|
146
|
+
[8834, 'sub'],
|
|
147
|
+
[8835, 'sup'],
|
|
148
|
+
[8838, 'sube'],
|
|
149
|
+
[8839, 'supe'],
|
|
150
|
+
[8836, 'nsub'],
|
|
151
|
+
[8853, 'oplus'],
|
|
152
|
+
[8855, 'otimes'],
|
|
153
|
+
[8869, 'perp'],
|
|
154
|
+
[8901, 'sdot'],
|
|
155
|
+
[8968, 'rceil'],
|
|
156
|
+
[8969, 'lceil'],
|
|
157
|
+
[8970, 'lfloor'],
|
|
158
|
+
[8971, 'rfloor'],
|
|
159
|
+
[9001, 'rang'],
|
|
160
|
+
[9002, 'lang'],
|
|
161
|
+
[9674, 'loz'],
|
|
162
|
+
[9824, 'spades'],
|
|
163
|
+
[9827, 'clubs'],
|
|
164
|
+
[9829, 'hearts'],
|
|
165
|
+
[9830, 'diams'],
|
|
166
|
+
[38, 'amp'],
|
|
167
|
+
[34, 'quot'],
|
|
168
|
+
[39, 'apos'],
|
|
169
|
+
[169, 'copy'],
|
|
170
|
+
[60, 'lt'],
|
|
171
|
+
[62, 'gt'],
|
|
172
|
+
[338, 'OElig'],
|
|
173
|
+
[339, 'oelig'],
|
|
174
|
+
[352, 'Scaron'],
|
|
175
|
+
[353, 'scaron'],
|
|
176
|
+
[376, 'Yuml'],
|
|
177
|
+
[710, 'circ'],
|
|
178
|
+
[732, 'tilde'],
|
|
179
|
+
[8211, 'ndash'],
|
|
180
|
+
[8212, 'mdash'],
|
|
181
|
+
[8216, 'lsquo'],
|
|
182
|
+
[8217, 'rsquo'],
|
|
183
|
+
[8220, 'ldquo'],
|
|
184
|
+
[8221, 'rdquo'],
|
|
185
|
+
[8224, 'dagger'],
|
|
186
|
+
[8225, 'Dagger'],
|
|
187
|
+
[8240, 'permil'],
|
|
188
|
+
[8364, 'euro'],
|
|
189
|
+
[8249, 'lsaquo'],
|
|
190
|
+
[8250, 'rsaquo'],
|
|
191
|
+
[160, 'nbsp'],
|
|
192
|
+
[161, 'iexcl'],
|
|
193
|
+
[163, 'pound'],
|
|
194
|
+
[164, 'curren'],
|
|
195
|
+
[165, 'yen'],
|
|
196
|
+
[166, 'brvbar'],
|
|
197
|
+
[167, 'sect'],
|
|
198
|
+
[171, 'laquo'],
|
|
199
|
+
[187, 'raquo'],
|
|
200
|
+
[174, 'reg'],
|
|
201
|
+
[170, 'ordf'],
|
|
202
|
+
[172, 'not'],
|
|
203
|
+
[176, 'deg'],
|
|
204
|
+
[177, 'plusmn'],
|
|
205
|
+
[180, 'acute'],
|
|
206
|
+
[181, 'micro'],
|
|
207
|
+
[182, 'para'],
|
|
208
|
+
[183, 'middot'],
|
|
209
|
+
[186, 'ordm'],
|
|
210
|
+
[162, 'cent'],
|
|
211
|
+
[185, 'sup1'],
|
|
212
|
+
[178, 'sup2'],
|
|
213
|
+
[179, 'sup3'],
|
|
214
|
+
[189, 'frac12'],
|
|
215
|
+
[188, 'frac14'],
|
|
216
|
+
[190, 'frac34'],
|
|
217
|
+
[192, 'Agrave'],
|
|
218
|
+
[193, 'Aacute'],
|
|
219
|
+
[194, 'Acirc'],
|
|
220
|
+
[195, 'Atilde'],
|
|
221
|
+
[196, 'Auml'],
|
|
222
|
+
[197, 'Aring'],
|
|
223
|
+
[198, 'AElig'],
|
|
224
|
+
[199, 'Ccedil'],
|
|
225
|
+
[200, 'Egrave'],
|
|
226
|
+
[201, 'Eacute'],
|
|
227
|
+
[202, 'Ecirc'],
|
|
228
|
+
[203, 'Euml'],
|
|
229
|
+
[204, 'Igrave'],
|
|
230
|
+
[205, 'Iacute'],
|
|
231
|
+
[206, 'Icirc'],
|
|
232
|
+
[207, 'Iuml'],
|
|
233
|
+
[208, 'ETH'],
|
|
234
|
+
[209, 'Ntilde'],
|
|
235
|
+
[210, 'Ograve'],
|
|
236
|
+
[211, 'Oacute'],
|
|
237
|
+
[212, 'Ocirc'],
|
|
238
|
+
[213, 'Otilde'],
|
|
239
|
+
[214, 'Ouml'],
|
|
240
|
+
[215, 'times'],
|
|
241
|
+
[216, 'Oslash'],
|
|
242
|
+
[217, 'Ugrave'],
|
|
243
|
+
[218, 'Uacute'],
|
|
244
|
+
[219, 'Ucirc'],
|
|
245
|
+
[220, 'Uuml'],
|
|
246
|
+
[221, 'Yacute'],
|
|
247
|
+
[222, 'THORN'],
|
|
248
|
+
[223, 'szlig'],
|
|
249
|
+
[224, 'agrave'],
|
|
250
|
+
[225, 'aacute'],
|
|
251
|
+
[226, 'acirc'],
|
|
252
|
+
[227, 'atilde'],
|
|
253
|
+
[228, 'auml'],
|
|
254
|
+
[229, 'aring'],
|
|
255
|
+
[230, 'aelig'],
|
|
256
|
+
[231, 'ccedil'],
|
|
257
|
+
[232, 'egrave'],
|
|
258
|
+
[233, 'eacute'],
|
|
259
|
+
[234, 'ecirc'],
|
|
260
|
+
[235, 'euml'],
|
|
261
|
+
[236, 'igrave'],
|
|
262
|
+
[237, 'iacute'],
|
|
263
|
+
[238, 'icirc'],
|
|
264
|
+
[239, 'iuml'],
|
|
265
|
+
[240, 'eth'],
|
|
266
|
+
[241, 'ntilde'],
|
|
267
|
+
[242, 'ograve'],
|
|
268
|
+
[243, 'oacute'],
|
|
269
|
+
[244, 'ocirc'],
|
|
270
|
+
[245, 'otilde'],
|
|
271
|
+
[246, 'ouml'],
|
|
272
|
+
[247, 'divide'],
|
|
273
|
+
[248, 'oslash'],
|
|
274
|
+
[249, 'ugrave'],
|
|
275
|
+
[250, 'uacute'],
|
|
276
|
+
[251, 'ucirc'],
|
|
277
|
+
[252, 'uuml'],
|
|
278
|
+
[253, 'yacute'],
|
|
279
|
+
[254, 'thorn'],
|
|
280
|
+
[255, 'yuml'],
|
|
281
|
+
|
|
282
|
+
[8218, 'sbquo'],
|
|
283
|
+
[402, 'fnof'],
|
|
284
|
+
[8222, 'bdquo'],
|
|
285
|
+
|
|
286
|
+
[128, 8364],
|
|
287
|
+
[130, 8218],
|
|
288
|
+
[131, 402],
|
|
289
|
+
[132, 8222],
|
|
290
|
+
[133, 8230],
|
|
291
|
+
[134, 8224],
|
|
292
|
+
[135, 8225],
|
|
293
|
+
[136, 710],
|
|
294
|
+
[137, 8240],
|
|
295
|
+
[138, 352],
|
|
296
|
+
[139, 8249],
|
|
297
|
+
[140, 338],
|
|
298
|
+
[142, 381],
|
|
299
|
+
[145, 8216],
|
|
300
|
+
[146, 8217],
|
|
301
|
+
[147, 8220],
|
|
302
|
+
[148, 8221],
|
|
303
|
+
[149, 8226],
|
|
304
|
+
[150, 8211],
|
|
305
|
+
[151, 8212],
|
|
306
|
+
[152, 732],
|
|
307
|
+
[153, 8482],
|
|
308
|
+
[154, 353],
|
|
309
|
+
[155, 8250],
|
|
310
|
+
[156, 339],
|
|
311
|
+
[158, 382],
|
|
312
|
+
[159, 376],
|
|
313
|
+
|
|
314
|
+
[8194, 'ensp'],
|
|
315
|
+
[8195, 'emsp'],
|
|
316
|
+
[8201, 'thinsp'],
|
|
317
|
+
]
|
|
318
|
+
|
|
319
|
+
# Contains the mapping of code point (or name) to the actual Entity object.
|
|
320
|
+
ENTITY_MAP = Hash.new do |h,k|
|
|
321
|
+
if k.kind_of?(Integer)
|
|
322
|
+
h[k] = Entity.new(k, nil)
|
|
323
|
+
else
|
|
324
|
+
raise Kramdown::Error, "Can't handle generic non-integer character reference '#{k}'"
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
ENTITY_TABLE.each do |code_point, data|
|
|
329
|
+
if data.kind_of?(String)
|
|
330
|
+
ENTITY_MAP[code_point] = ENTITY_MAP[data] = Entity.new(code_point, data)
|
|
331
|
+
else
|
|
332
|
+
ENTITY_MAP[code_point] = ENTITY_MAP[data]
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
# Return the entity for the given code point or name +point_or_name+.
|
|
337
|
+
def entity(point_or_name)
|
|
338
|
+
ENTITY_MAP[point_or_name]
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
module_function :entity
|
|
342
|
+
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
end
|
|
348
|
+
|