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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6f9cfdc66de8703b71d832884c6e49fb55e184a5778e5debfab45d09b395301
4
- data.tar.gz: 6c29e72866b53062eda0c06df826bf7cbed8aa42770f6b8f57a39def7f5d1a28
3
+ metadata.gz: 4ec58909236c9cff6ddf2e3c280f62f41548ea3e62e1d2336ef825b8a18ed5ff
4
+ data.tar.gz: 4fbfd254823a2ae17baebc17e8d8ca49a8077b1738f47ffb17d12f0b3409ab74
5
5
  SHA512:
6
- metadata.gz: 379f8d82e98fe52ef0a5a698bb587b1b43464ec69a587863a1df0e87e00ab37922153712174bdda6d092aa4644997a328ac86629f9b937165e4eda4ea66ff3b0
7
- data.tar.gz: 12af8845e2a6d4fb5a5285532326e1de8c03745b6eeaf89417ed8d1a297781e6b7bdada31dc011114ac89f647e019530d13fd29647767c6c53514523af760ab0
6
+ metadata.gz: '01829618095700ddb3bc36a1bb07436e724115dd4c29a5ad9d314ced11bf707e6b99b677fcabf814725d768b6adb11ec32313cecb597c9898be5fc42ca5b3327'
7
+ data.tar.gz: 6b4b5b47ae5471eb6370b9e80ede54b7bffbef0cea0df32b77e2a987cf6e52ce439ed795bf6528defb4803ce65ed5b587f21a7319704dbf890ca6741870b20ad
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fuji_markdown (0.2.3)
4
+ fuji_markdown (0.3.0)
5
5
  commonmarker (~> 0.17)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -21,9 +21,26 @@ Or install it yourself as:
21
21
 
22
22
  ## Usage
23
23
 
24
- Just type `fujimd` and give your FujiMarkdown file:
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-fuji_markdown-file.md
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/[USERNAME]/fuji_markdown/blob/master/CODE_OF_CONDUCT.md).
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: html or kakuyomu') do |fmt|
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: CommonMarker::HtmlRenderer.new(options: [:HARDBREAKS, :UNSAFE]),
35
+ renderer: CommonMarker::HtmlRenderer.new(options: [:HARDBREAKS, :UNSAFE]),
33
36
  }
34
37
  when :KAKUYOMU
35
38
  {
36
- preprocessors: [Preprocessors::Ruby.new, Proc.new { |text| text.gsub!(/《/, '|《') }],
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: Renderers::KakuyomuRenderer.new,
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 = false
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 = node.next
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 = "《#{kana_node.string_content}》" if kana_node.type == :text
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 = preprocessors
9
- @parser = parser
6
+ @preprocessors = preprocessors
7
+ @parser = parser
10
8
  @postprocessors = postprocessors
11
- @renderer = 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 < CommonMarker::HtmlRenderer
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
@@ -1,3 +1,3 @@
1
1
  module FujiMarkdown
2
- VERSION = '0.2.3'
2
+ VERSION = '0.3.0'
3
3
  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.2.3
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-08 00:00:00.000000000 Z
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: