nishisuke_blog_syntax 0.1.0 → 0.1.8
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/.ruby-version +1 -0
- data/lib/nishisuke_blog_syntax/formatter/code_formatter.rb +45 -0
- data/lib/nishisuke_blog_syntax/formatter/head_three_formatter.rb +21 -0
- data/lib/nishisuke_blog_syntax/formatter/list_formatter.rb +21 -0
- data/lib/nishisuke_blog_syntax/formatter/paragraph_formatter.rb +22 -0
- data/lib/nishisuke_blog_syntax/formatter/shell_formatter.rb +51 -0
- data/lib/nishisuke_blog_syntax/formatter/sub_headline_formatter.rb +21 -0
- data/lib/nishisuke_blog_syntax/formatter.rb +19 -0
- data/lib/nishisuke_blog_syntax/raw_text.rb +38 -0
- data/lib/nishisuke_blog_syntax/version.rb +1 -1
- data/lib/nishisuke_blog_syntax.rb +8 -2
- data/nishisuke_blog_syntax.gemspec +1 -1
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3276579e5d936933ed684fa6910535298f972df0b1a0d91469bb0facef9ba6e8
|
4
|
+
data.tar.gz: 896d09a79820022427ac924d520e0906f50113358dd1cceeb5f2b7e12b09321f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2628a7287dc8fc772892b27616e897ea81e89f24c849e7d58a0e2ae677bccbe54dac5eabe862f11c862e84afde239b65e0c067326cf1d3582816404012245771
|
7
|
+
data.tar.gz: 06dd0e38619c46f314f3f9dc729f67f601fe3c374ca1b36f5de4a838c5153a29e72a373e0bacb56cce2c47beb098b381ac1a3db1dbeaadaa00a5e9d5f6546fd9
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.5.0
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'nishisuke_blog_syntax/formatter'
|
2
|
+
require 'erb'
|
3
|
+
include ERB::Util
|
4
|
+
|
5
|
+
module NishisukeBlogSyntax
|
6
|
+
module Formatter
|
7
|
+
class CodeFormatter < FormatterBase
|
8
|
+
SUBSTITUTE_REGEXP = /^SRC```(.*?)SRC```$/m
|
9
|
+
PARSE_REGEXP = /^SRC```(.*)SRC```$/m
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def regexp
|
14
|
+
SUBSTITUTE_REGEXP
|
15
|
+
end
|
16
|
+
|
17
|
+
def substitute(matched)
|
18
|
+
content_str = matched.match(PARSE_REGEXP)[1]
|
19
|
+
contents = content_str.split("\n")
|
20
|
+
file_name = contents.shift
|
21
|
+
contents.map! { |l| wrapped_line(l) }
|
22
|
+
wrapped_content(contents.join('<br>'), file_name)
|
23
|
+
end
|
24
|
+
|
25
|
+
def wrapped_line(txt)
|
26
|
+
%Q(<span class="shell__code-line">#{h(txt)}</span>)
|
27
|
+
end
|
28
|
+
|
29
|
+
def wrapped_content(content, file_name)
|
30
|
+
has_file_name = !file_name.gsub(/\s/, '').empty?
|
31
|
+
|
32
|
+
html = <<~HTML.gsub("\n", '')
|
33
|
+
<div class="shell mdc-elevation--z2">
|
34
|
+
#{%Q(<span class="shell__file">#{file_name}</span>) if has_file_name}
|
35
|
+
<pre class="shell__container">
|
36
|
+
<code class="shell__code">
|
37
|
+
#{content}
|
38
|
+
</code>
|
39
|
+
</pre>
|
40
|
+
</div>
|
41
|
+
HTML
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'nishisuke_blog_syntax/formatter'
|
2
|
+
|
3
|
+
module NishisukeBlogSyntax
|
4
|
+
module Formatter
|
5
|
+
class HeadThreeFormatter < FormatterBase
|
6
|
+
SUBSTITUTE_REGEXP = /^### .*$/
|
7
|
+
PARSE_REGEXP = /^### (.*)$/
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def regexp
|
12
|
+
SUBSTITUTE_REGEXP
|
13
|
+
end
|
14
|
+
|
15
|
+
def substitute(matched)
|
16
|
+
content_str = matched.match(PARSE_REGEXP)[1]
|
17
|
+
"<h3>#{content_str}</h3>"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'nishisuke_blog_syntax/formatter'
|
2
|
+
|
3
|
+
module NishisukeBlogSyntax
|
4
|
+
module Formatter
|
5
|
+
class ListFormatter < FormatterBase
|
6
|
+
SUBSTITUTE_REGEXP = /^- .*$/
|
7
|
+
PARSE_REGEXP = /^- (.*)$/
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def regexp
|
12
|
+
SUBSTITUTE_REGEXP
|
13
|
+
end
|
14
|
+
|
15
|
+
def substitute(matched)
|
16
|
+
content_str = matched.match(PARSE_REGEXP)[1]
|
17
|
+
"<li>#{content_str}</li>"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'nishisuke_blog_syntax/formatter'
|
2
|
+
|
3
|
+
module NishisukeBlogSyntax
|
4
|
+
module Formatter
|
5
|
+
class ParagraphFormatter < FormatterBase
|
6
|
+
SUBSTITUTE_REGEXP = /^>>>(.*?)<<<$/m
|
7
|
+
PARSE_REGEXP = /^>>>(.*)<<<$/m
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def regexp
|
12
|
+
SUBSTITUTE_REGEXP
|
13
|
+
end
|
14
|
+
|
15
|
+
def substitute(matched)
|
16
|
+
content_str = matched.match(PARSE_REGEXP)[1]
|
17
|
+
content_str.gsub!(/\R|\s+/, ' ')
|
18
|
+
"<p>#{content_str.chop}</p>"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'nishisuke_blog_syntax/formatter'
|
2
|
+
require 'erb'
|
3
|
+
include ERB::Util
|
4
|
+
|
5
|
+
module NishisukeBlogSyntax
|
6
|
+
module Formatter
|
7
|
+
class ShellFormatter < FormatterBase
|
8
|
+
SUBSTITUTE_REGEXP = /^SHELL```(.*?)SHELL```$/m
|
9
|
+
PARSE_REGEXP = /^SHELL```(.*)SHELL```$/m
|
10
|
+
INPUT_REGEXP = /\Ain: /
|
11
|
+
OUTPUT_REGEXP = /\Aout: /
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def regexp
|
16
|
+
SUBSTITUTE_REGEXP
|
17
|
+
end
|
18
|
+
|
19
|
+
def substitute(matched)
|
20
|
+
content_str = matched.match(PARSE_REGEXP)[1]
|
21
|
+
contents = content_str.split("\n")
|
22
|
+
contents.shift # drop first line, this is SRC```xxxxx <-
|
23
|
+
contents.map! { |l| wrapped_line(l) }
|
24
|
+
wrapped_content(contents.join('<br>'))
|
25
|
+
end
|
26
|
+
|
27
|
+
def wrapped_line(txt)
|
28
|
+
if m = txt.match(INPUT_REGEXP)
|
29
|
+
%Q(<kbd class="shell__input">#{h(m.post_match)}</kbd>)
|
30
|
+
elsif m = txt.match(OUTPUT_REGEXP)
|
31
|
+
%Q(<samp class="shell__output">#{h(m.post_match)}</samp>)
|
32
|
+
else
|
33
|
+
'' # this means <br><br> finaly.
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def wrapped_content(content)
|
38
|
+
html = <<~HTML
|
39
|
+
<div class="shell mdc-elevation--z2">
|
40
|
+
<pre class="shell__container">
|
41
|
+
<span class="shell__std">
|
42
|
+
#{content}
|
43
|
+
</span>
|
44
|
+
</pre>
|
45
|
+
</div>
|
46
|
+
HTML
|
47
|
+
html.gsub("\n", '')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'nishisuke_blog_syntax/formatter'
|
2
|
+
|
3
|
+
module NishisukeBlogSyntax
|
4
|
+
module Formatter
|
5
|
+
class SubHeadlineFormatter < FormatterBase
|
6
|
+
SUBSTITUTE_REGEXP = /^## .*$/
|
7
|
+
PARSE_REGEXP = /^## (.*)$/
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def regexp
|
12
|
+
SUBSTITUTE_REGEXP
|
13
|
+
end
|
14
|
+
|
15
|
+
def substitute(matched)
|
16
|
+
content_str = matched.match(PARSE_REGEXP)[1]
|
17
|
+
"<h2>#{content_str}</h2>"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module NishisukeBlogSyntax
|
2
|
+
module Formatter
|
3
|
+
class FormatterBase
|
4
|
+
def format(txt)
|
5
|
+
txt.gsub(regexp) { |matched| substitute(matched) }
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def regexp
|
11
|
+
raise NotImplementedError
|
12
|
+
end
|
13
|
+
|
14
|
+
def substitute
|
15
|
+
raise NotImplementedError
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'nishisuke_blog_syntax/formatter/code_formatter'
|
2
|
+
require 'nishisuke_blog_syntax/formatter/shell_formatter'
|
3
|
+
require 'nishisuke_blog_syntax/formatter/paragraph_formatter'
|
4
|
+
require 'nishisuke_blog_syntax/formatter/sub_headline_formatter'
|
5
|
+
require 'nishisuke_blog_syntax/formatter/head_three_formatter'
|
6
|
+
require 'nishisuke_blog_syntax/formatter/list_formatter'
|
7
|
+
|
8
|
+
module NishisukeBlogSyntax
|
9
|
+
class RawText
|
10
|
+
def initialize(text)
|
11
|
+
@text = text.gsub(/\R/, "\n")
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_html
|
15
|
+
self.class.html_formatters.inject(text) do |html, f|
|
16
|
+
f.format(html)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.html_formatters
|
23
|
+
# order is important!
|
24
|
+
# Each formatter should be commutative.
|
25
|
+
# But be careful order for the future.
|
26
|
+
@@formatters ||= [
|
27
|
+
Formatter::ShellFormatter.new,
|
28
|
+
Formatter::CodeFormatter.new,
|
29
|
+
Formatter::ParagraphFormatter.new,
|
30
|
+
Formatter::SubHeadlineFormatter.new,
|
31
|
+
Formatter::HeadThreeFormatter.new,
|
32
|
+
Formatter::ListFormatter.new,
|
33
|
+
]
|
34
|
+
end
|
35
|
+
|
36
|
+
attr_reader :text
|
37
|
+
end
|
38
|
+
end
|
@@ -1,5 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require 'nishisuke_blog_syntax/version'
|
2
|
+
require 'nishisuke_blog_syntax/raw_text'
|
2
3
|
|
3
4
|
module NishisukeBlogSyntax
|
4
|
-
|
5
|
+
class << self
|
6
|
+
def convert_html(txt)
|
7
|
+
raw = RawText.new(txt)
|
8
|
+
raw.to_html
|
9
|
+
end
|
10
|
+
end
|
5
11
|
end
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require "nishisuke_blog_syntax/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'nishisuke_blog_syntax'
|
8
8
|
spec.version = NishisukeBlogSyntax::VERSION
|
9
9
|
spec.authors = ["nishisuke"]
|
10
10
|
spec.email = ["nishisuke13+git@gmail.com"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nishisuke_blog_syntax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nishisuke
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -60,6 +60,7 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- ".gitignore"
|
63
|
+
- ".ruby-version"
|
63
64
|
- ".travis.yml"
|
64
65
|
- Gemfile
|
65
66
|
- LICENSE.txt
|
@@ -68,6 +69,14 @@ files:
|
|
68
69
|
- bin/console
|
69
70
|
- bin/setup
|
70
71
|
- lib/nishisuke_blog_syntax.rb
|
72
|
+
- lib/nishisuke_blog_syntax/formatter.rb
|
73
|
+
- lib/nishisuke_blog_syntax/formatter/code_formatter.rb
|
74
|
+
- lib/nishisuke_blog_syntax/formatter/head_three_formatter.rb
|
75
|
+
- lib/nishisuke_blog_syntax/formatter/list_formatter.rb
|
76
|
+
- lib/nishisuke_blog_syntax/formatter/paragraph_formatter.rb
|
77
|
+
- lib/nishisuke_blog_syntax/formatter/shell_formatter.rb
|
78
|
+
- lib/nishisuke_blog_syntax/formatter/sub_headline_formatter.rb
|
79
|
+
- lib/nishisuke_blog_syntax/raw_text.rb
|
71
80
|
- lib/nishisuke_blog_syntax/version.rb
|
72
81
|
- nishisuke_blog_syntax.gemspec
|
73
82
|
homepage: https://github.com/nishisuke/blog-syntax
|