qiita_marker 0.23.2.3 → 0.23.5.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/Rakefile +57 -56
 - data/bin/qiita_marker +2 -7
 - data/ext/qiita_marker/cmark-gfm_version.h +2 -2
 - data/ext/qiita_marker/qiita_marker.c +30 -44
 - data/ext/qiita_marker/scanners.c +2438 -2450
 - data/ext/qiita_marker/table.c +28 -2
 - data/lib/qiita_marker/config.rb +3 -3
 - data/lib/qiita_marker/node/inspect.rb +8 -18
 - data/lib/qiita_marker/node.rb +6 -6
 - data/lib/qiita_marker/renderer/html_renderer.rb +38 -38
 - data/lib/qiita_marker/renderer.rb +5 -5
 - data/lib/qiita_marker/version.rb +1 -1
 - data/lib/qiita_marker.rb +9 -11
 - data/qiita_marker.gemspec +27 -29
 - metadata +3 -63
 - data/test/benchmark.rb +0 -32
 - data/test/fixtures/curly.md +0 -1
 - data/test/fixtures/dingus.md +0 -10
 - data/test/fixtures/strong.md +0 -1
 - data/test/fixtures/table.md +0 -10
 - data/test/test_attributes.rb +0 -24
 - data/test/test_basics.rb +0 -35
 - data/test/test_commands.rb +0 -72
 - data/test/test_commonmark.rb +0 -36
 - data/test/test_doc.rb +0 -130
 - data/test/test_encoding.rb +0 -23
 - data/test/test_extensions.rb +0 -116
 - data/test/test_footnotes.rb +0 -60
 - data/test/test_gc.rb +0 -47
 - data/test/test_helper.rb +0 -71
 - data/test/test_linebreaks.rb +0 -15
 - data/test/test_maliciousness.rb +0 -262
 - data/test/test_node.rb +0 -89
 - data/test/test_options.rb +0 -37
 - data/test/test_pathological_inputs.rb +0 -94
 - data/test/test_plaintext.rb +0 -46
 - data/test/test_qfm_autolink_class_name.rb +0 -62
 - data/test/test_qfm_code_data_metadata.rb +0 -41
 - data/test/test_qfm_custom_block.rb +0 -39
 - data/test/test_qfm_mention_no_emphasis.rb +0 -60
 - data/test/test_renderer.rb +0 -47
 - data/test/test_smartpunct.rb +0 -27
 - data/test/test_spec.rb +0 -30
 - data/test/test_tasklists.rb +0 -43
 - data/test/test_xml.rb +0 -107
 
| 
         @@ -1,60 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'test_helper'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            class TestQfmMentionNoEmphasis < Minitest::Test
         
     | 
| 
       6 
     | 
    
         
            -
              describe 'with mention_no_emphasis option' do
         
     | 
| 
       7 
     | 
    
         
            -
                [
         
     | 
| 
       8 
     | 
    
         
            -
                  ['@_username_',         false],
         
     | 
| 
       9 
     | 
    
         
            -
                  ['@__username__',       false],
         
     | 
| 
       10 
     | 
    
         
            -
                  ['@___username___',     false],
         
     | 
| 
       11 
     | 
    
         
            -
                  ['@user__name__',       false],
         
     | 
| 
       12 
     | 
    
         
            -
                  ['@some__user__name__', false],
         
     | 
| 
       13 
     | 
    
         
            -
                  [' @_username_',        false],
         
     | 
| 
       14 
     | 
    
         
            -
                  ['あ@_username_', false],
         
     | 
| 
       15 
     | 
    
         
            -
                  ['A@_username_',        true],
         
     | 
| 
       16 
     | 
    
         
            -
                  ['@*username*',         true],
         
     | 
| 
       17 
     | 
    
         
            -
                  ['_foo_',               true],
         
     | 
| 
       18 
     | 
    
         
            -
                  ['_',                   false],
         
     | 
| 
       19 
     | 
    
         
            -
                  ['_foo @username_',     false],
         
     | 
| 
       20 
     | 
    
         
            -
                  ['__foo @username__',   false],
         
     | 
| 
       21 
     | 
    
         
            -
                  ['___foo @username___', false]
         
     | 
| 
       22 
     | 
    
         
            -
                ].each do |text, emphasize|
         
     | 
| 
       23 
     | 
    
         
            -
                  describe "with text #{text.inspect}" do
         
     | 
| 
       24 
     | 
    
         
            -
                    if emphasize
         
     | 
| 
       25 
     | 
    
         
            -
                      it 'emphasizes the text' do
         
     | 
| 
       26 
     | 
    
         
            -
                        QiitaMarker.render_html(text, :MENTION_NO_EMPHASIS).tap do |out|
         
     | 
| 
       27 
     | 
    
         
            -
                          assert_match(/(<em>|<strong>)/, out.chomp)
         
     | 
| 
       28 
     | 
    
         
            -
                        end
         
     | 
| 
       29 
     | 
    
         
            -
                      end
         
     | 
| 
       30 
     | 
    
         
            -
                    else
         
     | 
| 
       31 
     | 
    
         
            -
                      it 'does not emphasize the text' do
         
     | 
| 
       32 
     | 
    
         
            -
                        QiitaMarker.render_html(text, :MENTION_NO_EMPHASIS).tap do |out|
         
     | 
| 
       33 
     | 
    
         
            -
                          assert_match "<p>#{text.strip}</p>", out.chomp
         
     | 
| 
       34 
     | 
    
         
            -
                        end
         
     | 
| 
       35 
     | 
    
         
            -
                      end
         
     | 
| 
       36 
     | 
    
         
            -
                    end
         
     | 
| 
       37 
     | 
    
         
            -
                  end
         
     | 
| 
       38 
     | 
    
         
            -
                end
         
     | 
| 
       39 
     | 
    
         
            -
              end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
              describe 'without mention_no_emphasis option' do
         
     | 
| 
       42 
     | 
    
         
            -
                describe 'with text "@_username_"' do
         
     | 
| 
       43 
     | 
    
         
            -
                  text = '@_username_'
         
     | 
| 
       44 
     | 
    
         
            -
                  it 'emphasizes the text' do
         
     | 
| 
       45 
     | 
    
         
            -
                    QiitaMarker.render_html(text, :DEFAULT, %i[]).tap do |out|
         
     | 
| 
       46 
     | 
    
         
            -
                      assert_match(/<em>/, out.chomp)
         
     | 
| 
       47 
     | 
    
         
            -
                    end
         
     | 
| 
       48 
     | 
    
         
            -
                  end
         
     | 
| 
       49 
     | 
    
         
            -
                end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                describe 'with text "_foo @username_"' do
         
     | 
| 
       52 
     | 
    
         
            -
                  text = '_foo @username_'
         
     | 
| 
       53 
     | 
    
         
            -
                  it 'emphasizes the text' do
         
     | 
| 
       54 
     | 
    
         
            -
                    QiitaMarker.render_html(text, :DEFAULT, %i[]).tap do |out|
         
     | 
| 
       55 
     | 
    
         
            -
                      assert_match(/<em>/, out.chomp)
         
     | 
| 
       56 
     | 
    
         
            -
                    end
         
     | 
| 
       57 
     | 
    
         
            -
                  end
         
     | 
| 
       58 
     | 
    
         
            -
                end
         
     | 
| 
       59 
     | 
    
         
            -
              end
         
     | 
| 
       60 
     | 
    
         
            -
            end
         
     | 
    
        data/test/test_renderer.rb
    DELETED
    
    | 
         @@ -1,47 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'test_helper'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            class TestRenderer < Minitest::Test
         
     | 
| 
       6 
     | 
    
         
            -
              def setup
         
     | 
| 
       7 
     | 
    
         
            -
                @doc = QiitaMarker.render_doc('Hi *there*')
         
     | 
| 
       8 
     | 
    
         
            -
              end
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
              def test_html_renderer
         
     | 
| 
       11 
     | 
    
         
            -
                renderer = HtmlRenderer.new
         
     | 
| 
       12 
     | 
    
         
            -
                result = renderer.render(@doc)
         
     | 
| 
       13 
     | 
    
         
            -
                assert_equal "<p>Hi <em>there</em></p>\n", result
         
     | 
| 
       14 
     | 
    
         
            -
              end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
              def test_multiple_tables
         
     | 
| 
       17 
     | 
    
         
            -
                content = <<~DOC
         
     | 
| 
       18 
     | 
    
         
            -
                  | Input       | Expected         | Actual    |
         
     | 
| 
       19 
     | 
    
         
            -
                  | ----------- | ---------------- | --------- |
         
     | 
| 
       20 
     | 
    
         
            -
                  | One         | Two              | Three     |
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                  | Header   | Row  | Example |
         
     | 
| 
       23 
     | 
    
         
            -
                  | :------: | ---: | :------ |
         
     | 
| 
       24 
     | 
    
         
            -
                  | Foo      | Bar  | Baz     |
         
     | 
| 
       25 
     | 
    
         
            -
                DOC
         
     | 
| 
       26 
     | 
    
         
            -
                doc = QiitaMarker.render_doc(content, :DEFAULT, %i[autolink table tagfilter])
         
     | 
| 
       27 
     | 
    
         
            -
                results = QiitaMarker::HtmlRenderer.new.render(doc)
         
     | 
| 
       28 
     | 
    
         
            -
                assert_equal 2, results.scan(/<tbody>/).size
         
     | 
| 
       29 
     | 
    
         
            -
              end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
              def test_escape_html_encoding
         
     | 
| 
       32 
     | 
    
         
            -
                my_renderer = Class.new(HtmlRenderer) do
         
     | 
| 
       33 
     | 
    
         
            -
                  attr_reader :input_encoding, :output_encoding
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                  def text(node)
         
     | 
| 
       36 
     | 
    
         
            -
                    @input_encoding = node.string_content.encoding
         
     | 
| 
       37 
     | 
    
         
            -
                    escape_html(node.string_content).tap do |escaped|
         
     | 
| 
       38 
     | 
    
         
            -
                      @output_encoding = escaped.encoding
         
     | 
| 
       39 
     | 
    
         
            -
                    end
         
     | 
| 
       40 
     | 
    
         
            -
                  end
         
     | 
| 
       41 
     | 
    
         
            -
                end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                renderer = my_renderer.new
         
     | 
| 
       44 
     | 
    
         
            -
                assert_equal Encoding::UTF_8, renderer.render(@doc).encoding
         
     | 
| 
       45 
     | 
    
         
            -
                assert_equal renderer.input_encoding, renderer.output_encoding
         
     | 
| 
       46 
     | 
    
         
            -
              end
         
     | 
| 
       47 
     | 
    
         
            -
            end
         
     | 
    
        data/test/test_smartpunct.rb
    DELETED
    
    | 
         @@ -1,27 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'test_helper'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            class SmartPunctTest < Minitest::Test
         
     | 
| 
       6 
     | 
    
         
            -
              smart_punct = open_spec_file('smart_punct.txt')
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              smart_punct.each do |testcase|
         
     | 
| 
       9 
     | 
    
         
            -
                doc = QiitaMarker.render_doc(testcase[:markdown], :SMART)
         
     | 
| 
       10 
     | 
    
         
            -
                html = QiitaMarker.render_html(testcase[:markdown], :SMART)
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                define_method("test_smart_punct_example_#{testcase[:example]}") do
         
     | 
| 
       13 
     | 
    
         
            -
                  doc_rendered = doc.to_html.strip
         
     | 
| 
       14 
     | 
    
         
            -
                  html_rendered = html.strip
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                  assert_equal testcase[:html], doc_rendered, testcase[:markdown]
         
     | 
| 
       17 
     | 
    
         
            -
                  assert_equal testcase[:html], html_rendered, testcase[:markdown]
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
              def test_smart_hardbreak_no_spaces_render_doc
         
     | 
| 
       22 
     | 
    
         
            -
                markdown = "\"foo\"\nbaz"
         
     | 
| 
       23 
     | 
    
         
            -
                result = "<p>“foo”<br />\nbaz</p>\n"
         
     | 
| 
       24 
     | 
    
         
            -
                doc = QiitaMarker.render_doc(markdown, :SMART)
         
     | 
| 
       25 
     | 
    
         
            -
                assert_equal result, doc.to_html([:HARDBREAKS])
         
     | 
| 
       26 
     | 
    
         
            -
              end
         
     | 
| 
       27 
     | 
    
         
            -
            end
         
     | 
    
        data/test/test_spec.rb
    DELETED
    
    | 
         @@ -1,30 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'test_helper'
         
     | 
| 
       4 
     | 
    
         
            -
            require 'json'
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            class TestSpec < Minitest::Test
         
     | 
| 
       7 
     | 
    
         
            -
              spec = open_spec_file('spec.txt')
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              spec.each do |testcase|
         
     | 
| 
       10 
     | 
    
         
            -
                next if testcase[:extensions].include?(:disabled)
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                doc = QiitaMarker.render_doc(testcase[:markdown], :DEFAULT, testcase[:extensions])
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                define_method("test_to_html_example_#{testcase[:example]}") do
         
     | 
| 
       15 
     | 
    
         
            -
                  actual = doc.to_html(:UNSAFE, testcase[:extensions]).rstrip
         
     | 
| 
       16 
     | 
    
         
            -
                  assert_equal testcase[:html], actual, testcase[:markdown]
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                define_method("test_html_renderer_example_#{testcase[:example]}") do
         
     | 
| 
       20 
     | 
    
         
            -
                  actual = HtmlRenderer.new(options: :UNSAFE, extensions: testcase[:extensions]).render(doc).rstrip
         
     | 
| 
       21 
     | 
    
         
            -
                  assert_equal testcase[:html], actual, testcase[:markdown]
         
     | 
| 
       22 
     | 
    
         
            -
                end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                define_method("test_sourcepos_example_#{testcase[:example]}") do
         
     | 
| 
       25 
     | 
    
         
            -
                  lhs = doc.to_html(%i[UNSAFE SOURCEPOS], testcase[:extensions]).rstrip
         
     | 
| 
       26 
     | 
    
         
            -
                  rhs = HtmlRenderer.new(options: %i[UNSAFE SOURCEPOS], extensions: testcase[:extensions]).render(doc).rstrip
         
     | 
| 
       27 
     | 
    
         
            -
                  assert_equal lhs, rhs, testcase[:markdown]
         
     | 
| 
       28 
     | 
    
         
            -
                end
         
     | 
| 
       29 
     | 
    
         
            -
              end
         
     | 
| 
       30 
     | 
    
         
            -
            end
         
     | 
    
        data/test/test_tasklists.rb
    DELETED
    
    | 
         @@ -1,43 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'test_helper'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            class TestTasklists < Minitest::Test
         
     | 
| 
       6 
     | 
    
         
            -
              def setup
         
     | 
| 
       7 
     | 
    
         
            -
                text = <<-MD
         
     | 
| 
       8 
     | 
    
         
            -
             - [x] Add task list
         
     | 
| 
       9 
     | 
    
         
            -
             - [ ] Define task list
         
     | 
| 
       10 
     | 
    
         
            -
                MD
         
     | 
| 
       11 
     | 
    
         
            -
                @doc = QiitaMarker.render_doc(text, :DEFAULT, %i[tasklist])
         
     | 
| 
       12 
     | 
    
         
            -
                @expected = <<~HTML
         
     | 
| 
       13 
     | 
    
         
            -
                  <ul>
         
     | 
| 
       14 
     | 
    
         
            -
                  <li><input type="checkbox" checked="" disabled="" /> Add task list</li>
         
     | 
| 
       15 
     | 
    
         
            -
                  <li><input type="checkbox" disabled="" /> Define task list</li>
         
     | 
| 
       16 
     | 
    
         
            -
                  </ul>
         
     | 
| 
       17 
     | 
    
         
            -
                HTML
         
     | 
| 
       18 
     | 
    
         
            -
              end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
              def test_to_html
         
     | 
| 
       21 
     | 
    
         
            -
                assert_equal @expected, @doc.to_html
         
     | 
| 
       22 
     | 
    
         
            -
              end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
              def test_html_renderer
         
     | 
| 
       25 
     | 
    
         
            -
                assert_equal @expected, QiitaMarker::HtmlRenderer.new.render(@doc)
         
     | 
| 
       26 
     | 
    
         
            -
              end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
              def test_tasklist_state
         
     | 
| 
       29 
     | 
    
         
            -
                list = @doc.first_child
         
     | 
| 
       30 
     | 
    
         
            -
                assert_equal 'checked', list.first_child.tasklist_state
         
     | 
| 
       31 
     | 
    
         
            -
                assert list.first_child.tasklist_item_checked?
         
     | 
| 
       32 
     | 
    
         
            -
                assert_equal 'unchecked', list.first_child.next.tasklist_state
         
     | 
| 
       33 
     | 
    
         
            -
                refute list.first_child.next.tasklist_item_checked?
         
     | 
| 
       34 
     | 
    
         
            -
              end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
              def test_set_tasklist_state
         
     | 
| 
       37 
     | 
    
         
            -
                list = @doc.first_child
         
     | 
| 
       38 
     | 
    
         
            -
                list.first_child.tasklist_item_checked = false
         
     | 
| 
       39 
     | 
    
         
            -
                refute list.first_child.tasklist_item_checked?
         
     | 
| 
       40 
     | 
    
         
            -
                list.first_child.next.tasklist_item_checked = true
         
     | 
| 
       41 
     | 
    
         
            -
                assert list.first_child.next.tasklist_item_checked?
         
     | 
| 
       42 
     | 
    
         
            -
              end
         
     | 
| 
       43 
     | 
    
         
            -
            end
         
     | 
    
        data/test/test_xml.rb
    DELETED
    
    | 
         @@ -1,107 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'test_helper'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            class TestXml < Minitest::Test
         
     | 
| 
       6 
     | 
    
         
            -
              def setup
         
     | 
| 
       7 
     | 
    
         
            -
                @markdown = <<~MD
         
     | 
| 
       8 
     | 
    
         
            -
                  Hi *there*!
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                  1. I am a numeric list.
         
     | 
| 
       11 
     | 
    
         
            -
                  2. I continue the list.
         
     | 
| 
       12 
     | 
    
         
            -
                  * Suddenly, an unordered list!
         
     | 
| 
       13 
     | 
    
         
            -
                  * What fun!
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  Okay, _enough_.
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  | a   | b   |
         
     | 
| 
       18 
     | 
    
         
            -
                  | --- | --- |
         
     | 
| 
       19 
     | 
    
         
            -
                  | c   | d   |
         
     | 
| 
       20 
     | 
    
         
            -
                MD
         
     | 
| 
       21 
     | 
    
         
            -
              end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              def render_doc(doc)
         
     | 
| 
       24 
     | 
    
         
            -
                QiitaMarker.render_doc(doc, :DEFAULT, [:table])
         
     | 
| 
       25 
     | 
    
         
            -
              end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
              def test_to_xml
         
     | 
| 
       28 
     | 
    
         
            -
                compare = render_doc(@markdown).to_xml(:SOURCEPOS)
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                assert_equal <<~XML, compare
         
     | 
| 
       31 
     | 
    
         
            -
                  <?xml version="1.0" encoding="UTF-8"?>
         
     | 
| 
       32 
     | 
    
         
            -
                  <!DOCTYPE document SYSTEM "CommonMark.dtd">
         
     | 
| 
       33 
     | 
    
         
            -
                  <document sourcepos="1:1-12:13" xmlns="http://commonmark.org/xml/1.0">
         
     | 
| 
       34 
     | 
    
         
            -
                    <paragraph sourcepos="1:1-1:11">
         
     | 
| 
       35 
     | 
    
         
            -
                      <text sourcepos="1:1-1:3" xml:space="preserve">Hi </text>
         
     | 
| 
       36 
     | 
    
         
            -
                      <emph sourcepos="1:4-1:10">
         
     | 
| 
       37 
     | 
    
         
            -
                        <text sourcepos="1:5-1:9" xml:space="preserve">there</text>
         
     | 
| 
       38 
     | 
    
         
            -
                      </emph>
         
     | 
| 
       39 
     | 
    
         
            -
                      <text sourcepos="1:11-1:11" xml:space="preserve">!</text>
         
     | 
| 
       40 
     | 
    
         
            -
                    </paragraph>
         
     | 
| 
       41 
     | 
    
         
            -
                    <list sourcepos="3:1-4:23" type="ordered" start="1" delim="period" tight="true">
         
     | 
| 
       42 
     | 
    
         
            -
                      <item sourcepos="3:1-3:23">
         
     | 
| 
       43 
     | 
    
         
            -
                        <paragraph sourcepos="3:4-3:23">
         
     | 
| 
       44 
     | 
    
         
            -
                          <text sourcepos="3:4-3:23" xml:space="preserve">I am a numeric list.</text>
         
     | 
| 
       45 
     | 
    
         
            -
                        </paragraph>
         
     | 
| 
       46 
     | 
    
         
            -
                      </item>
         
     | 
| 
       47 
     | 
    
         
            -
                      <item sourcepos="4:1-4:23">
         
     | 
| 
       48 
     | 
    
         
            -
                        <paragraph sourcepos="4:4-4:23">
         
     | 
| 
       49 
     | 
    
         
            -
                          <text sourcepos="4:4-4:23" xml:space="preserve">I continue the list.</text>
         
     | 
| 
       50 
     | 
    
         
            -
                        </paragraph>
         
     | 
| 
       51 
     | 
    
         
            -
                      </item>
         
     | 
| 
       52 
     | 
    
         
            -
                    </list>
         
     | 
| 
       53 
     | 
    
         
            -
                    <list sourcepos="5:1-7:0" type="bullet" tight="true">
         
     | 
| 
       54 
     | 
    
         
            -
                      <item sourcepos="5:1-5:30">
         
     | 
| 
       55 
     | 
    
         
            -
                        <paragraph sourcepos="5:3-5:30">
         
     | 
| 
       56 
     | 
    
         
            -
                          <text sourcepos="5:3-5:30" xml:space="preserve">Suddenly, an unordered list!</text>
         
     | 
| 
       57 
     | 
    
         
            -
                        </paragraph>
         
     | 
| 
       58 
     | 
    
         
            -
                      </item>
         
     | 
| 
       59 
     | 
    
         
            -
                      <item sourcepos="6:1-7:0">
         
     | 
| 
       60 
     | 
    
         
            -
                        <paragraph sourcepos="6:3-6:11">
         
     | 
| 
       61 
     | 
    
         
            -
                          <text sourcepos="6:3-6:11" xml:space="preserve">What fun!</text>
         
     | 
| 
       62 
     | 
    
         
            -
                        </paragraph>
         
     | 
| 
       63 
     | 
    
         
            -
                      </item>
         
     | 
| 
       64 
     | 
    
         
            -
                    </list>
         
     | 
| 
       65 
     | 
    
         
            -
                    <paragraph sourcepos="8:1-8:15">
         
     | 
| 
       66 
     | 
    
         
            -
                      <text sourcepos="8:1-8:6" xml:space="preserve">Okay, </text>
         
     | 
| 
       67 
     | 
    
         
            -
                      <emph sourcepos="8:7-8:14">
         
     | 
| 
       68 
     | 
    
         
            -
                        <text sourcepos="8:8-8:13" xml:space="preserve">enough</text>
         
     | 
| 
       69 
     | 
    
         
            -
                      </emph>
         
     | 
| 
       70 
     | 
    
         
            -
                      <text sourcepos="8:15-8:15" xml:space="preserve">.</text>
         
     | 
| 
       71 
     | 
    
         
            -
                    </paragraph>
         
     | 
| 
       72 
     | 
    
         
            -
                    <table sourcepos="10:1-12:13">
         
     | 
| 
       73 
     | 
    
         
            -
                      <table_header sourcepos="10:1-10:13">
         
     | 
| 
       74 
     | 
    
         
            -
                        <table_cell sourcepos="10:2-10:6">
         
     | 
| 
       75 
     | 
    
         
            -
                          <text sourcepos="10:3-10:3" xml:space="preserve">a</text>
         
     | 
| 
       76 
     | 
    
         
            -
                        </table_cell>
         
     | 
| 
       77 
     | 
    
         
            -
                        <table_cell sourcepos="10:8-10:12">
         
     | 
| 
       78 
     | 
    
         
            -
                          <text sourcepos="10:9-10:9" xml:space="preserve">b</text>
         
     | 
| 
       79 
     | 
    
         
            -
                        </table_cell>
         
     | 
| 
       80 
     | 
    
         
            -
                      </table_header>
         
     | 
| 
       81 
     | 
    
         
            -
                      <table_row sourcepos="12:1-12:13">
         
     | 
| 
       82 
     | 
    
         
            -
                        <table_cell sourcepos="12:2-12:6">
         
     | 
| 
       83 
     | 
    
         
            -
                          <text sourcepos="12:3-12:3" xml:space="preserve">c</text>
         
     | 
| 
       84 
     | 
    
         
            -
                        </table_cell>
         
     | 
| 
       85 
     | 
    
         
            -
                        <table_cell sourcepos="12:8-12:12">
         
     | 
| 
       86 
     | 
    
         
            -
                          <text sourcepos="12:9-12:9" xml:space="preserve">d</text>
         
     | 
| 
       87 
     | 
    
         
            -
                        </table_cell>
         
     | 
| 
       88 
     | 
    
         
            -
                      </table_row>
         
     | 
| 
       89 
     | 
    
         
            -
                    </table>
         
     | 
| 
       90 
     | 
    
         
            -
                  </document>
         
     | 
| 
       91 
     | 
    
         
            -
                XML
         
     | 
| 
       92 
     | 
    
         
            -
              end
         
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
              def test_to_xml_with_quotes
         
     | 
| 
       95 
     | 
    
         
            -
                compare = render_doc('"quotes" should be escaped').to_xml(:DEFAULT)
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                assert_equal <<~XML, compare
         
     | 
| 
       98 
     | 
    
         
            -
                  <?xml version="1.0" encoding="UTF-8"?>
         
     | 
| 
       99 
     | 
    
         
            -
                  <!DOCTYPE document SYSTEM "CommonMark.dtd">
         
     | 
| 
       100 
     | 
    
         
            -
                  <document xmlns="http://commonmark.org/xml/1.0">
         
     | 
| 
       101 
     | 
    
         
            -
                    <paragraph>
         
     | 
| 
       102 
     | 
    
         
            -
                      <text xml:space="preserve">"quotes" should be escaped</text>
         
     | 
| 
       103 
     | 
    
         
            -
                    </paragraph>
         
     | 
| 
       104 
     | 
    
         
            -
                  </document>
         
     | 
| 
       105 
     | 
    
         
            -
                XML
         
     | 
| 
       106 
     | 
    
         
            -
              end
         
     | 
| 
       107 
     | 
    
         
            -
            end
         
     |