fuji_markdown 0.2.3 → 0.3.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/Gemfile.lock +1 -1
- data/README.md +20 -3
- data/exe/fujimd +1 -1
- data/lib/fuji_markdown.rb +14 -5
- data/lib/fuji_markdown/postprocessors/ruby.rb +3 -3
- data/lib/fuji_markdown/preprocessors/escape_narou.rb +11 -0
- data/lib/fuji_markdown/preprocessors/ruby.rb +1 -8
- data/lib/fuji_markdown/processor.rb +3 -5
- data/lib/fuji_markdown/renderers/kakuyomu_renderer.rb +1 -41
- data/lib/fuji_markdown/renderers/narou_renderer.rb +26 -0
- data/lib/fuji_markdown/renderers/text_renderer.rb +61 -0
- data/lib/fuji_markdown/version.rb +1 -1
- metadata +5 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 4ec58909236c9cff6ddf2e3c280f62f41548ea3e62e1d2336ef825b8a18ed5ff
         | 
| 4 | 
            +
              data.tar.gz: 4fbfd254823a2ae17baebc17e8d8ca49a8077b1738f47ffb17d12f0b3409ab74
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: '01829618095700ddb3bc36a1bb07436e724115dd4c29a5ad9d314ced11bf707e6b99b677fcabf814725d768b6adb11ec32313cecb597c9898be5fc42ca5b3327'
         | 
| 7 | 
            +
              data.tar.gz: 6b4b5b47ae5471eb6370b9e80ede54b7bffbef0cea0df32b77e2a987cf6e52ce439ed795bf6528defb4803ce65ed5b587f21a7319704dbf890ca6741870b20ad
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -21,9 +21,26 @@ Or install it yourself as: | |
| 21 21 |  | 
| 22 22 | 
             
            ## Usage
         | 
| 23 23 |  | 
| 24 | 
            -
             | 
| 24 | 
            +
            ```ruby
         | 
| 25 | 
            +
            require 'fuji_markdown'
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            FujiMarkdown.render('山へ*柴刈り*に出かけたおじいさんは{紅蓮の炎|ヘルフレイム}に焼かれ果てた。')
         | 
| 28 | 
            +
            # => "<p>山へ<em>柴刈り</em>に出かけたおじいさんは<ruby>紅蓮の炎<rt>ヘルフレイム</rt></ruby>に焼かれ果てた。</p>\n"
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            FujiMarkdown.render('山へ*柴刈り*に出かけたおじいさんは{紅蓮の炎|ヘルフレイム}に焼かれ果てた。', :KAKUYOMU)
         | 
| 31 | 
            +
            # => "山へ《《柴刈り》》に出かけたおじいさんは|紅蓮の炎《ヘルフレイム》に焼かれ果てた。\n"
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            FujiMarkdown.render('山へ*柴刈り*に出かけたおじいさんは{紅蓮の炎|ヘルフレイム}に焼かれ果てた。', :NAROU)
         | 
| 34 | 
            +
            # => "山へ|柴《・》|刈《・》|り《・》に出かけたおじいさんは|紅蓮の炎《ヘルフレイム》に焼かれ果てた。\n"
         | 
| 35 | 
            +
            ```
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            See [spec](spec/fuji_markdown_spec.rb) for more detail.
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            ---
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            In addition, you can use `fujimd` command from CLI:
         | 
| 25 42 |  | 
| 26 | 
            -
                $ fujimd your- | 
| 43 | 
            +
                $ fujimd your-FujiMarkdown-file.md [--output kakuyomu]
         | 
| 27 44 |  | 
| 28 45 | 
             
            ## Development
         | 
| 29 46 |  | 
| @@ -41,4 +58,4 @@ The gem is available as open source under the terms of the [MIT License](https:/ | |
| 41 58 |  | 
| 42 59 | 
             
            ## Code of Conduct
         | 
| 43 60 |  | 
| 44 | 
            -
            Everyone interacting in the FujiMarkdown project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/ | 
| 61 | 
            +
            Everyone interacting in the FujiMarkdown project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/fuji-nakahara/fuji_markdown/blob/master/CODE_OF_CONDUCT.md).
         | 
    
        data/exe/fujimd
    CHANGED
    
    | @@ -8,7 +8,7 @@ option = :HTML | |
| 8 8 | 
             
            OptionParser.new do |opts|
         | 
| 9 9 | 
             
              opts.banner = 'Usage: fujimd [--output <format>] <file>...'
         | 
| 10 10 |  | 
| 11 | 
            -
              opts.on('-o', '--output FORMAT', 'Specify output format:  | 
| 11 | 
            +
              opts.on('-o', '--output FORMAT', 'Specify output format: kakuyomu, narou or html') do |fmt|
         | 
| 12 12 | 
             
                option = fmt.upcase.to_sym
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
    
        data/lib/fuji_markdown.rb
    CHANGED
    
    | @@ -1,11 +1,14 @@ | |
| 1 | 
            +
            require 'commonmarker'
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require_relative 'fuji_markdown/processor'
         | 
| 2 4 | 
             
            require_relative 'fuji_markdown/version'
         | 
| 3 5 |  | 
| 4 6 | 
             
            require_relative 'fuji_markdown/postprocessors/ruby'
         | 
| 5 7 | 
             
            require_relative 'fuji_markdown/preprocessors/ruby'
         | 
| 8 | 
            +
            require_relative 'fuji_markdown/preprocessors/escape_narou'
         | 
| 9 | 
            +
            require_relative 'fuji_markdown/renderers/text_renderer'
         | 
| 6 10 | 
             
            require_relative 'fuji_markdown/renderers/kakuyomu_renderer'
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            require 'commonmarker'
         | 
| 11 | 
            +
            require_relative 'fuji_markdown/renderers/narou_renderer'
         | 
| 9 12 |  | 
| 10 13 | 
             
            module FujiMarkdown
         | 
| 11 14 | 
             
              class << self
         | 
| @@ -29,13 +32,19 @@ module FujiMarkdown | |
| 29 32 | 
             
                  when :HTML
         | 
| 30 33 | 
             
                    {
         | 
| 31 34 | 
             
                      preprocessors: [Preprocessors::Ruby.new],
         | 
| 32 | 
            -
                      renderer: | 
| 35 | 
            +
                      renderer:      CommonMarker::HtmlRenderer.new(options: [:HARDBREAKS, :UNSAFE]),
         | 
| 33 36 | 
             
                    }
         | 
| 34 37 | 
             
                  when :KAKUYOMU
         | 
| 35 38 | 
             
                    {
         | 
| 36 | 
            -
                      preprocessors: | 
| 39 | 
            +
                      preprocessors:  [Preprocessors::Ruby.new, Proc.new { |text| text.gsub!(/《/, '|《') }],
         | 
| 40 | 
            +
                      postprocessors: [Postprocessors::Ruby.new],
         | 
| 41 | 
            +
                      renderer:       Renderers::KakuyomuRenderer.new,
         | 
| 42 | 
            +
                    }
         | 
| 43 | 
            +
                  when :NAROU
         | 
| 44 | 
            +
                    {
         | 
| 45 | 
            +
                      preprocessors:  [Preprocessors::Ruby.new, Preprocessors::EscapeNarou.new],
         | 
| 37 46 | 
             
                      postprocessors: [Postprocessors::Ruby.new],
         | 
| 38 | 
            -
                      renderer: | 
| 47 | 
            +
                      renderer:       Renderers::NarouRenderer.new,
         | 
| 39 48 | 
             
                    }
         | 
| 40 49 | 
             
                  else
         | 
| 41 50 | 
             
                    raise ArgumentError, "Invalid option #{option}"
         | 
| @@ -4,7 +4,7 @@ module FujiMarkdown | |
| 4 4 | 
             
                  attr_reader :omit_start_symbol
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def initialize(omit_start_symbol: false)
         | 
| 7 | 
            -
                    @ruby | 
| 7 | 
            +
                    @ruby              = false
         | 
| 8 8 | 
             
                    @omit_start_symbol = omit_start_symbol
         | 
| 9 9 | 
             
                  end
         | 
| 10 10 |  | 
| @@ -28,7 +28,7 @@ module FujiMarkdown | |
| 28 28 | 
             
                      node.delete
         | 
| 29 29 | 
             
                    when '<rt>'
         | 
| 30 30 | 
             
                      kanji_node = node.previous
         | 
| 31 | 
            -
                      kana_node | 
| 31 | 
            +
                      kana_node  = node.next
         | 
| 32 32 | 
             
                      if @ruby && kana_node.next.string_content == '</rt>'
         | 
| 33 33 | 
             
                        convert_to_kakuyomu_ruby!(kanji_node, kana_node)
         | 
| 34 34 | 
             
                      end
         | 
| @@ -42,7 +42,7 @@ module FujiMarkdown | |
| 42 42 |  | 
| 43 43 | 
             
                  def convert_to_kakuyomu_ruby!(kanji_node, kana_node)
         | 
| 44 44 | 
             
                    kanji_node.string_content = "|#{kanji_node.string_content}" if kanji_node.type == :text && !(omit_start_symbol && kanji_node.string_content.match(/\A[一-龠々]+\z/))
         | 
| 45 | 
            -
                    kana_node.string_content | 
| 45 | 
            +
                    kana_node.string_content  = "《#{kana_node.string_content}》" if kana_node.type == :text
         | 
| 46 46 | 
             
                  end
         | 
| 47 47 | 
             
                end
         | 
| 48 48 | 
             
              end
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            module FujiMarkdown
         | 
| 2 | 
            +
              module Preprocessors
         | 
| 3 | 
            +
                class EscapeNarou
         | 
| 4 | 
            +
                  def call(text)
         | 
| 5 | 
            +
                    text.gsub!(/([一-龠々])(([\p{Hiragana}\p{Katakana}]+))/, '\1|(\2)')
         | 
| 6 | 
            +
                    text.gsub!(/([一-龠々])\(([\p{Hiragana}\p{Katakana}]+)\)/, '\1|(\2)')
         | 
| 7 | 
            +
                    text.gsub!(/《([\p{Hiragana}\p{Katakana}]+)》/, '|《\1》')
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| @@ -1,14 +1,7 @@ | |
| 1 1 | 
             
            module FujiMarkdown
         | 
| 2 2 | 
             
              module Preprocessors
         | 
| 3 3 | 
             
                class Ruby
         | 
| 4 | 
            -
                  RUBY_PATTERN =
         | 
| 5 | 
            -
                    %r(
         | 
| 6 | 
            -
                        {
         | 
| 7 | 
            -
                        (?<kanji>[^{}|]*)
         | 
| 8 | 
            -
                        \|
         | 
| 9 | 
            -
                        (?<kana>[^{}]*)
         | 
| 10 | 
            -
                        }
         | 
| 11 | 
            -
                      )x
         | 
| 4 | 
            +
                  RUBY_PATTERN = %r({(?<kanji>[^{}|]*)\|(?<kana>[^{}]*)})
         | 
| 12 5 |  | 
| 13 6 | 
             
                  def call(text)
         | 
| 14 7 | 
             
                    text.gsub!(RUBY_PATTERN) do |match|
         | 
| @@ -1,14 +1,12 @@ | |
| 1 | 
            -
            require 'commonmarker'
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            module FujiMarkdown
         | 
| 4 2 | 
             
              class Processor
         | 
| 5 3 | 
             
                attr_reader :preprocessors, :parser, :postprocessors, :renderer
         | 
| 6 4 |  | 
| 7 5 | 
             
                def initialize(preprocessors: [], parser: CommonMarker, postprocessors: [], renderer: CommonMarker::HtmlRenderer.new)
         | 
| 8 | 
            -
                  @preprocessors | 
| 9 | 
            -
                  @parser | 
| 6 | 
            +
                  @preprocessors  = preprocessors
         | 
| 7 | 
            +
                  @parser         = parser
         | 
| 10 8 | 
             
                  @postprocessors = postprocessors
         | 
| 11 | 
            -
                  @renderer | 
| 9 | 
            +
                  @renderer       = renderer
         | 
| 12 10 | 
             
                end
         | 
| 13 11 |  | 
| 14 12 | 
             
                def parse(text)
         | 
| @@ -1,36 +1,6 @@ | |
| 1 | 
            -
            require 'commonmarker'
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            module FujiMarkdown
         | 
| 4 2 | 
             
              module Renderers
         | 
| 5 | 
            -
                class KakuyomuRenderer <  | 
| 6 | 
            -
                  def header(node)
         | 
| 7 | 
            -
                    out("\n") if node.previous&.type&.==(:paragraph)
         | 
| 8 | 
            -
                    block do
         | 
| 9 | 
            -
                      out('#' * node.header_level, ' ', :children)
         | 
| 10 | 
            -
                    end
         | 
| 11 | 
            -
                    out("\n")
         | 
| 12 | 
            -
                  end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                  def paragraph(node)
         | 
| 15 | 
            -
                    return out(:children) if node.parent.type == :blockquote
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                    block do
         | 
| 18 | 
            -
                      out(:children)
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  def blockquote(node)
         | 
| 23 | 
            -
                    out("\n") if node.previous&.type&.==(:paragraph)
         | 
| 24 | 
            -
                    block do
         | 
| 25 | 
            -
                      out('> ', :children)
         | 
| 26 | 
            -
                    end
         | 
| 27 | 
            -
                    out("\n")
         | 
| 28 | 
            -
                  end
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                  def hrule(_)
         | 
| 31 | 
            -
                    out("\n")
         | 
| 32 | 
            -
                  end
         | 
| 33 | 
            -
             | 
| 3 | 
            +
                class KakuyomuRenderer < TextRenderer
         | 
| 34 4 | 
             
                  def code_block(node)
         | 
| 35 5 | 
             
                    out("\n") if node.previous&.type&.==(:paragraph)
         | 
| 36 6 | 
             
                    block do
         | 
| @@ -46,16 +16,6 @@ module FujiMarkdown | |
| 46 16 | 
             
                  def link(node)
         | 
| 47 17 | 
             
                    out(:children)
         | 
| 48 18 | 
             
                  end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                  def code(node)
         | 
| 51 | 
            -
                    out('`')
         | 
| 52 | 
            -
                    out(escape_html(node.string_content))
         | 
| 53 | 
            -
                    out('`')
         | 
| 54 | 
            -
                  end
         | 
| 55 | 
            -
             | 
| 56 | 
            -
                  def softbreak(_)
         | 
| 57 | 
            -
                    out("\n")
         | 
| 58 | 
            -
                  end
         | 
| 59 19 | 
             
                end
         | 
| 60 20 | 
             
              end
         | 
| 61 21 | 
             
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            module FujiMarkdown
         | 
| 2 | 
            +
              module Renderers
         | 
| 3 | 
            +
                class NarouRenderer < TextRenderer
         | 
| 4 | 
            +
                  def code_block(node)
         | 
| 5 | 
            +
                    out("\n") if node.previous&.type&.==(:paragraph)
         | 
| 6 | 
            +
                    block do
         | 
| 7 | 
            +
                      out(escape_html(node.string_content))
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
                    out("\n")
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def emph(node)
         | 
| 13 | 
            +
                    node.walk do |n|
         | 
| 14 | 
            +
                      if n.type == :text
         | 
| 15 | 
            +
                        n.string_content = n.string_content.chars.map { |char| "|#{char}《・》"}.join
         | 
| 16 | 
            +
                      end
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                    out(:children)
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def link(node)
         | 
| 22 | 
            +
                    out(:children)
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -0,0 +1,61 @@ | |
| 1 | 
            +
            module FujiMarkdown
         | 
| 2 | 
            +
              module Renderers
         | 
| 3 | 
            +
                class TextRenderer < CommonMarker::HtmlRenderer
         | 
| 4 | 
            +
                  def header(node)
         | 
| 5 | 
            +
                    out("\n") if node.previous&.type&.==(:paragraph)
         | 
| 6 | 
            +
                    block do
         | 
| 7 | 
            +
                      out('#' * node.header_level, ' ', :children)
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
                    out("\n")
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def paragraph(node)
         | 
| 13 | 
            +
                    return out(:children) if node.parent.type == :blockquote
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    block do
         | 
| 16 | 
            +
                      out(:children)
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def blockquote(node)
         | 
| 21 | 
            +
                    out("\n") if node.previous&.type&.==(:paragraph)
         | 
| 22 | 
            +
                    block do
         | 
| 23 | 
            +
                      out('> ', :children)
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                    out("\n")
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  def hrule(_)
         | 
| 29 | 
            +
                    out("\n")
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  def code_block(node)
         | 
| 33 | 
            +
                    out("\n") if node.previous&.type&.==(:paragraph)
         | 
| 34 | 
            +
                    out('```')
         | 
| 35 | 
            +
                    block do
         | 
| 36 | 
            +
                      out(escape_html(node.string_content))
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
                    out('```')
         | 
| 39 | 
            +
                    out("\n")
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def emph(_)
         | 
| 43 | 
            +
                    out('*', :children, '*')
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  def link(node)
         | 
| 47 | 
            +
                    out('[', :children, '](', node.url.nil? ? '' : escape_href(node.url), ')')
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  def code(node)
         | 
| 51 | 
            +
                    out('`')
         | 
| 52 | 
            +
                    out(escape_html(node.string_content))
         | 
| 53 | 
            +
                    out('`')
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  def softbreak(_)
         | 
| 57 | 
            +
                    out("\n")
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fuji_markdown
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Fuji Nakahara
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018-11- | 
| 11 | 
            +
            date: 2018-11-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: commonmarker
         | 
| @@ -119,9 +119,12 @@ files: | |
| 119 119 | 
             
            - fuji_markdown.gemspec
         | 
| 120 120 | 
             
            - lib/fuji_markdown.rb
         | 
| 121 121 | 
             
            - lib/fuji_markdown/postprocessors/ruby.rb
         | 
| 122 | 
            +
            - lib/fuji_markdown/preprocessors/escape_narou.rb
         | 
| 122 123 | 
             
            - lib/fuji_markdown/preprocessors/ruby.rb
         | 
| 123 124 | 
             
            - lib/fuji_markdown/processor.rb
         | 
| 124 125 | 
             
            - lib/fuji_markdown/renderers/kakuyomu_renderer.rb
         | 
| 126 | 
            +
            - lib/fuji_markdown/renderers/narou_renderer.rb
         | 
| 127 | 
            +
            - lib/fuji_markdown/renderers/text_renderer.rb
         | 
| 125 128 | 
             
            - lib/fuji_markdown/version.rb
         | 
| 126 129 | 
             
            homepage: https://github.com/fuji-nakahara/fuji_markdown
         | 
| 127 130 | 
             
            licenses:
         |