source2md 0.0.9 → 0.0.11
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/README.md +10 -22
- data/Rakefile +1 -1
- data/doc/0100_top.rb +5 -5
- data/doc/0110_code_small.rb +11 -1
- data/doc/0120_code_long.rb +9 -1
- data/doc/0130_hidden.rb +3 -1
- data/doc/0140_code_include.rb +9 -1
- data/doc/0150_raw_include.rb +2 -1
- data/doc/0160_title.rb +1 -1
- data/doc/{0180_table.rb → 0170_table.rb} +1 -1
- data/doc/{0190_method.rb → 0180_method.rb} +3 -3
- data/doc/{0200_alert.rb → 0190_alert.rb} +8 -1
- data/doc/{0210_text.rb → 0200_text.rb} +3 -1
- data/doc/{0220_text_oneline.rb → 0210_text_oneline.rb} +2 -1
- data/doc/{0230_text_squish.rb → 0220_text_squish.rb} +2 -1
- data/doc/{0240_text_hankaku_kana.rb → 0230_text_hankaku_kana.rb} +2 -1
- data/doc/{0250_parse_include.rb → 0240_parse_include.rb} +2 -1
- data/doc/setup.rb +3 -0
- data/examples/cli-test.rs +6 -3
- data/examples/cli-test.sh +1 -1
- data/lib/source2md/cli.rb +13 -2
- data/lib/source2md/code_block.rb +20 -25
- data/lib/source2md/element.rb +16 -6
- data/lib/source2md/formatter/type_code_include.rb +1 -1
- data/lib/source2md/formatter/type_method.rb +15 -7
- data/lib/source2md/formatter/{type_md_title.rb → type_nop.rb} +3 -3
- data/lib/source2md/formatter/type_raw_include.rb +2 -1
- data/lib/source2md/formatter/type_source_block.rb +4 -4
- data/lib/source2md/formatter/type_table.rb +5 -5
- data/lib/source2md/formatter/type_text.rb +5 -3
- data/lib/source2md/generator.rb +1 -1
- data/lib/source2md/re.rb +3 -0
- data/lib/source2md/regexp_builder.rb +33 -0
- data/lib/source2md/scanner.rb +22 -17
- data/lib/source2md/text_helper.rb +13 -4
- data/lib/source2md/version.rb +1 -1
- data/lib/source2md.rb +2 -0
- data/spec/code_block_spec.rb +2 -1
- data/spec/formatter/type_code_include_spec.rb +3 -3
- data/spec/formatter/type_method_spec.rb +3 -2
- data/spec/formatter/type_partial_code_spec.rb +1 -1
- data/spec/formatter/type_raw_include_spec.rb +1 -1
- data/spec/formatter/type_source_block_spec.rb +2 -2
- data/spec/formatter/type_table_spec.rb +2 -2
- data/spec/formatter/type_text_spec.rb +5 -4
- data/spec/scanner_spec.rb +1 -7
- data/spec/text_helper_spec.rb +8 -4
- metadata +13 -15
- data/doc/0170_md_like_title.rb +0 -24
- data/examples/type_md_title.rb +0 -15
- data/spec/formatter/type_md_title_spec.rb +0 -14
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 4cbcbb886c48d226f8864af1134aa3c0bdac15dcb2adf2acfd8aadb1d9b62bcc
         | 
| 4 | 
            +
              data.tar.gz: bdcdb4870afc49aeb7fbb20534a54ba44fd42bd9e1e56c2bb260babe46d9cb74
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9fe4bde35b551e33b11a53a10df2941b3828eba7b5e91c470bae0001f26f95ab2ecb006183fb89384be8fe22d3f9b5c461917b1525e3f002800846f19ea2547a
         | 
| 7 | 
            +
              data.tar.gz: ab48da56d8bf0b4ce3755432f9ed281dbceacf67a8cdbb4663b328f614c73bdcc1680a4e03675d8ba547ff638d054f2249644fca5f52c6812b3e17c6474b523c
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # Source2MD: Markdown generator from source code #
         | 
| 2 4 |  | 
| 3 5 | 
             
            ## Logic ##
         | 
| @@ -75,6 +77,14 @@ puts Source2MD::Section.new(<<~EOS).to_md | |
| 75 77 | 
             
            EOS
         | 
| 76 78 | 
             
            ```
         | 
| 77 79 |  | 
| 80 | 
            +
            ```ruby
         | 
| 81 | 
            +
            puts Source2MD::Section.new(<<~EOS).to_md
         | 
| 82 | 
            +
              #+BEGIN_SRC hidden!
         | 
| 83 | 
            +
              p "This paragraph is not displayed"
         | 
| 84 | 
            +
              #+END_SRC
         | 
| 85 | 
            +
            EOS
         | 
| 86 | 
            +
            ```
         | 
| 87 | 
            +
             | 
| 78 88 | 
             
            ### Code include ###
         | 
| 79 89 |  | 
| 80 90 | 
             
            Insert inside the code block.
         | 
| @@ -135,28 +145,6 @@ EOS | |
| 135 145 | 
             
            ### Title Level 3 ###
         | 
| 136 146 | 
             
            ```
         | 
| 137 147 |  | 
| 138 | 
            -
            ### Markdown style title ###
         | 
| 139 | 
            -
             | 
| 140 | 
            -
            The condition is that there are the same number of sharps on the back.
         | 
| 141 | 
            -
             | 
| 142 | 
            -
            ```ruby
         | 
| 143 | 
            -
            puts Source2MD::Section.new(<<~EOS).to_md
         | 
| 144 | 
            -
              # Title Level 1 #
         | 
| 145 | 
            -
             | 
| 146 | 
            -
              ## Title Level 2 ##
         | 
| 147 | 
            -
             | 
| 148 | 
            -
              ### Title Level 3 ###
         | 
| 149 | 
            -
            EOS
         | 
| 150 | 
            -
            ```
         | 
| 151 | 
            -
             | 
| 152 | 
            -
            ```
         | 
| 153 | 
            -
            # Title Level 1 #
         | 
| 154 | 
            -
             | 
| 155 | 
            -
            ## Title Level 2 ##
         | 
| 156 | 
            -
             | 
| 157 | 
            -
            ### Title Level 3 ###
         | 
| 158 | 
            -
            ```
         | 
| 159 | 
            -
             | 
| 160 148 | 
             
            ### Org-mode table style ###
         | 
| 161 149 |  | 
| 162 150 | 
             
            ```ruby
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -11,7 +11,7 @@ namespace :doc do | |
| 11 11 | 
             
              task "generate" do
         | 
| 12 12 | 
             
                Rake::Task["doc:renum"].execute
         | 
| 13 13 | 
             
                system "sh", "-vec", <<~EOT, exception: true
         | 
| 14 | 
            -
            .bin/source2md generate --no-debug -- | 
| 14 | 
            +
            .bin/source2md generate --no-debug --xmp-out-exclude --prefix_re '^' -o README.md doc/0*
         | 
| 15 15 | 
             
            EOT
         | 
| 16 16 | 
             
              end
         | 
| 17 17 |  | 
    
        data/doc/0100_top.rb
    CHANGED
    
    | @@ -1,24 +1,24 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title1: Source2MD: Markdown generator from source code
         | 
| 5 5 |  | 
| 6 | 
            -
             | 
| 6 | 
            +
            #+title2: Logic
         | 
| 7 7 |  | 
| 8 8 | 
             
            # 1. Divide the source code into paragraphs using blank lines as separations.
         | 
| 9 9 | 
             
            # 1. Remove comments from the comment blocks.
         | 
| 10 10 | 
             
            # 1. Include the code within the code block.
         | 
| 11 11 |  | 
| 12 | 
            -
             | 
| 12 | 
            +
            #+title2: Install
         | 
| 13 13 |  | 
| 14 14 | 
             
            # ```
         | 
| 15 15 | 
             
            # $ gem i source2md
         | 
| 16 16 | 
             
            # ```
         | 
| 17 17 |  | 
| 18 | 
            -
             | 
| 18 | 
            +
            #+title2: CLI
         | 
| 19 19 |  | 
| 20 20 | 
             
            # ```
         | 
| 21 21 | 
             
            # $ source2md generate -o README.md README.rb
         | 
| 22 22 | 
             
            # ```
         | 
| 23 23 |  | 
| 24 | 
            -
             | 
| 24 | 
            +
            #+title2: Rules
         | 
    
        data/doc/0110_code_small.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title3: Code snippet
         | 
| 5 5 |  | 
| 6 6 | 
             
            # Separated by blank lines.
         | 
| 7 7 |  | 
| @@ -24,3 +24,13 @@ EOS | |
| 24 24 | 
             
            # > ```ruby
         | 
| 25 25 | 
             
            # > hello.call
         | 
| 26 26 | 
             
            # > ```
         | 
| 27 | 
            +
            # >> ```ruby
         | 
| 28 | 
            +
            # >> hello = -> {
         | 
| 29 | 
            +
            # >>   "Hello, world!"
         | 
| 30 | 
            +
            # >> }
         | 
| 31 | 
            +
            # >> ```
         | 
| 32 | 
            +
            # >> 
         | 
| 33 | 
            +
            # >> 
         | 
| 34 | 
            +
            # >> ```ruby
         | 
| 35 | 
            +
            # >> hello.call
         | 
| 36 | 
            +
            # >> ```
         | 
    
        data/doc/0120_code_long.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title3: Source block with many lines
         | 
| 5 5 |  | 
| 6 6 | 
             
            #+BEGIN_SRC
         | 
| 7 7 | 
             
            puts Source2MD::Section.new(<<~EOS).to_md
         | 
| @@ -22,3 +22,11 @@ EOS | |
| 22 22 | 
             
            # >
         | 
| 23 23 | 
             
            # > hello.call
         | 
| 24 24 | 
             
            # > ```
         | 
| 25 | 
            +
            # >> ["/Users/ikeda/src/zenn/source2md/lib/source2md/scanner.rb:14", :to_a, /(?m-ix:(?-mix:(?-mix:^)(?:(?-mix:#|\/\/)))\+BEGIN_SRC.*?(?-mix:(?-mix:^)(?:(?-mix:#|\/\/)))\+END_SRC)|(?m-ix:.*?\R{2,})/]
         | 
| 26 | 
            +
            # >> ```ruby
         | 
| 27 | 
            +
            # >> hello = -> {
         | 
| 28 | 
            +
            # >>   "Hello, world!"
         | 
| 29 | 
            +
            # >> }
         | 
| 30 | 
            +
            # >> 
         | 
| 31 | 
            +
            # >> hello.call
         | 
| 32 | 
            +
            # >> ```
         | 
    
        data/doc/0130_hidden.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title3: Hide paragraph
         | 
| 5 5 |  | 
| 6 6 | 
             
            #+BEGIN_SRC
         | 
| 7 7 | 
             
            puts Source2MD::Section.new(<<~EOS).to_md
         | 
| @@ -17,3 +17,5 @@ puts Source2MD::Section.new(<<~EOS).to_md | |
| 17 17 | 
             
              #+END_SRC
         | 
| 18 18 | 
             
            EOS
         | 
| 19 19 | 
             
            #+END_SRC
         | 
| 20 | 
            +
            # >>
         | 
| 21 | 
            +
            # >>
         | 
    
        data/doc/0140_code_include.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title3: Code include
         | 
| 5 5 |  | 
| 6 6 | 
             
            # Insert inside the code block.
         | 
| 7 7 |  | 
| @@ -24,3 +24,11 @@ EOS | |
| 24 24 | 
             
            # > <p>Hello</p>
         | 
| 25 25 | 
             
            # > ```
         | 
| 26 26 | 
             
            # > ````
         | 
| 27 | 
            +
            # >> ```html:hello.html
         | 
| 28 | 
            +
            # >> <p>Hello</p>
         | 
| 29 | 
            +
            # >> ```
         | 
| 30 | 
            +
            # >> 
         | 
| 31 | 
            +
            # >> 
         | 
| 32 | 
            +
            # >> ```xml:OUTPUT
         | 
| 33 | 
            +
            # >> <p>Hello</p>
         | 
| 34 | 
            +
            # >> ```
         | 
    
        data/doc/0150_raw_include.rb
    CHANGED
    
    
    
        data/doc/0160_title.rb
    CHANGED
    
    
| @@ -1,19 +1,19 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title3: Explain method simply
         | 
| 5 5 |  | 
| 6 6 | 
             
            #+BEGIN_SRC
         | 
| 7 7 | 
             
            puts Source2MD::Section.new(<<~EOS).to_md
         | 
| 8 8 | 
             
              #+name: String#size
         | 
| 9 9 | 
             
              #+desc: Return the number of characters
         | 
| 10 10 | 
             
              #+comment: Comments about size
         | 
| 11 | 
            -
              "abc".size | 
| 11 | 
            +
              "abc".size  # => 3
         | 
| 12 12 |  | 
| 13 13 | 
             
              #+name: String#reverse
         | 
| 14 14 | 
             
              #+desc: reverse the sequence of characters
         | 
| 15 15 | 
             
              #+comment: Comments about reverse
         | 
| 16 | 
            -
              "abc".reverse | 
| 16 | 
            +
              "abc".reverse  # => "cba"
         | 
| 17 17 | 
             
            EOS
         | 
| 18 18 | 
             
            #+END_SRC
         | 
| 19 19 |  | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title3: Warning and Alert message
         | 
| 5 5 |  | 
| 6 6 | 
             
            # Exclusive to Zenn
         | 
| 7 7 |  | 
| @@ -24,3 +24,10 @@ EOS | |
| 24 24 | 
             
            # > this is alert message
         | 
| 25 25 | 
             
            # > :::
         | 
| 26 26 | 
             
            # > ```
         | 
| 27 | 
            +
            # >> :::message
         | 
| 28 | 
            +
            # >> this is warning message
         | 
| 29 | 
            +
            # >> :::
         | 
| 30 | 
            +
            # >> 
         | 
| 31 | 
            +
            # >> :::message alert
         | 
| 32 | 
            +
            # >> this is alert message
         | 
| 33 | 
            +
            # >> :::
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title3: Raw Text
         | 
| 5 5 |  | 
| 6 6 | 
             
            # If no rule applies and the text begins with `#`, remove the `#`.
         | 
| 7 7 |  | 
| @@ -16,3 +16,5 @@ EOS | |
| 16 16 | 
             
            # > Lorem ipsum dolor sit amet, consectetur adipisicing elit,
         | 
| 17 17 | 
             
            # > sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
         | 
| 18 18 | 
             
            # > ```
         | 
| 19 | 
            +
            # >> Lorem ipsum dolor sit amet, consectetur adipisicing elit,
         | 
| 20 | 
            +
            # >> sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title3: Oneline Text
         | 
| 5 5 |  | 
| 6 6 | 
             
            # Using this option allows you to split a line regardless of the markdown library.
         | 
| 7 7 |  | 
| @@ -16,3 +16,4 @@ EOS | |
| 16 16 | 
             
            # > ```
         | 
| 17 17 | 
             
            # > Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
         | 
| 18 18 | 
             
            # > ```
         | 
| 19 | 
            +
            # >> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            #+hidden: true
         | 
| 2 2 | 
             
            require "./setup"
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            #+title3: Squish Text
         | 
| 5 5 |  | 
| 6 6 | 
             
            # Single spaces for line breaks and consecutive spaces.
         | 
| 7 7 |  | 
| @@ -16,3 +16,4 @@ EOS | |
| 16 16 | 
             
            # > ```
         | 
| 17 17 | 
             
            # > Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
         | 
| 18 18 | 
             
            # > ```
         | 
| 19 | 
            +
            # >> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
         | 
    
        data/doc/setup.rb
    CHANGED
    
    
    
        data/examples/cli-test.rs
    CHANGED
    
    
    
        data/examples/cli-test.sh
    CHANGED
    
    | @@ -1,2 +1,2 @@ | |
| 1 1 | 
             
            #!/bin/sh
         | 
| 2 | 
            -
            source2md generate -d  | 
| 2 | 
            +
            ../.bin/source2md generate -d cli-test.rs
         | 
    
        data/lib/source2md/cli.rb
    CHANGED
    
    | @@ -2,7 +2,10 @@ module Source2MD | |
| 2 2 | 
             
              class Cli < Thor
         | 
| 3 3 | 
             
                class_option :debug,           type: :boolean, aliases: "-d", default: false
         | 
| 4 4 | 
             
                class_option :xmp_out_exclude, type: :boolean, aliases: "-x", default: false
         | 
| 5 | 
            -
                class_option :readonly,        type: :boolean, default: true
         | 
| 5 | 
            +
                class_option :readonly,        type: :boolean, aliases: "-r", default: true
         | 
| 6 | 
            +
                class_option :default_lang,    type: :string,  aliases: "-l", default: "ruby"
         | 
| 7 | 
            +
                class_option :prefix_re,       type: :string
         | 
| 8 | 
            +
                class_option :comment_re,      type: :string
         | 
| 6 9 |  | 
| 7 10 | 
             
                def initialize(...)
         | 
| 8 11 | 
             
                  super
         | 
| @@ -14,8 +17,16 @@ module Source2MD | |
| 14 17 |  | 
| 15 18 | 
             
                  Source2MD.xmp_out_exclude = options[:xmp_out_exclude]
         | 
| 16 19 | 
             
                  Source2MD.readonly = options[:readonly]
         | 
| 20 | 
            +
                  Source2MD.default_lang = options[:default_lang]
         | 
| 17 21 |  | 
| 18 | 
            -
                   | 
| 22 | 
            +
                  Source2MD::RE.update do |e|
         | 
| 23 | 
            +
                    if v = options[:prefix_re]
         | 
| 24 | 
            +
                      e.prefix_re = v
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                    if v = options[:comment_re]
         | 
| 27 | 
            +
                      e.comment_re = v
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                  end
         | 
| 19 30 | 
             
                end
         | 
| 20 31 |  | 
| 21 32 | 
             
                # default_command :generate
         | 
    
        data/lib/source2md/code_block.rb
    CHANGED
    
    | @@ -1,24 +1,22 @@ | |
| 1 1 | 
             
            module Source2MD
         | 
| 2 2 | 
             
              class CodeBlock
         | 
| 3 3 | 
             
                PADDING_KEEP = 2
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                ARROW_MARK         = %r{(?:#{RE.comment_re}) =>}
         | 
| 5 5 |  | 
| 6 | 
            -
                 | 
| 7 | 
            -
             | 
| 8 | 
            -
                def initialize(code, options = {})
         | 
| 9 | 
            -
                  @code = code
         | 
| 6 | 
            +
                def initialize(text, options = {})
         | 
| 7 | 
            +
                  @text = text
         | 
| 10 8 | 
             
                  @options = {
         | 
| 11 | 
            -
                    :lang =>  | 
| 9 | 
            +
                    :lang => nil,
         | 
| 12 10 | 
             
                    # :single_sharp_replace_to_blank_line => false,
         | 
| 13 11 | 
             
                  }.merge(options)
         | 
| 14 12 | 
             
                end
         | 
| 15 13 |  | 
| 16 14 | 
             
                def to_md
         | 
| 17 15 | 
             
                  [
         | 
| 18 | 
            -
                    "```#{code_block_head}",
         | 
| 16 | 
            +
                    "```#{code_block_head}\n",
         | 
| 19 17 | 
             
                    normalized_code,
         | 
| 20 | 
            -
                    " | 
| 21 | 
            -
                  ] | 
| 18 | 
            +
                    "```\n",
         | 
| 19 | 
            +
                  ].join
         | 
| 22 20 | 
             
                end
         | 
| 23 21 |  | 
| 24 22 | 
             
                private
         | 
| @@ -28,7 +26,7 @@ module Source2MD | |
| 28 26 | 
             
                  if s = @options[:desc]
         | 
| 29 27 | 
             
                    o << s
         | 
| 30 28 | 
             
                  else
         | 
| 31 | 
            -
                    if s =  | 
| 29 | 
            +
                    if s = lang
         | 
| 32 30 | 
             
                      o << s
         | 
| 33 31 | 
             
                    end
         | 
| 34 32 | 
             
                    if s = @options[:name]
         | 
| @@ -40,25 +38,22 @@ module Source2MD | |
| 40 38 | 
             
                end
         | 
| 41 39 |  | 
| 42 40 | 
             
                def normalized_code
         | 
| 43 | 
            -
                  lines.collect(&method(:normalize)) | 
| 41 | 
            +
                  lines.collect(&method(:normalize)).join
         | 
| 44 42 | 
             
                end
         | 
| 45 43 |  | 
| 46 44 | 
             
                def normalize(line)
         | 
| 47 45 | 
             
                  # if @options[:single_sharp_replace_to_blank_line]
         | 
| 48 46 | 
             
                  #   line = single_sharp_replace_to_blank_line(line)
         | 
| 49 47 | 
             
                  # end
         | 
| 50 | 
            -
                   | 
| 51 | 
            -
                    line = comment_mark_justfiy(line)
         | 
| 52 | 
            -
                  end
         | 
| 53 | 
            -
                  line
         | 
| 48 | 
            +
                  comment_re_justfiy(line)
         | 
| 54 49 | 
             
                end
         | 
| 55 50 |  | 
| 56 51 | 
             
                # def single_sharp_replace_to_blank_line(line)
         | 
| 57 52 | 
             
                #   line.gsub(/\A#\z/, "")
         | 
| 58 53 | 
             
                # end
         | 
| 59 54 |  | 
| 60 | 
            -
                def  | 
| 61 | 
            -
                  line.gsub(/(.*?)\s*(#{ | 
| 55 | 
            +
                def comment_re_justfiy(line)
         | 
| 56 | 
            +
                  line.gsub(/(.*?)\s*(#{ARROW_MARK})(.*)/) {
         | 
| 62 57 | 
             
                    a, b, c = Regexp.last_match.captures
         | 
| 63 58 | 
             
                    space = " " * (PADDING_KEEP + (max - a.size))
         | 
| 64 59 | 
             
                    [a, space, b, c].join
         | 
| @@ -66,24 +61,24 @@ module Source2MD | |
| 66 61 | 
             
                end
         | 
| 67 62 |  | 
| 68 63 | 
             
                def raw_lines
         | 
| 69 | 
            -
                  @raw_lines ||=  | 
| 64 | 
            +
                  @raw_lines ||= @text.lines
         | 
| 70 65 | 
             
                end
         | 
| 71 66 |  | 
| 72 67 | 
             
                def lines
         | 
| 73 | 
            -
                  @lines ||=  | 
| 74 | 
            -
                    min = raw_lines.collect { |e| e.slice(/^\s*/).size }.min
         | 
| 75 | 
            -
                    re = /^\s{#{min}}/
         | 
| 76 | 
            -
                    raw_lines.collect { |e| e.remove(re) }
         | 
| 77 | 
            -
                  end
         | 
| 68 | 
            +
                  @lines ||= TextHelper.space_prefix_remove(@text).lines
         | 
| 78 69 | 
             
                end
         | 
| 79 70 |  | 
| 80 71 | 
             
                def max
         | 
| 81 72 | 
             
                  @max ||= yield_self do
         | 
| 82 73 | 
             
                    av = lines
         | 
| 83 | 
            -
                    av = av.find_all { |e| e.match?( | 
| 84 | 
            -
                    av = av.collect { |e| e.gsub(/\s*#{ | 
| 74 | 
            +
                    av = av.find_all { |e| e.match?(ARROW_MARK) }
         | 
| 75 | 
            +
                    av = av.collect { |e| e.gsub(/\s*#{ARROW_MARK}.*\R/, "").size }
         | 
| 85 76 | 
             
                    av.max
         | 
| 86 77 | 
             
                  end
         | 
| 87 78 | 
             
                end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                def lang
         | 
| 81 | 
            +
                  @options[:lang] || ENV["DEFAULT_LANG"] || Source2MD.default_lang
         | 
| 82 | 
            +
                end
         | 
| 88 83 | 
             
              end
         | 
| 89 84 | 
             
            end
         | 
    
        data/lib/source2md/element.rb
    CHANGED
    
    | @@ -1,10 +1,7 @@ | |
| 1 1 | 
             
            module Source2MD
         | 
| 2 2 | 
             
              class Element
         | 
| 3 | 
            -
                KEY_VALUE_REGEXP = /^(?:#|\/\/)\+(\S+):\s*(.*)\R?/ # #+key: value
         | 
| 4 | 
            -
             | 
| 5 3 | 
             
                PLUGINS = [
         | 
| 6 4 | 
             
                  Formatter::TypeHidden,       # #+hidden: true
         | 
| 7 | 
            -
                  Formatter::TypeMdTitle,      # ## foo ##
         | 
| 8 5 | 
             
                  Formatter::TypeCodeInclude,  # #+code_include: path/to/foo.html xml:SAMPLE.xml
         | 
| 9 6 | 
             
                  Formatter::TypeRawInclude,   # #+raw_include: path/to/file.txt
         | 
| 10 7 | 
             
                  Formatter::TypeParseInclude, # #+parse_include: path/to/file.txt
         | 
| @@ -30,17 +27,25 @@ module Source2MD | |
| 30 27 | 
             
                end
         | 
| 31 28 |  | 
| 32 29 | 
             
                def head
         | 
| 33 | 
            -
                  @head ||= @content.scan( | 
| 30 | 
            +
                  @head ||= @content.scan(key_value_regexp).to_h.freeze
         | 
| 34 31 | 
             
                end
         | 
| 35 32 |  | 
| 36 33 | 
             
                def body
         | 
| 37 | 
            -
                  @body ||= @content.remove( | 
| 34 | 
            +
                  @body ||= @content.remove(key_value_regexp).freeze
         | 
| 38 35 | 
             
                end
         | 
| 39 36 |  | 
| 40 37 | 
             
                private
         | 
| 41 38 |  | 
| 42 39 | 
             
                def support_klass
         | 
| 43 | 
            -
                  @support_klass ||=  | 
| 40 | 
            +
                  @support_klass ||= yield_self do
         | 
| 41 | 
            +
                    Source2MD.logger.debug { "head: #{head.inspect}" }
         | 
| 42 | 
            +
                    Source2MD.logger.debug { "body: #{body.inspect}" }
         | 
| 43 | 
            +
                    PLUGINS.find do |e|
         | 
| 44 | 
            +
                      e.accept?(self).tap do |result|
         | 
| 45 | 
            +
                        Source2MD.logger.debug { "#{e} => #{result}" }
         | 
| 46 | 
            +
                      end
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
                  end
         | 
| 44 49 | 
             
                end
         | 
| 45 50 |  | 
| 46 51 | 
             
                def debug_log(object)
         | 
| @@ -58,5 +63,10 @@ module Source2MD | |
| 58 63 | 
             
                    s.gsub(/^/, "> ")
         | 
| 59 64 | 
             
                  end
         | 
| 60 65 | 
             
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                # #+key: value
         | 
| 68 | 
            +
                def key_value_regexp
         | 
| 69 | 
            +
                  /^#{RE.meta_re}\+(\S+):\s*(.*)\R?/
         | 
| 70 | 
            +
                end
         | 
| 61 71 | 
             
              end
         | 
| 62 72 | 
             
            end
         | 
| @@ -6,18 +6,26 @@ module Source2MD | |
| 6 6 | 
             
                  end
         | 
| 7 7 |  | 
| 8 8 | 
             
                  def to_md
         | 
| 9 | 
            -
                    [
         | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
                       | 
| 13 | 
            -
                       | 
| 14 | 
            -
             | 
| 9 | 
            +
                    o = []
         | 
| 10 | 
            +
                    o << "### #{element.head["name"]} ###\n"
         | 
| 11 | 
            +
                    if v = element.head["desc"]
         | 
| 12 | 
            +
                      o << "\n"
         | 
| 13 | 
            +
                      o << v + "\n"
         | 
| 14 | 
            +
                      o << "\n"
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                    o << CodeBlock.new(body).to_md
         | 
| 17 | 
            +
                    if v = element.head["comment"]
         | 
| 18 | 
            +
                      o << "\n"
         | 
| 19 | 
            +
                      o << v + "\n"
         | 
| 20 | 
            +
                      o << "\n"
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                    o.join
         | 
| 15 23 | 
             
                  end
         | 
| 16 24 |  | 
| 17 25 | 
             
                  private
         | 
| 18 26 |  | 
| 19 27 | 
             
                  def body
         | 
| 20 | 
            -
                    element.body.gsub( | 
| 28 | 
            +
                    element.body.gsub(%r{(#{RE.comment_re})$}, "")
         | 
| 21 29 | 
             
                  end
         | 
| 22 30 | 
             
                end
         | 
| 23 31 | 
             
              end
         | 
| @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            module Source2MD
         | 
| 2 2 | 
             
              module Formatter
         | 
| 3 | 
            -
                class  | 
| 3 | 
            +
                class TypeNop < Base
         | 
| 4 4 | 
             
                  def self.accept?(element)
         | 
| 5 | 
            -
                    element.head | 
| 5 | 
            +
                    element.head["nop"]
         | 
| 6 6 | 
             
                  end
         | 
| 7 7 |  | 
| 8 8 | 
             
                  def to_md
         | 
| 9 | 
            -
                     | 
| 9 | 
            +
                    ""
         | 
| 10 10 | 
             
                  end
         | 
| 11 11 | 
             
                end
         | 
| 12 12 | 
             
              end
         | 
| @@ -2,7 +2,7 @@ module Source2MD | |
| 2 2 | 
             
              module Formatter
         | 
| 3 3 | 
             
                class TypeSourceBlock < Base
         | 
| 4 4 | 
             
                  def self.accept?(element)
         | 
| 5 | 
            -
                    element.body. | 
| 5 | 
            +
                    element.body.match?(%r{#{RE.meta_re}\+BEGIN_SRC})
         | 
| 6 6 | 
             
                  end
         | 
| 7 7 |  | 
| 8 8 | 
             
                  def to_md
         | 
| @@ -15,12 +15,12 @@ module Source2MD | |
| 15 15 | 
             
                  private
         | 
| 16 16 |  | 
| 17 17 | 
             
                  def body
         | 
| 18 | 
            -
                    element.body.match( | 
| 18 | 
            +
                    element.body.match(%r{#{RE.meta_re}\+BEGIN_SRC.*?\R(.*)#{RE.meta_re}\+END_SRC}m).captures.first
         | 
| 19 19 | 
             
                  end
         | 
| 20 20 |  | 
| 21 21 | 
             
                  def code_block_desc
         | 
| 22 | 
            -
                    if md = element.body.match( | 
| 23 | 
            -
                      md.captures.first | 
| 22 | 
            +
                    if md = element.body.match(%r{#{RE.meta_re}\+BEGIN_SRC (.+)\R})
         | 
| 23 | 
            +
                      md.captures.first
         | 
| 24 24 | 
             
                    end
         | 
| 25 25 | 
             
                  end
         | 
| 26 26 |  | 
| @@ -2,15 +2,15 @@ module Source2MD | |
| 2 2 | 
             
              module Formatter
         | 
| 3 3 | 
             
                class TypeTable < Base
         | 
| 4 4 | 
             
                  def self.accept?(element)
         | 
| 5 | 
            -
                    !element.body.empty? && element.body.lines.all? { |e| e.match?( | 
| 5 | 
            +
                    !element.body.empty? && element.body.lines.all? { |e| e.match?(%r{#{RE.meta_re} \|.*\|$}) }
         | 
| 6 6 | 
             
                  end
         | 
| 7 7 |  | 
| 8 8 | 
             
                  def to_md
         | 
| 9 9 | 
             
                    element.body
         | 
| 10 | 
            -
                      .remove( | 
| 11 | 
            -
                      .remove(/\A\|-.*?-\|\R | 
| 12 | 
            -
                      .remove(/^\|-.*?-\|\z/)
         | 
| 13 | 
            -
                      .gsub(/-\+-/, "-|-") | 
| 10 | 
            +
                      .remove(%r{#{RE.meta_re} })
         | 
| 11 | 
            +
                      .remove(/\A\|-.*?-\|\R/)  # top
         | 
| 12 | 
            +
                      .remove(/^\|-.*?-\|\R\z/) # bottom
         | 
| 13 | 
            +
                      .gsub(/-\+-/, "-|-")
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 | 
             
                end
         | 
| 16 16 | 
             
              end
         | 
| @@ -3,10 +3,12 @@ module Source2MD | |
| 3 3 | 
             
                class TypeText < Base
         | 
| 4 4 | 
             
                  # "# xxx"
         | 
| 5 5 | 
             
                  # "#"
         | 
| 6 | 
            -
                  REGEXP =  | 
| 6 | 
            +
                  REGEXP = %r{#{RE.meta_re}( |$)}
         | 
| 7 7 |  | 
| 8 8 | 
             
                  def self.accept?(element)
         | 
| 9 | 
            -
                    element.body. | 
| 9 | 
            +
                    if element.body.present?
         | 
| 10 | 
            +
                      element.body.lines.all? { |e| e.match?(REGEXP) }
         | 
| 11 | 
            +
                    end
         | 
| 10 12 | 
             
                  end
         | 
| 11 13 |  | 
| 12 14 | 
             
                  def to_md
         | 
| @@ -26,7 +28,7 @@ module Source2MD | |
| 26 28 | 
             
                    if element.head["hankaku_kana"] == "true"
         | 
| 27 29 | 
             
                      s = TextHelper.hankaku_kana(s)
         | 
| 28 30 | 
             
                    end
         | 
| 29 | 
            -
                    s
         | 
| 31 | 
            +
                    TextHelper.eol_enter(s)
         | 
| 30 32 | 
             
                  end
         | 
| 31 33 | 
             
                end
         | 
| 32 34 | 
             
              end
         | 
    
        data/lib/source2md/generator.rb
    CHANGED
    
    
    
        data/lib/source2md/re.rb
    ADDED
    
    
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            module Source2MD
         | 
| 2 | 
            +
              class RegexpBuilder
         | 
| 3 | 
            +
                attr_accessor :prefix_re
         | 
| 4 | 
            +
                attr_accessor :comment_re
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                def initialize
         | 
| 7 | 
            +
                  update do |e|
         | 
| 8 | 
            +
                    e.prefix_re  = %r{^\s*}
         | 
| 9 | 
            +
                    e.comment_re = %r{#|//}
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def update(&block)
         | 
| 14 | 
            +
                  yield self
         | 
| 15 | 
            +
                  reset
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def meta_re
         | 
| 19 | 
            +
                  @meta_re ||= %r{#{prefix_re}(?:#{comment_re})}
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def stdout_re
         | 
| 23 | 
            +
                  @stdout_re ||= %r{^(?:#{comment_re}) >>.*$}
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                private
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def reset
         | 
| 29 | 
            +
                  @meta_re = nil
         | 
| 30 | 
            +
                  @stdout_re = nil
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
    
        data/lib/source2md/scanner.rb
    CHANGED
    
    | @@ -1,31 +1,36 @@ | |
| 1 1 | 
             
            module Source2MD
         | 
| 2 2 | 
             
              class Scanner
         | 
| 3 | 
            -
                SEPARATOR = "\\R{2,}"
         | 
| 4 | 
            -
             | 
| 5 | 
            -
                SRC_BEGIN_KEY = "BEGIN_SRC"
         | 
| 6 | 
            -
                SRC_END_KEY   = "END_SRC"
         | 
| 7 | 
            -
                SRC_BLOCK_RE  = /^#\+#{SRC_BEGIN_KEY}.*?^#\+#{SRC_END_KEY}/m
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                NORMAL_BLOCK_RE = /.*?#{SEPARATOR}/m
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                PARAGRAPH_RE = Regexp.union [
         | 
| 12 | 
            -
                  SRC_BLOCK_RE,
         | 
| 13 | 
            -
                  NORMAL_BLOCK_RE,
         | 
| 14 | 
            -
                ]
         | 
| 15 | 
            -
             | 
| 16 3 | 
             
                def initialize(content)
         | 
| 17 4 | 
             
                  @content = content
         | 
| 18 5 | 
             
                end
         | 
| 19 6 |  | 
| 20 7 | 
             
                def to_a
         | 
| 21 8 | 
             
                  v = @content
         | 
| 9 | 
            +
                  v = v.rstrip + "\n\n"
         | 
| 22 10 | 
             
                  if Source2MD.xmp_out_exclude
         | 
| 23 | 
            -
                    v = v.remove( | 
| 11 | 
            +
                    v = v.remove(RE.stdout_re)
         | 
| 24 12 | 
             
                  end
         | 
| 25 | 
            -
                  v = v | 
| 26 | 
            -
                  v = v. | 
| 27 | 
            -
                  v = v.collect(&:rstrip)
         | 
| 13 | 
            +
                  v = v.scan(paragraph_re)
         | 
| 14 | 
            +
                  v = v.collect { |e| e.rstrip + "\n" }
         | 
| 28 15 | 
             
                  v = v.find_all(&:present?)
         | 
| 29 16 | 
             
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                private
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def paragraph_re
         | 
| 21 | 
            +
                  Regexp.union(src_block_re, normal_block_re)
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def src_block_re
         | 
| 25 | 
            +
                  %r{#{RE.meta_re}\+BEGIN_SRC.*?#{RE.meta_re}\+END_SRC}m
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def normal_block_re
         | 
| 29 | 
            +
                  /.*?#{separator}/m
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def separator
         | 
| 33 | 
            +
                  "\\R{2,}"
         | 
| 34 | 
            +
                end
         | 
| 30 35 | 
             
              end
         | 
| 31 36 | 
             
            end
         | 
| @@ -6,10 +6,6 @@ module Source2MD | |
| 6 6 | 
             
                  text.gsub(/\n{3,}/, "\n\n")
         | 
| 7 7 | 
             
                end
         | 
| 8 8 |  | 
| 9 | 
            -
                def add_newline_at_end_of_text(text)
         | 
| 10 | 
            -
                  text.strip + "\n"
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
             | 
| 13 9 | 
             
                def oneline(text)
         | 
| 14 10 | 
             
                  text.remove(/\R+/)
         | 
| 15 11 | 
             
                end
         | 
| @@ -21,5 +17,18 @@ module Source2MD | |
| 21 17 | 
             
                def hankaku_kana(text)
         | 
| 22 18 | 
             
                  NKF.nkf("-wxZ4", text)
         | 
| 23 19 | 
             
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def indent(text, size = 2)
         | 
| 22 | 
            +
                  text.gsub(/^/, " " * size)
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                def eol_enter(text)
         | 
| 26 | 
            +
                  text.rstrip + "\n"
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                def space_prefix_remove(text)
         | 
| 30 | 
            +
                  min = text.lines.reject(&:blank?).collect { |e| e.slice(/^\s*/).size }.min
         | 
| 31 | 
            +
                  text.remove(/^ {#{min}}/)
         | 
| 32 | 
            +
                end
         | 
| 24 33 | 
             
              end
         | 
| 25 34 | 
             
            end
         | 
    
        data/lib/source2md/version.rb
    CHANGED
    
    
    
        data/lib/source2md.rb
    CHANGED
    
    | @@ -15,6 +15,7 @@ module Source2MD | |
| 15 15 | 
             
              config_accessor(:debug) { false }
         | 
| 16 16 | 
             
              config_accessor(:xmp_out_exclude) { false }
         | 
| 17 17 | 
             
              config_accessor(:readonly) { true }
         | 
| 18 | 
            +
              config_accessor(:default_lang) { "ruby" }
         | 
| 18 19 | 
             
            end
         | 
| 19 20 |  | 
| 20 21 | 
             
            require "zeitwerk"
         | 
| @@ -22,6 +23,7 @@ loader = Zeitwerk::Loader.for_gem | |
| 22 23 | 
             
            loader.ignore("#{__dir__}/source2md/logger.rb")
         | 
| 23 24 | 
             
            loader.ignore("#{__dir__}/source2md/**/_*.rb")
         | 
| 24 25 | 
             
            loader.inflector.inflect("source2md" => "Source2MD")
         | 
| 26 | 
            +
            loader.inflector.inflect("re" => "RE")
         | 
| 25 27 | 
             
            loader.log! if false
         | 
| 26 28 | 
             
            loader.setup
         | 
| 27 29 |  | 
    
        data/spec/code_block_spec.rb
    CHANGED
    
    
| @@ -6,7 +6,7 @@ module Source2MD | |
| 6 6 | 
             
                  actual = Element.new(<<~EOS).to_md
         | 
| 7 7 | 
             
            #+code_include: #{__dir__}/sample.yml
         | 
| 8 8 | 
             
            EOS
         | 
| 9 | 
            -
                  actual.should == <<~EOS | 
| 9 | 
            +
                  actual.should == <<~EOS
         | 
| 10 10 | 
             
            ```yml:sample.yml
         | 
| 11 11 | 
             
            (yaml)
         | 
| 12 12 | 
             
            ```
         | 
| @@ -19,7 +19,7 @@ EOS | |
| 19 19 | 
             
            #+lang: (lang)
         | 
| 20 20 | 
             
            #+name: (name)
         | 
| 21 21 | 
             
            EOS
         | 
| 22 | 
            -
                  actual.should == <<~EOS | 
| 22 | 
            +
                  actual.should == <<~EOS
         | 
| 23 23 | 
             
            ```(lang):(name)
         | 
| 24 24 | 
             
            (yaml)
         | 
| 25 25 | 
             
            ```
         | 
| @@ -30,7 +30,7 @@ EOS | |
| 30 30 | 
             
                  actual = Element.new(<<~EOS).to_md
         | 
| 31 31 | 
             
            #+code_include: #{__dir__}/sample.yml yaml:filename
         | 
| 32 32 | 
             
            EOS
         | 
| 33 | 
            -
                  actual.should == <<~EOS | 
| 33 | 
            +
                  actual.should == <<~EOS
         | 
| 34 34 | 
             
            ```yaml:filename
         | 
| 35 35 | 
             
            (yaml)
         | 
| 36 36 | 
             
            ```
         | 
| @@ -3,7 +3,7 @@ require "spec_helper" | |
| 3 3 | 
             
            module Source2MD
         | 
| 4 4 | 
             
              describe do
         | 
| 5 5 | 
             
                it "works" do
         | 
| 6 | 
            -
                  actual = Element.new(<<~EOS).to_md
         | 
| 6 | 
            +
                  actual = Element.new(TextHelper.indent(<<~EOS)).to_md
         | 
| 7 7 | 
             
            #+name: (name)
         | 
| 8 8 | 
             
            #+desc: (desc)
         | 
| 9 9 | 
             
            #+comment: (comment)
         | 
| @@ -11,7 +11,7 @@ module Source2MD | |
| 11 11 | 
             
            #
         | 
| 12 12 | 
             
            (code2)
         | 
| 13 13 | 
             
            EOS
         | 
| 14 | 
            -
                  actual.should == <<~EOS | 
| 14 | 
            +
                  actual.should == <<~EOS
         | 
| 15 15 | 
             
            ### (name) ###
         | 
| 16 16 |  | 
| 17 17 | 
             
            (desc)
         | 
| @@ -23,6 +23,7 @@ EOS | |
| 23 23 | 
             
            ```
         | 
| 24 24 |  | 
| 25 25 | 
             
            (comment)
         | 
| 26 | 
            +
             | 
| 26 27 | 
             
                  EOS
         | 
| 27 28 | 
             
                end
         | 
| 28 29 | 
             
              end
         | 
| @@ -8,7 +8,7 @@ module Source2MD | |
| 8 8 | 
             
                  (foo)
         | 
| 9 9 | 
             
                  #+END_SRC
         | 
| 10 10 | 
             
                  EOS
         | 
| 11 | 
            -
                  actual.should == <<~EOS | 
| 11 | 
            +
                  actual.should == <<~EOS
         | 
| 12 12 | 
             
            ```ruby
         | 
| 13 13 | 
             
            (foo)
         | 
| 14 14 | 
             
            ```
         | 
| @@ -21,7 +21,7 @@ module Source2MD | |
| 21 21 | 
             
                  (foo)
         | 
| 22 22 | 
             
                  #+END_SRC
         | 
| 23 23 | 
             
                  EOS
         | 
| 24 | 
            -
                  actual.should == <<~EOS | 
| 24 | 
            +
                  actual.should == <<~EOS
         | 
| 25 25 | 
             
            ```diff xxx:yyy
         | 
| 26 26 | 
             
            (foo)
         | 
| 27 27 | 
             
            ```
         | 
| @@ -11,7 +11,7 @@ module Source2MD | |
| 11 11 | 
             
            # | d | d | d |
         | 
| 12 12 | 
             
            # |---+---+---|
         | 
| 13 13 | 
             
            EOS
         | 
| 14 | 
            -
                  actual.should == <<~EOS | 
| 14 | 
            +
                  actual.should == <<~EOS
         | 
| 15 15 | 
             
            | h | h | h |
         | 
| 16 16 | 
             
            |---|---|---|
         | 
| 17 17 | 
             
            | d | d | d |
         | 
| @@ -25,7 +25,7 @@ EOS | |
| 25 25 | 
             
            # |---+---+---|
         | 
| 26 26 | 
             
            # | d | d | d |
         | 
| 27 27 | 
             
            EOS
         | 
| 28 | 
            -
                  actual.should == <<~EOS | 
| 28 | 
            +
                  actual.should == <<~EOS
         | 
| 29 29 | 
             
            | h | h | h |
         | 
| 30 30 | 
             
            |---|---|---|
         | 
| 31 31 | 
             
            | d | d | d |
         | 
| @@ -3,11 +3,12 @@ require "spec_helper" | |
| 3 3 | 
             
            module Source2MD
         | 
| 4 4 | 
             
              describe do
         | 
| 5 5 | 
             
                it "works" do
         | 
| 6 | 
            +
                  # Source2MD.logger.level = :debug
         | 
| 6 7 | 
             
                  actual = Element.new(<<~EOS).to_md
         | 
| 7 8 | 
             
            # - foo
         | 
| 8 9 | 
             
            #   http://example.com/
         | 
| 9 10 | 
             
            EOS
         | 
| 10 | 
            -
                  actual.should == <<~EOS | 
| 11 | 
            +
                  actual.should == <<~EOS
         | 
| 11 12 | 
             
            - foo
         | 
| 12 13 | 
             
              http://example.com/
         | 
| 13 14 | 
             
            EOS
         | 
| @@ -22,7 +23,7 @@ EOS | |
| 22 23 | 
             
            # c
         | 
| 23 24 | 
             
            # d
         | 
| 24 25 | 
             
            EOS
         | 
| 25 | 
            -
                  actual.should == <<~EOS | 
| 26 | 
            +
                  actual.should == <<~EOS
         | 
| 26 27 | 
             
            abcd
         | 
| 27 28 | 
             
            EOS
         | 
| 28 29 | 
             
                end
         | 
| @@ -36,7 +37,7 @@ EOS | |
| 36 37 | 
             
            # c
         | 
| 37 38 | 
             
            # d
         | 
| 38 39 | 
             
            EOS
         | 
| 39 | 
            -
                  actual.should == <<~EOS | 
| 40 | 
            +
                  actual.should == <<~EOS
         | 
| 40 41 | 
             
            a b c d
         | 
| 41 42 | 
             
            EOS
         | 
| 42 43 | 
             
                end
         | 
| @@ -46,7 +47,7 @@ EOS | |
| 46 47 | 
             
            #+hankaku_kana: true
         | 
| 47 48 | 
             
            # アア
         | 
| 48 49 | 
             
            EOS
         | 
| 49 | 
            -
                  actual.should == " | 
| 50 | 
            +
                  actual.should == "アア\n"
         | 
| 50 51 | 
             
                end
         | 
| 51 52 | 
             
              end
         | 
| 52 53 | 
             
            end
         | 
    
        data/spec/scanner_spec.rb
    CHANGED
    
    | @@ -21,13 +21,7 @@ module Source2MD | |
| 21 21 | 
             
                  foo
         | 
| 22 22 | 
             
                  EOS
         | 
| 23 23 |  | 
| 24 | 
            -
                  ary | 
| 25 | 
            -
                  assert { ary == ["foo", "#+BEGIN_SRC\n\nfoo\n\n#+END_SRC", "foo", "#+BEGIN_SRC\nfoo\n#+END_SRC", "foo"] }
         | 
| 24 | 
            +
                  assert { ary == ["foo\n", "#+BEGIN_SRC\n\nfoo\n\n#+END_SRC\n", "foo\n", "#+BEGIN_SRC\nfoo\n#+END_SRC\n", "foo\n"] }
         | 
| 26 25 | 
             
                end
         | 
| 27 26 | 
             
              end
         | 
| 28 27 | 
             
            end
         | 
| 29 | 
            -
            # >> .
         | 
| 30 | 
            -
            # >> 
         | 
| 31 | 
            -
            # >> Finished in 0.00793 seconds (files took 0.26816 seconds to load)
         | 
| 32 | 
            -
            # >> 1 example, 0 failures
         | 
| 33 | 
            -
            # >> 
         | 
    
        data/spec/text_helper_spec.rb
    CHANGED
    
    | @@ -6,14 +6,18 @@ module Source2MD | |
| 6 6 | 
             
                  assert { TextHelper.blank_lines_squish("A\nB\n\nC\n\n\nD") == "A\nB\n\nC\n\nD" }
         | 
| 7 7 | 
             
                end
         | 
| 8 8 |  | 
| 9 | 
            -
                it " | 
| 10 | 
            -
                  assert { TextHelper. | 
| 11 | 
            -
                  assert { TextHelper. | 
| 12 | 
            -
                  assert { TextHelper.add_newline_at_end_of_text("A\n\n") == "A\n" }
         | 
| 9 | 
            +
                it "eol_enter" do
         | 
| 10 | 
            +
                  assert { TextHelper.eol_enter("A") == "A\n"     }
         | 
| 11 | 
            +
                  assert { TextHelper.eol_enter("A\n\n") == "A\n" }
         | 
| 13 12 | 
             
                end
         | 
| 14 13 |  | 
| 15 14 | 
             
                it "hankaku_kana" do
         | 
| 16 15 | 
             
                  assert { TextHelper.hankaku_kana("アア") == "アア" }
         | 
| 17 16 | 
             
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                it "space_prefix_remove" do
         | 
| 19 | 
            +
                  assert { TextHelper.space_prefix_remove(" a\n  b\n") == "a\n b\n" }
         | 
| 20 | 
            +
                  assert { TextHelper.space_prefix_remove(" a\n\n  b\n") == "a\n\n b\n" }
         | 
| 21 | 
            +
                end
         | 
| 18 22 | 
             
              end
         | 
| 19 23 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: source2md
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.11
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Akira Ikeda
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023-08- | 
| 11 | 
            +
            date: 2023-08-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -155,15 +155,14 @@ files: | |
| 155 155 | 
             
            - doc/0140_code_include.rb
         | 
| 156 156 | 
             
            - doc/0150_raw_include.rb
         | 
| 157 157 | 
             
            - doc/0160_title.rb
         | 
| 158 | 
            -
            - doc/ | 
| 159 | 
            -
            - doc/ | 
| 160 | 
            -
            - doc/ | 
| 161 | 
            -
            - doc/ | 
| 162 | 
            -
            - doc/ | 
| 163 | 
            -
            - doc/ | 
| 164 | 
            -
            - doc/ | 
| 165 | 
            -
            - doc/ | 
| 166 | 
            -
            - doc/0250_parse_include.rb
         | 
| 158 | 
            +
            - doc/0170_table.rb
         | 
| 159 | 
            +
            - doc/0180_method.rb
         | 
| 160 | 
            +
            - doc/0190_alert.rb
         | 
| 161 | 
            +
            - doc/0200_text.rb
         | 
| 162 | 
            +
            - doc/0210_text_oneline.rb
         | 
| 163 | 
            +
            - doc/0220_text_squish.rb
         | 
| 164 | 
            +
            - doc/0230_text_hankaku_kana.rb
         | 
| 165 | 
            +
            - doc/0240_parse_include.rb
         | 
| 167 166 | 
             
            - doc/setup.rb
         | 
| 168 167 | 
             
            - examples/cli-test.rs
         | 
| 169 168 | 
             
            - examples/cli-test.sh
         | 
| @@ -177,7 +176,6 @@ files: | |
| 177 176 | 
             
            - examples/type_alert.rb
         | 
| 178 177 | 
             
            - examples/type_code_include.rb
         | 
| 179 178 | 
             
            - examples/type_hidden.rb
         | 
| 180 | 
            -
            - examples/type_md_title.rb
         | 
| 181 179 | 
             
            - examples/type_method.rb
         | 
| 182 180 | 
             
            - examples/type_partial_code.rb
         | 
| 183 181 | 
             
            - examples/type_source_block.rb
         | 
| @@ -194,8 +192,8 @@ files: | |
| 194 192 | 
             
            - lib/source2md/formatter/type_code_include.rb
         | 
| 195 193 | 
             
            - lib/source2md/formatter/type_else.rb
         | 
| 196 194 | 
             
            - lib/source2md/formatter/type_hidden.rb
         | 
| 197 | 
            -
            - lib/source2md/formatter/type_md_title.rb
         | 
| 198 195 | 
             
            - lib/source2md/formatter/type_method.rb
         | 
| 196 | 
            +
            - lib/source2md/formatter/type_nop.rb
         | 
| 199 197 | 
             
            - lib/source2md/formatter/type_parse_include.rb
         | 
| 200 198 | 
             
            - lib/source2md/formatter/type_partial_code.rb
         | 
| 201 199 | 
             
            - lib/source2md/formatter/type_raw_include.rb
         | 
| @@ -206,6 +204,8 @@ files: | |
| 206 204 | 
             
            - lib/source2md/formatter/type_warn.rb
         | 
| 207 205 | 
             
            - lib/source2md/generator.rb
         | 
| 208 206 | 
             
            - lib/source2md/logger.rb
         | 
| 207 | 
            +
            - lib/source2md/re.rb
         | 
| 208 | 
            +
            - lib/source2md/regexp_builder.rb
         | 
| 209 209 | 
             
            - lib/source2md/scanner.rb
         | 
| 210 210 | 
             
            - lib/source2md/section.rb
         | 
| 211 211 | 
             
            - lib/source2md/tasks/about.rake
         | 
| @@ -219,7 +219,6 @@ files: | |
| 219 219 | 
             
            - spec/formatter/type_alert_spec.rb
         | 
| 220 220 | 
             
            - spec/formatter/type_code_include_spec.rb
         | 
| 221 221 | 
             
            - spec/formatter/type_hidden_spec.rb
         | 
| 222 | 
            -
            - spec/formatter/type_md_title_spec.rb
         | 
| 223 222 | 
             
            - spec/formatter/type_method_spec.rb
         | 
| 224 223 | 
             
            - spec/formatter/type_parse_include_spec.rb
         | 
| 225 224 | 
             
            - spec/formatter/type_partial_code_spec.rb
         | 
| @@ -261,7 +260,6 @@ test_files: | |
| 261 260 | 
             
            - spec/formatter/type_alert_spec.rb
         | 
| 262 261 | 
             
            - spec/formatter/type_code_include_spec.rb
         | 
| 263 262 | 
             
            - spec/formatter/type_hidden_spec.rb
         | 
| 264 | 
            -
            - spec/formatter/type_md_title_spec.rb
         | 
| 265 263 | 
             
            - spec/formatter/type_method_spec.rb
         | 
| 266 264 | 
             
            - spec/formatter/type_parse_include_spec.rb
         | 
| 267 265 | 
             
            - spec/formatter/type_partial_code_spec.rb
         | 
    
        data/doc/0170_md_like_title.rb
    DELETED
    
    | @@ -1,24 +0,0 @@ | |
| 1 | 
            -
            #+hidden: true
         | 
| 2 | 
            -
            require "./setup"
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            ### Markdown style title ###
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            # The condition is that there are the same number of sharps on the back.
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            #+BEGIN_SRC
         | 
| 9 | 
            -
            puts Source2MD::Section.new(<<~EOS).to_md
         | 
| 10 | 
            -
              # Title Level 1 #
         | 
| 11 | 
            -
             | 
| 12 | 
            -
              ## Title Level 2 ##
         | 
| 13 | 
            -
             | 
| 14 | 
            -
              ### Title Level 3 ###
         | 
| 15 | 
            -
            EOS
         | 
| 16 | 
            -
            #+END_SRC
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            # ```
         | 
| 19 | 
            -
            # # Title Level 1 #
         | 
| 20 | 
            -
            #
         | 
| 21 | 
            -
            # ## Title Level 2 ##
         | 
| 22 | 
            -
            #
         | 
| 23 | 
            -
            # ### Title Level 3 ###
         | 
| 24 | 
            -
            # ```
         | 
    
        data/examples/type_md_title.rb
    DELETED
    
    | @@ -1,15 +0,0 @@ | |
| 1 | 
            -
            #+hidden: true
         | 
| 2 | 
            -
            require "./setup"
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            puts Source2MD::Element.new(<<~EOS).to_md
         | 
| 5 | 
            -
            ## foo ##
         | 
| 6 | 
            -
            EOS
         | 
| 7 | 
            -
            # >> > -------------------------------------------------------------------------------- Source2MD::Part::TypeMdTitle
         | 
| 8 | 
            -
            # >> > {}
         | 
| 9 | 
            -
            # >> > ------------------------------------------------------------ in
         | 
| 10 | 
            -
            # >> > ## foo ##
         | 
| 11 | 
            -
            # >> >
         | 
| 12 | 
            -
            # >> > ------------------------------------------------------------ out
         | 
| 13 | 
            -
            # >> > ## foo ##
         | 
| 14 | 
            -
            # >> > ------------------------------------------------------------
         | 
| 15 | 
            -
            # >> ## foo ##
         |