hiki2md 0.1.1 → 0.1.2
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 +4 -0
- data/lib/hiki2md/version.rb +1 -1
- data/lib/hiki2md.rb +159 -17
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3144012b65184c7a5362f65f9f004d1c9bcbeff3
|
4
|
+
data.tar.gz: a4424168aab76259fe55e50e2dd3116d65a3b806
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3eafa88b9204d1284124bceb9aca242a5084df2d2c160e7c90eaecfb85bda7037b54193e9aef4d4012d1286deeb05eeafe58fada04db20d5ea3b3cbb0bd9aa5
|
7
|
+
data.tar.gz: a8639a667f70cfc182f997ea78e8084df40072736c8ade63834a305a4416fd40184a5e9efc8daa6571eb0e66224d4f8fc5d95ac2689fbba674d19037fc7bd49a
|
data/README.md
CHANGED
data/lib/hiki2md/version.rb
CHANGED
data/lib/hiki2md.rb
CHANGED
@@ -6,7 +6,11 @@ class Hiki2md
|
|
6
6
|
@outputs = []
|
7
7
|
|
8
8
|
@in_plugin_block = false
|
9
|
-
@
|
9
|
+
@in_preformatted_block = false
|
10
|
+
@in_multiline_preformatted_block = false
|
11
|
+
@in_table_block = false
|
12
|
+
@in_dl_block = false
|
13
|
+
@table_contents = []
|
10
14
|
|
11
15
|
lines.split(/\n/).each do |line|
|
12
16
|
# プラグイン
|
@@ -22,10 +26,23 @@ class Hiki2md
|
|
22
26
|
@in_plugin_block = true
|
23
27
|
end
|
24
28
|
|
25
|
-
#
|
26
|
-
if
|
29
|
+
# テーブル
|
30
|
+
if line =~ /\A\|\|/
|
31
|
+
@in_table_block = true
|
32
|
+
@table_contents << line
|
33
|
+
next
|
34
|
+
end
|
35
|
+
|
36
|
+
if @in_table_block
|
37
|
+
@outputs << make_table(@table_contents)
|
38
|
+
@in_table_block = false
|
39
|
+
@table_contents = []
|
40
|
+
end
|
41
|
+
|
42
|
+
# 整形済みテキスト(複数行)
|
43
|
+
if @in_multiline_preformatted_block
|
27
44
|
if line =~ /\A>>>/
|
28
|
-
@
|
45
|
+
@in_multiline_preformatted_block = false
|
29
46
|
@outputs << '```'
|
30
47
|
next
|
31
48
|
end
|
@@ -33,24 +50,45 @@ class Hiki2md
|
|
33
50
|
next
|
34
51
|
end
|
35
52
|
|
36
|
-
if line =~ /\A<<<\
|
37
|
-
@
|
38
|
-
@outputs <<
|
53
|
+
if line =~ /\A<<<\s*(.*)/
|
54
|
+
@in_multiline_preformatted_block = true
|
55
|
+
@outputs << "```#{$1}"
|
56
|
+
next
|
57
|
+
end
|
58
|
+
|
59
|
+
# 整形済みテキスト
|
60
|
+
if @in_preformatted_block
|
61
|
+
if line =~ /\A[ \t]+/
|
62
|
+
@outputs << line.strip
|
63
|
+
next
|
64
|
+
else
|
65
|
+
@outputs << "```"
|
66
|
+
@in_preformatted_block = false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
if line =~ /\A[ \t]+/
|
71
|
+
@in_preformatted_block = true
|
72
|
+
@outputs << "```\n#{line.strip}"
|
39
73
|
next
|
40
74
|
end
|
41
75
|
|
42
76
|
# コメント削除
|
43
77
|
next if line =~ %r|\A//.*\z|
|
44
78
|
|
45
|
-
# 整形済みテキスト
|
46
|
-
line.gsub! /\A[ \t]+/, ' '
|
47
|
-
|
48
79
|
# 引用
|
49
80
|
line.gsub! /\A""/, '>'
|
50
81
|
|
51
82
|
# リンク
|
52
83
|
line.gsub! /\[{2}([^\[\]\|]+?)\|([^\[\]\|]+?)\]{2}/, "[\\1](\\2)"
|
53
84
|
|
85
|
+
# 強調
|
86
|
+
line.gsub! /'''(.+)'''/, "**\\1**"
|
87
|
+
line.gsub! /''(.+)''/, "*\\1*"
|
88
|
+
|
89
|
+
# 取り消し
|
90
|
+
line.gsub! /\=\=(.+)\=\=/, "~~\\1~~"
|
91
|
+
|
54
92
|
# 箇条書き
|
55
93
|
line.gsub! /\A[*]{3} ?/, ' - '
|
56
94
|
line.gsub! /\A[*]{2} ?/, ' - '
|
@@ -60,6 +98,23 @@ class Hiki2md
|
|
60
98
|
line.gsub! /\A[#]{2} ?/ , ' 1. '
|
61
99
|
line.gsub! /\A[#] ?/ , '1. '
|
62
100
|
|
101
|
+
# 定義リスト
|
102
|
+
if line =~ /\A\:(.+)\:(.+)/
|
103
|
+
unless @in_dl_block
|
104
|
+
@outputs << "<dl>"
|
105
|
+
end
|
106
|
+
@outputs << "<dt>#{$1}</dt><dd>#{$2}</dd>"
|
107
|
+
@in_dl_block = true
|
108
|
+
next
|
109
|
+
end
|
110
|
+
|
111
|
+
if @in_dl_block
|
112
|
+
if line !=~ /\A\:.+\:.+/
|
113
|
+
@outputs << "</dl>"
|
114
|
+
@in_dl_block = false
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
63
118
|
# 見出し
|
64
119
|
line.gsub! /\A!{5} ?/ , '##### '
|
65
120
|
line.gsub! /\A!{4} ?/ , '#### '
|
@@ -67,18 +122,105 @@ class Hiki2md
|
|
67
122
|
line.gsub! /\A!{2} ?/ , '## '
|
68
123
|
line.gsub! /\A! ?/ , '# '
|
69
124
|
|
70
|
-
# 強調
|
71
|
-
line.gsub! /'''(.+)'''/, "**\\1**"
|
72
|
-
line.gsub! /''(.+)''/, "*\\1*"
|
73
|
-
|
74
|
-
# 取り消し
|
75
|
-
line.gsub! /\=\=(.+)\=\=/, "~~\\1~~"
|
76
|
-
|
77
125
|
# 画像
|
78
126
|
line.gsub! /\[{2}([^\[\]\|]+?)\]{2}/, ""
|
79
127
|
|
80
128
|
@outputs << line
|
81
129
|
end
|
130
|
+
|
131
|
+
# ensure
|
132
|
+
if @in_table_block
|
133
|
+
@outputs << make_table(@table_contents)
|
134
|
+
@in_table_block = false
|
135
|
+
@table_contents = []
|
136
|
+
end
|
137
|
+
|
138
|
+
# ensure
|
139
|
+
if @in_preformatted_block
|
140
|
+
@outputs << "```"
|
141
|
+
end
|
142
|
+
|
143
|
+
# ensure
|
144
|
+
if @in_dl_block
|
145
|
+
@outputs << "</dl>"
|
146
|
+
@in_dl_block = false
|
147
|
+
end
|
148
|
+
|
149
|
+
|
82
150
|
@outputs.join("\n")
|
83
151
|
end
|
152
|
+
|
153
|
+
# tableから連結作用素に対応したmatrixを作る
|
154
|
+
# input:lineごとに分割されたcontents
|
155
|
+
# output:matrixと最長列数
|
156
|
+
def make_matrix(contents)
|
157
|
+
t_matrix = []
|
158
|
+
contents.each do |line|
|
159
|
+
row = line.split('||')
|
160
|
+
row.shift
|
161
|
+
t_matrix << row
|
162
|
+
end
|
163
|
+
|
164
|
+
# vertical joint row
|
165
|
+
t_matrix.each_with_index do |line, i|
|
166
|
+
line.each_with_index do |e, j|
|
167
|
+
if e =~ /\^+/
|
168
|
+
t_matrix[i][j] = Regexp.last_match.post_match
|
169
|
+
Regexp.last_match.size.times do |k|
|
170
|
+
t_matrix[i + k + 1] ||= []
|
171
|
+
t_matrix[i + k + 1].insert(j, " ")
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# horizontal joint column
|
178
|
+
max_col = 0
|
179
|
+
t_matrix.each_with_index do |line, i|
|
180
|
+
n_col = line.size
|
181
|
+
j_col = 0
|
182
|
+
line.each do |e|
|
183
|
+
if e =~ />+/
|
184
|
+
t_matrix[i][j_col] = Regexp.last_match.post_match
|
185
|
+
cs = Regexp.last_match.size
|
186
|
+
cs.times do
|
187
|
+
j_col += 1
|
188
|
+
t_matrix[i][j_col] = ""
|
189
|
+
end
|
190
|
+
n_col += cs
|
191
|
+
else
|
192
|
+
t_matrix[i][j_col] = e
|
193
|
+
j_col += 1
|
194
|
+
end
|
195
|
+
end
|
196
|
+
max_col = n_col if n_col > max_col
|
197
|
+
end
|
198
|
+
|
199
|
+
[t_matrix, max_col]
|
200
|
+
end
|
201
|
+
|
202
|
+
# tableを整形する
|
203
|
+
def make_table(table_contents)
|
204
|
+
contents, max_col = make_matrix(table_contents)
|
205
|
+
|
206
|
+
align_line = "|"
|
207
|
+
max_col.times { align_line << ':----|' }
|
208
|
+
align_line << "\n"
|
209
|
+
|
210
|
+
table = "\n"
|
211
|
+
contents.each_with_index do |line, idx|
|
212
|
+
row = "|"
|
213
|
+
line.each do |e|
|
214
|
+
row << "#{e}|"
|
215
|
+
end
|
216
|
+
table << row + "\n"
|
217
|
+
|
218
|
+
# insert table alignment after 1st line
|
219
|
+
if idx == 0
|
220
|
+
table << align_line
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
table
|
225
|
+
end
|
84
226
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hiki2md
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masanori Kado
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|