togglate 0.1.5 → 0.1.6
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/lib/togglate/block_wrapper.rb +35 -15
- data/lib/togglate/cli.rb +1 -1
- data/lib/togglate/version.rb +1 -1
- data/spec/spec_helper.rb +6 -4
- data/spec/togglate_block_wrapper_spec.rb +143 -100
- data/spec/togglate_cli_spec.rb +2 -2
- 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: 57da012eeca551cd3f241a7da1ce2b9c6876f183
|
4
|
+
data.tar.gz: 767fd04b88c9d744b131f177da7492c969f86173
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b1d2f7f6e7eac949163256db714b2352190d4b484f17da6269f5d2d14289fc6b8a3f6fbd7c4e025be06ce1b07fdb9b7597512e5ad8993346949af33bd979484
|
7
|
+
data.tar.gz: 0745a5419ff582ed151f354814209eb90e3ca9c87ee07441d632ae25f213d529e9f0b1de9a05009b326081f55c7682a8e8f11bcded872cee75bebdbdf936dc65
|
@@ -16,8 +16,7 @@ class Togglate::BlockWrapper
|
|
16
16
|
@indent_re = /^\s{4,}\S/
|
17
17
|
@block_tags = {
|
18
18
|
fenced: /^```/,
|
19
|
-
liquid: /^{
|
20
|
-
html: /^<(?!img|br|hr|!--).+>\s*$/
|
19
|
+
liquid: /^{%/
|
21
20
|
}
|
22
21
|
@wrap_exceptions = wrap_exceptions.map { |key| @block_tags[key] }
|
23
22
|
end
|
@@ -28,25 +27,46 @@ class Togglate::BlockWrapper
|
|
28
27
|
|
29
28
|
private
|
30
29
|
def build_chunks
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
if
|
40
|
-
|
30
|
+
pre_wrap_for(:html) do |text|
|
31
|
+
in_block = false
|
32
|
+
in_indent = false
|
33
|
+
chunks = text.each_line.chunk do |line|
|
34
|
+
in_block = in_block?(line, in_block)
|
35
|
+
prev_indent = in_indent
|
36
|
+
in_indent = in_indented_block?(line, in_indent, in_block)
|
37
|
+
|
38
|
+
if true_to_false?(prev_indent, in_indent)
|
39
|
+
if blank_line?(line)
|
40
|
+
true
|
41
|
+
else
|
42
|
+
:_alone # line just after 4 indent block marked :_alone
|
43
|
+
end
|
41
44
|
else
|
42
|
-
|
45
|
+
blank_line?(line) && !in_block && !in_indent
|
43
46
|
end
|
44
|
-
else
|
45
|
-
blank_line?(line) && !in_block && !in_indent
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
51
|
+
def pre_wrap_for(*targets, tag:"```__TEMP-WRAPPER-TAG__\n")
|
52
|
+
# Wrap targets blocks with a pair of fenced blocks once before
|
53
|
+
# chunking text, then remove the pair after the chunking.
|
54
|
+
#
|
55
|
+
# NOTE: I have tried to include 'four indented blocks' here,
|
56
|
+
# but abandoned. Because it was complicated to handle
|
57
|
+
# indented lines inside of html tag blocks.
|
58
|
+
target_re = { html: /^<(\w+)\s*.*?>\n.*?^<\/\1>\n/m }
|
59
|
+
text =
|
60
|
+
targets.inject(@text) do |txt, target|
|
61
|
+
txt.gsub(target_re[target]) { "#{tag}#{$&}#{tag}" }
|
62
|
+
end
|
63
|
+
chunks = yield(text)
|
64
|
+
chunks.map do |k, lines|
|
65
|
+
lines = lines[1..-2] if lines.first.match(/#{tag}/)
|
66
|
+
[k, lines]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
50
70
|
def blank_line?(line)
|
51
71
|
!line.match(@blank_line_re).nil?
|
52
72
|
end
|
data/lib/togglate/cli.rb
CHANGED
@@ -12,7 +12,7 @@ module Togglate
|
|
12
12
|
def create(file)
|
13
13
|
text = File.read(file)
|
14
14
|
opts = symbolize_keys(options)
|
15
|
-
blocks = %i(fenced liquid
|
15
|
+
blocks = %i(fenced liquid)
|
16
16
|
opts.update(wrap_exceptions:blocks) if opts[:code_block]
|
17
17
|
opts.update(translate:nil) if opts[:translate].empty?
|
18
18
|
puts Togglate.create(text, opts)
|
data/lib/togglate/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -3,10 +3,12 @@ require 'togglate'
|
|
3
3
|
require "stringio"
|
4
4
|
require "fakeweb"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
module StringExt
|
7
|
+
refine String do
|
8
|
+
def ~
|
9
|
+
margin = scan(/^ +/).map(&:size).min
|
10
|
+
gsub(/^ {#{margin}}/, '')
|
11
|
+
end
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
using StringExt
|
2
3
|
|
3
4
|
describe Togglate::BlockWrapper do
|
4
5
|
before do
|
@@ -16,18 +17,17 @@ describe Togglate::BlockWrapper do
|
|
16
17
|
|
17
18
|
context "with liquid tags" do
|
18
19
|
it "wraps liquid tag blocks as target blocks" do
|
19
|
-
text
|
20
|
-
#title
|
20
|
+
text = ~<<-EOS
|
21
|
+
#title
|
21
22
|
|
22
|
-
text
|
23
|
+
text
|
23
24
|
|
24
|
-
{% highlight bash %}
|
25
|
-
bash code
|
26
|
-
|
27
|
-
here
|
28
|
-
{% endhighlight %}
|
29
|
-
EOS
|
25
|
+
{% highlight bash %}
|
26
|
+
bash code
|
30
27
|
|
28
|
+
here
|
29
|
+
{% endhighlight %}
|
30
|
+
EOS
|
31
31
|
wrapper = Togglate::BlockWrapper.new(text)
|
32
32
|
exp = [[false, ["#title\n"]],
|
33
33
|
[true, ["\n"]],
|
@@ -44,17 +44,17 @@ EOS
|
|
44
44
|
|
45
45
|
context "with fenced code blocks" do
|
46
46
|
it "wraps fenced code blocks as target blocks" do
|
47
|
-
text =
|
48
|
-
# title
|
47
|
+
text = ~<<-EOS
|
48
|
+
# title
|
49
49
|
|
50
|
-
text
|
50
|
+
text
|
51
51
|
|
52
|
-
``` ruby
|
53
|
-
puts 'Hello'
|
52
|
+
``` ruby
|
53
|
+
puts 'Hello'
|
54
54
|
|
55
|
-
p :World
|
56
|
-
```
|
57
|
-
EOS
|
55
|
+
p :World
|
56
|
+
```
|
57
|
+
EOS
|
58
58
|
wrapper = Togglate::BlockWrapper.new(text)
|
59
59
|
exp = [
|
60
60
|
[false, ["# title\n"]],
|
@@ -69,18 +69,17 @@ EOS
|
|
69
69
|
|
70
70
|
context "with 4 indented code blocks" do
|
71
71
|
it "wraps them as target blocks" do
|
72
|
-
text
|
73
|
-
#title
|
74
|
-
|
75
|
-
tell application 'Foo'
|
72
|
+
text = ~<<-EOS
|
73
|
+
#title
|
76
74
|
|
77
|
-
|
75
|
+
tell application 'Foo'
|
78
76
|
|
79
|
-
|
77
|
+
beep
|
80
78
|
|
81
|
-
|
82
|
-
EOS
|
79
|
+
end tell
|
83
80
|
|
81
|
+
line
|
82
|
+
EOS
|
84
83
|
wrapper = Togglate::BlockWrapper.new(text)
|
85
84
|
exp = [[false, ["#title\n"]],
|
86
85
|
[true, ["\n"]],
|
@@ -97,16 +96,15 @@ EOS
|
|
97
96
|
|
98
97
|
context "with html tag blocks" do
|
99
98
|
it "wraps them as target blocks" do
|
100
|
-
text
|
101
|
-
#title
|
102
|
-
|
103
|
-
<table>
|
104
|
-
<tr><th>Header</th></tr>
|
99
|
+
text = ~<<-EOS
|
100
|
+
#title
|
105
101
|
|
106
|
-
|
107
|
-
</
|
108
|
-
EOS
|
102
|
+
<table>
|
103
|
+
<tr><th>Header</th></tr>
|
109
104
|
|
105
|
+
<tr><td>Data</td></tr>
|
106
|
+
</table>
|
107
|
+
EOS
|
110
108
|
wrapper = Togglate::BlockWrapper.new(text)
|
111
109
|
exp = [[false, ["#title\n"]],
|
112
110
|
[true, ["\n"]],
|
@@ -118,19 +116,64 @@ EOS
|
|
118
116
|
expect(wrapper.send(:build_chunks).to_a).to eq exp
|
119
117
|
end
|
120
118
|
|
121
|
-
it "wraps
|
122
|
-
text
|
123
|
-
#title
|
119
|
+
it "wraps irregularly indented tags" do
|
120
|
+
text = ~<<-EOS
|
121
|
+
#title
|
122
|
+
|
123
|
+
<table>
|
124
|
+
<tr><th>Header</th></tr>
|
125
|
+
|
126
|
+
<tr><td>Data</td></tr>
|
127
|
+
</table>
|
128
|
+
|
129
|
+
sentence
|
130
|
+
EOS
|
131
|
+
wrapper = Togglate::BlockWrapper.new(text)
|
132
|
+
exp = [[false, ["#title\n"]],
|
133
|
+
[true, ["\n"]],
|
134
|
+
[false, ["<table>\n",
|
135
|
+
"<tr><th>Header</th></tr>\n",
|
136
|
+
"\n",
|
137
|
+
"<tr><td>Data</td></tr>\n",
|
138
|
+
"</table>\n"]],
|
139
|
+
[true, ["\n"]],
|
140
|
+
[false, ["sentence\n"]]]
|
141
|
+
expect(wrapper.send(:build_chunks).to_a).to eq exp
|
142
|
+
end
|
143
|
+
|
144
|
+
it "wraps html block which includes 4 or more indented parts" do
|
145
|
+
text = ~<<-EOS
|
146
|
+
<table>
|
147
|
+
<tr>
|
148
|
+
<th>
|
149
|
+
Header
|
150
|
+
</th>
|
151
|
+
</tr>
|
152
|
+
</table>
|
153
|
+
EOS
|
154
|
+
wrapper = Togglate::BlockWrapper.new(text)
|
155
|
+
exp = [[false, ["<table>\n",
|
156
|
+
" <tr>\n",
|
157
|
+
" <th>\n",
|
158
|
+
" Header\n",
|
159
|
+
" </th>\n",
|
160
|
+
" </tr>\n",
|
161
|
+
"</table>\n"]]]
|
162
|
+
expect(wrapper.send(:build_chunks).to_a).to eq exp
|
163
|
+
end
|
124
164
|
|
125
|
-
|
165
|
+
it "wraps self-closing tags as target blocks" do
|
166
|
+
text = ~<<-EOS
|
167
|
+
#title
|
126
168
|
|
127
|
-
|
169
|
+
<!-- comment -->
|
128
170
|
|
129
|
-
<
|
171
|
+
<br />
|
130
172
|
|
131
|
-
<
|
132
|
-
EOS
|
173
|
+
<img src="img.png" />
|
133
174
|
|
175
|
+
<hr />
|
176
|
+
EOS
|
134
177
|
wrapper = Togglate::BlockWrapper.new(text)
|
135
178
|
exp = [[false, ["#title\n"]],
|
136
179
|
[true, ["\n"]],
|
@@ -148,29 +191,29 @@ EOS
|
|
148
191
|
|
149
192
|
describe "#wrap_chunks" do
|
150
193
|
before do
|
151
|
-
@text
|
152
|
-
#title
|
194
|
+
@text = ~<<-EOS
|
195
|
+
#title
|
153
196
|
|
154
|
-
text
|
155
|
-
EOS
|
197
|
+
text
|
198
|
+
EOS
|
156
199
|
end
|
157
200
|
|
158
201
|
it "returns wrapped text" do
|
159
202
|
wrapper = Togglate::BlockWrapper.new(@text)
|
160
203
|
chunks = wrapper.send(:build_chunks)
|
161
|
-
exp
|
162
|
-
[translation here]
|
204
|
+
exp = ~<<-EOS
|
205
|
+
[translation here]
|
163
206
|
|
164
|
-
<!--original
|
165
|
-
#title
|
166
|
-
-->
|
207
|
+
<!--original
|
208
|
+
#title
|
209
|
+
-->
|
167
210
|
|
168
|
-
[translation here]
|
211
|
+
[translation here]
|
169
212
|
|
170
|
-
<!--original
|
171
|
-
text
|
172
|
-
-->
|
173
|
-
EOS
|
213
|
+
<!--original
|
214
|
+
text
|
215
|
+
-->
|
216
|
+
EOS
|
174
217
|
expect(wrapper.send(:wrap_chunks, chunks)).to eq exp
|
175
218
|
end
|
176
219
|
|
@@ -185,78 +228,78 @@ EOS
|
|
185
228
|
|
186
229
|
context "text has 4 indented code blocks" do
|
187
230
|
it "wraps sentences after the code blocks correctly" do
|
188
|
-
text
|
189
|
-
#title
|
231
|
+
text = ~<<-EOS
|
232
|
+
#title
|
190
233
|
|
191
|
-
|
234
|
+
% echo hello
|
192
235
|
|
193
|
-
line
|
194
|
-
line2
|
195
|
-
EOS
|
236
|
+
line
|
237
|
+
line2
|
238
|
+
EOS
|
196
239
|
wrapper = Togglate::BlockWrapper.new(text)
|
197
240
|
chunks = wrapper.send(:build_chunks)
|
198
|
-
exp
|
199
|
-
[translation here]
|
241
|
+
exp = ~<<-EOS
|
242
|
+
[translation here]
|
200
243
|
|
201
|
-
<!--original
|
202
|
-
#title
|
203
|
-
-->
|
244
|
+
<!--original
|
245
|
+
#title
|
246
|
+
-->
|
204
247
|
|
205
|
-
[translation here]
|
248
|
+
[translation here]
|
206
249
|
|
207
|
-
<!--original
|
208
|
-
|
250
|
+
<!--original
|
251
|
+
% echo hello
|
209
252
|
|
210
|
-
-->
|
253
|
+
-->
|
211
254
|
|
212
|
-
[translation here]
|
255
|
+
[translation here]
|
213
256
|
|
214
|
-
<!--original
|
215
|
-
line
|
216
|
-
line2
|
217
|
-
-->
|
218
|
-
EOS
|
257
|
+
<!--original
|
258
|
+
line
|
259
|
+
line2
|
260
|
+
-->
|
261
|
+
EOS
|
219
262
|
expect(wrapper.send(:wrap_chunks, chunks)).to eq exp
|
220
263
|
end
|
221
264
|
|
222
265
|
it "wraps sentences after the code blocks correctly 2" do
|
223
|
-
text
|
224
|
-
#title
|
266
|
+
text = ~<<-EOS
|
267
|
+
#title
|
225
268
|
|
226
|
-
|
269
|
+
% echo hello
|
227
270
|
|
228
|
-
line
|
271
|
+
line
|
229
272
|
|
230
|
-
line2
|
231
|
-
EOS
|
273
|
+
line2
|
274
|
+
EOS
|
232
275
|
wrapper = Togglate::BlockWrapper.new(text)
|
233
276
|
chunks = wrapper.send(:build_chunks)
|
234
|
-
exp
|
235
|
-
[translation here]
|
277
|
+
exp = ~<<-EOS
|
278
|
+
[translation here]
|
236
279
|
|
237
|
-
<!--original
|
238
|
-
#title
|
239
|
-
-->
|
280
|
+
<!--original
|
281
|
+
#title
|
282
|
+
-->
|
240
283
|
|
241
|
-
[translation here]
|
284
|
+
[translation here]
|
242
285
|
|
243
|
-
<!--original
|
244
|
-
|
286
|
+
<!--original
|
287
|
+
% echo hello
|
245
288
|
|
246
|
-
-->
|
289
|
+
-->
|
247
290
|
|
248
|
-
[translation here]
|
291
|
+
[translation here]
|
249
292
|
|
250
|
-
<!--original
|
251
|
-
line
|
252
|
-
-->
|
293
|
+
<!--original
|
294
|
+
line
|
295
|
+
-->
|
253
296
|
|
254
|
-
[translation here]
|
297
|
+
[translation here]
|
255
298
|
|
256
|
-
<!--original
|
257
|
-
line2
|
258
|
-
-->
|
259
|
-
EOS
|
299
|
+
<!--original
|
300
|
+
line2
|
301
|
+
-->
|
302
|
+
EOS
|
260
303
|
expect(wrapper.send(:wrap_chunks, chunks)).to eq exp
|
261
304
|
end
|
262
305
|
end
|
data/spec/togglate_cli_spec.rb
CHANGED
@@ -36,9 +36,9 @@ describe Togglate::CLI do
|
|
36
36
|
expect($stdout.string).to match(/\n\n```ruby.*```\n\n/m)
|
37
37
|
end
|
38
38
|
|
39
|
-
it "
|
39
|
+
it "wraps html tags" do
|
40
40
|
Togglate::CLI.start(['create', 'README.md', '--code-block'])
|
41
|
-
expect($stdout.string).to match(
|
41
|
+
expect($stdout.string).to match(/<!--original.*<table>.*<\/table>\n-->/m)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: togglate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kyoendo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|