fuji_markdown 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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: