Module: Sourcerer::MarkDownGrade
- Defined in:
- lib/sourcerer/mark_down_grade.rb
Defined Under Namespace
Classes: BlockquoteWithAbstract, CustomPre, DdConverter, DlConverter, DtConverter, HeadingWithId, HrConverter, HtmlComment, InlineSemanticConverter, LiWithNestedLists, LinkConverter, SemanticBlockConverter, SpecialDivConverter, TablePassthrough
Constant Summary collapse
- VERSION =
'0.1.0'
Class Attribute Summary collapse
-
.config ⇒ Object
readonly
Returns the value of attribute config.
Class Method Summary collapse
-
.block_title_line(text) ⇒ Object
Render a block-title line with hard line break for immediate continuation.
-
.bootstrap!(options = {}) ⇒ Object
Setup all custom converters Options: preserve_heading_ids: (default: true) Include <a id=“…”> anchors before headings strip_internal_links: (default: false) Remove href from internal anchor links, keeping only text convert_tables_to_markdown: (default: false) Convert all tables to markdown UNLESS they have .no-markdown class.
-
.clean_admonition_inline_title(title, type) ⇒ Object
Remove duplicated admonition label prefixes from converted inline titles.
- .convert(html, options = {}) ⇒ Object
-
.convert_html(html, options = {}) ⇒ Object
Convert HTML into Markdown with MarkDownGrade converters.
-
.format_block_title(text) ⇒ Object
Apply strong formatting consistently across block titles.
-
.normalize_block_title(text) ⇒ Object
Normalize block titles so escaped inline emphasis from html5s is converted to markdown emphasis consistently with html5 conversions.
-
.register_block_converters ⇒ Object
Register block converter for special div classes.
-
.register_blockquote_converter ⇒ Object
Register blockquote converter with abstract handling.
-
.register_comment_converter ⇒ Object
Register HTML comment converter.
-
.register_dl_converters ⇒ Object
Register all definition list converters.
-
.register_heading_converters ⇒ Object
Register heading converter that preserves ids.
-
.register_hr_converter ⇒ Object
Register horizontal-rule converter.
-
.register_inline_semantic_converters ⇒ Object
Register inline semantic converters.
-
.register_link_converter ⇒ Object
Register custom link converter to support id-only anchors and optional stripping.
-
.register_pre_converter ⇒ Object
Register the enhanced Pre converter.
-
.register_table_converter ⇒ Object
Register table passthrough converter.
Class Attribute Details
.config ⇒ Object (readonly)
Returns the value of attribute config.
29 30 31 |
# File 'lib/sourcerer/mark_down_grade.rb', line 29 def config @config end |
Class Method Details
.block_title_line(text) ⇒ Object
Render a block-title line with hard line break for immediate continuation.
638 639 640 |
# File 'lib/sourcerer/mark_down_grade.rb', line 638 def self.block_title_line text "#{format_block_title(text)} \n" end |
.bootstrap!(options = {}) ⇒ Object
Setup all custom converters Options:
preserve_heading_ids: (default: true) Include <a id="..."> anchors before headings
strip_internal_links: (default: false) Remove href from internal anchor links, keeping only text
convert_tables_to_markdown: (default: false) Convert all tables to markdown UNLESS they have .no-markdown class
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/sourcerer/mark_down_grade.rb', line 37 def self.bootstrap! ={} @config.merge!() register_pre_converter register_heading_converters register_dl_converters register_inline_semantic_converters register_block_converters register_table_converter register_hr_converter register_blockquote_converter register_comment_converter register_link_converter end |
.clean_admonition_inline_title(title, type) ⇒ Object
Remove duplicated admonition label prefixes from converted inline titles.
643 644 645 646 647 648 |
# File 'lib/sourcerer/mark_down_grade.rb', line 643 def self.clean_admonition_inline_title title, type normalized = title.to_s.strip label = "#{type.to_s.strip.capitalize}:" normalized = normalized.sub(/\A#{Regexp.escape(label)}\s*/i, '') normalized.empty? ? nil : normalized end |
.convert(html, options = {}) ⇒ Object
675 676 677 |
# File 'lib/sourcerer/mark_down_grade.rb', line 675 def self.convert html, ={} convert_html(html, ) end |
.convert_html(html, options = {}) ⇒ Object
Convert HTML into Markdown with MarkDownGrade converters. Options include:
convert_tables_to_markdown: Override global config for table conversion (true/false)
653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 |
# File 'lib/sourcerer/mark_down_grade.rb', line 653 def self.convert_html html, ={} bootstrap! unless @setup_complete @setup_complete = true # Determine effective table conversion mode effective_mode = determine_table_conversion_mode(html.to_s, ) Thread.current[:sourcerer_table_conversion_mode] = effective_mode begin normalized_html = normalize_html_for_markdown(html.to_s) markdown = ReverseMarkdown.convert(normalized_html, ) markdown = markdown.gsub(/(\*\*[^\n]+\*\* \n)\n+(?=\S)/, '\\1') markdown = markdown.gsub(/<figcaption>\s+/, '<figcaption>') markdown = markdown.gsub(%r{\s+</figcaption>}, '</figcaption>') markdown.gsub('<!--CHECKBOX_CHECKED-->', '- [x]') .gsub('<!--CHECKBOX_UNCHECKED-->', '- [ ]') ensure Thread.current[:sourcerer_table_conversion_mode] = nil end end |
.format_block_title(text) ⇒ Object
Apply strong formatting consistently across block titles.
630 631 632 633 634 635 |
# File 'lib/sourcerer/mark_down_grade.rb', line 630 def self.format_block_title text normalized = normalize_block_title(text) plain = normalized.gsub(/\*\*([^*]+)\*\*/, '\\1') plain = plain.gsub(/\*([^*]+)\*/, '\\1').strip plain.empty? ? normalized : "**#{plain}**" end |
.normalize_block_title(text) ⇒ Object
Normalize block titles so escaped inline emphasis from html5s is converted to markdown emphasis consistently with html5 conversions.
623 624 625 626 627 |
# File 'lib/sourcerer/mark_down_grade.rb', line 623 def self.normalize_block_title text normalized = text.to_s.strip.gsub(/\s+/, ' ') normalized = normalized.gsub(/\\\*([^*]+)\\\*/, '**\\1**') normalized.gsub(/(?<![\\*])\*([^*]+)\*(?!\*)/, '**\\1**') end |
.register_block_converters ⇒ Object
Register block converter for special div classes.
587 588 589 590 591 592 593 594 |
# File 'lib/sourcerer/mark_down_grade.rb', line 587 def self.register_block_converters ReverseMarkdown::Converters.register :div, SpecialDivConverter.new semantic = SemanticBlockConverter.new ReverseMarkdown::Converters.register :section, semantic ReverseMarkdown::Converters.register :aside, semantic ReverseMarkdown::Converters.register :figure, semantic ReverseMarkdown::Converters.register :nav, semantic end |
.register_blockquote_converter ⇒ Object
Register blockquote converter with abstract handling.
607 608 609 |
# File 'lib/sourcerer/mark_down_grade.rb', line 607 def self.register_blockquote_converter ReverseMarkdown::Converters.register :blockquote, BlockquoteWithAbstract.new end |
.register_comment_converter ⇒ Object
Register HTML comment converter.
612 613 614 |
# File 'lib/sourcerer/mark_down_grade.rb', line 612 def self.register_comment_converter ReverseMarkdown::Converters.register :comment, HtmlComment.new end |
.register_dl_converters ⇒ Object
Register all definition list converters.
573 574 575 576 577 |
# File 'lib/sourcerer/mark_down_grade.rb', line 573 def self.register_dl_converters ReverseMarkdown::Converters.register :dl, DlConverter.new ReverseMarkdown::Converters.register :dt, DtConverter.new ReverseMarkdown::Converters.register :dd, DdConverter.new end |
.register_heading_converters ⇒ Object
Register heading converter that preserves ids.
562 563 564 565 566 567 568 569 570 |
# File 'lib/sourcerer/mark_down_grade.rb', line 562 def self.register_heading_converters converter = HeadingWithId.new ReverseMarkdown::Converters.register :h1, converter ReverseMarkdown::Converters.register :h2, converter ReverseMarkdown::Converters.register :h3, converter ReverseMarkdown::Converters.register :h4, converter ReverseMarkdown::Converters.register :h5, converter ReverseMarkdown::Converters.register :h6, converter end |
.register_hr_converter ⇒ Object
Register horizontal-rule converter.
602 603 604 |
# File 'lib/sourcerer/mark_down_grade.rb', line 602 def self.register_hr_converter ReverseMarkdown::Converters.register :hr, HrConverter.new end |
.register_inline_semantic_converters ⇒ Object
Register inline semantic converters.
580 581 582 583 584 |
# File 'lib/sourcerer/mark_down_grade.rb', line 580 def self.register_inline_semantic_converters ReverseMarkdown::Converters.register(:em, InlineSemanticConverter.new('em', ReverseMarkdown::Converters::Em.new)) ReverseMarkdown::Converters.register(:strong, InlineSemanticConverter.new('strong', ReverseMarkdown::Converters::Strong.new)) ReverseMarkdown::Converters.register(:code, InlineSemanticConverter.new('code', ReverseMarkdown::Converters::Code.new)) end |
.register_link_converter ⇒ Object
Register custom link converter to support id-only anchors and optional stripping.
617 618 619 |
# File 'lib/sourcerer/mark_down_grade.rb', line 617 def self.register_link_converter ReverseMarkdown::Converters.register :a, LinkConverter.new end |
.register_pre_converter ⇒ Object
Register the enhanced Pre converter.
557 558 559 |
# File 'lib/sourcerer/mark_down_grade.rb', line 557 def self.register_pre_converter ReverseMarkdown::Converters.register :pre, CustomPre.new end |
.register_table_converter ⇒ Object
Register table passthrough converter.
597 598 599 |
# File 'lib/sourcerer/mark_down_grade.rb', line 597 def self.register_table_converter ReverseMarkdown::Converters.register :table, TablePassthrough.new end |