md_to_bbcode 1.1.2 → 2.0.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: 3879a85ee622be55cd4e43e0a882b2330478a552f0e5c239ade8fbf3bace621a
4
- data.tar.gz: 5e5b9dfe539a0e38f6a1a70ea1cde9a4980a0292d24927d40c4ab2d2116ee24b
3
+ metadata.gz: e80378d305456770e761ee303fc155f8a645d4532d70381892d88e05e41d4202
4
+ data.tar.gz: 53c6a99ebd4dedfcb73888c000c8ec78a92eec96f023379b3272af699889bf70
5
5
  SHA512:
6
- metadata.gz: f732c4557d7ddc4b3d3662290ceb531f36ef50a8c18c20d7bdcee81d2313d7f2dd1d8bb5e8df2bbd4f079a3016c5d43b5fa72165b9f259c7db207dfba16e7a87
7
- data.tar.gz: 4330680e4ab619d63b7c6b9698cf4ddee3d8e66f8466b60a8b559016b41447f7a58f69e77f917bad0e48bcc22f1221d28d1db0ee350b07449042670df9830174
6
+ metadata.gz: 348e73481b0f2e4f628c9ac5036748d0cdb0d04ada03749da007bf63dcb1df227516dfab72401a36bea5b0d12d1f58de1269ffe61d6090aabd5b6615f6e58e55
7
+ data.tar.gz: c56f09407124239d60cde3731e90030c3dd98672f0090f1b6dc08b21b2c220551a7501fb2734092bf4f6510949b5110b90f185bc9c0fbd2fcdddd5c7328cd734
data/lib/md_to_bbcode.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'redcarpet'
2
+ require 'md_to_bbcode/bbcode_renderer'
1
3
  require 'md_to_bbcode/core_extensions/string/md_to_bbcode'
2
4
 
3
5
  module MdToBbcode
@@ -9,100 +11,18 @@ module MdToBbcode
9
11
  # Result::
10
12
  # * String: BBCode converted string
11
13
  def self.md_to_bbcode(markdown)
12
- bbcode_lines = []
13
- in_a_list = false
14
- in_a_code_block = false
15
- in_bold_text = false
16
- in_italic_text = false
17
- markdown.split("\n").each do |line|
18
- unindented_line = in_a_list && line =~ /^ (.*)$/ ? $1 : line
19
- if unindented_line =~ /^```(.*)$/
20
- if in_a_code_block
21
- # We exit a code block
22
- bbcode_lines << "#{in_a_list ? ' ' : ''}[/code]\n"
23
- in_a_code_block = false
24
- else
25
- # We enter a code block
26
- bbcode_lines << "#{in_a_list ? ' ' : ''}[code]"
27
- in_a_code_block = true
28
- end
29
- elsif in_a_code_block
30
- # Don't change anything at the formatting
31
- bbcode_lines << "#{line}\n"
32
- else
33
- # Handle in-line code markers first
34
- line = line.split(/(`.+?`)/).map do |field|
35
- if field[0] == '`'
36
- # Don't change anything at the formatting
37
- "#{in_bold_text ? '' : '[b]'}[font=Courier New]#{field[1..-2]}[/font]#{in_bold_text ? '' : '[/b]'}"
38
- else
39
- # Apply the formatting except the formatting used for whole lines (headers, bullets, lists...)
40
- # Images (do this gsub before links and any single tags, like bold, headings...)
41
- field.gsub!(/!\[(.*?)\]\((.*?)\)/, '[img]\2[/img]')
42
- # Links
43
- field.gsub!(/\[(.*?)\]\((.*?)\)/, '[url=\2]\1[/url]')
44
- # Bold (do this before italic)
45
- if in_bold_text
46
- field.gsub!(/\*\*(.*?)\*\*/, '[/b]\1[b]')
47
- else
48
- field.gsub!(/\*\*(.*?)\*\*/, '[b]\1[/b]')
49
- end
50
- if field =~ /.*\*\*.*/
51
- if in_bold_text
52
- field.gsub!(/(.*)\*\*(.*)/, '\1[/b]\2')
53
- in_bold_text = false
54
- else
55
- field.gsub!(/(.*)\*\*(.*)/, '\1[b]\2')
56
- in_bold_text = true
57
- end
58
- end
59
- # Italic
60
- if in_italic_text
61
- field.gsub!(/\*(\S.*?)\*/, '[/i]\1[i]')
62
- else
63
- field.gsub!(/\*(\S.*?)\*/, '[i]\1[/i]')
64
- end
65
- if in_italic_text && field =~ /.*\S\*.*/
66
- field.gsub!(/(.*\S)\*(.*)/, '\1[/i]\2')
67
- in_italic_text = false
68
- elsif !in_italic_text && field =~ /.*\*\S.*/
69
- field.gsub!(/(.*)\*(\S.*)/, '\1[i]\2')
70
- in_italic_text = true
71
- end
72
- field
73
- end
74
- end.join
75
- # Heading 1
76
- line.gsub!(/^# (.*?)$/, '[size=6][b]\1[/b][/size]')
77
- # Heading 2
78
- line.gsub!(/^## (.*?)$/, '[size=6]\1[/size]')
79
- # Heading 3
80
- line.gsub!(/^### (.*?)$/, '[size=5][b]\1[/b][/size]')
81
- # Heading 4
82
- line.gsub!(/^#### (.*?)$/, '[size=5]\1[/size]')
83
- # Bullets
84
- if line =~ /^\* (.+)$/
85
- # Single bullet line
86
- bbcode_lines << "[list]\n" unless in_a_list
87
- bbcode_lines << "[*]#{$1}\n"
88
- in_a_list = true
89
- elsif line =~ /^\d\. (.+)$/
90
- # Single numbered line
91
- bbcode_lines << "[list=1]\n" unless in_a_list
92
- bbcode_lines << "[*]#{$1}\n"
93
- in_a_list = true
94
- else
95
- if in_a_list && !(line =~ /^ (.*)$/)
96
- bbcode_lines << "[/list]\n"
97
- in_a_list = false
98
- end
99
- bbcode_lines << "#{line}\n"
100
- end
101
- end
14
+ bbcode = Redcarpet::Markdown.new(
15
+ BbcodeRenderer,
16
+ fenced_code_blocks: true,
17
+ lax_spacing: false
18
+ ).render(markdown)
19
+ if markdown.end_with?("\n")
20
+ # Sometimes redcarpet removes new lines (after lists), so add them back if needed
21
+ bbcode.end_with?("\n") ? bbcode : "#{bbcode}\n"
22
+ else
23
+ # Sometimes redcarpet adds new lines (after bold markers), so strip them if needed
24
+ bbcode.end_with?("\n") ? bbcode.strip : bbcode
102
25
  end
103
- bbcode_lines << "[/list]\n" if in_a_list
104
- bbcode = bbcode_lines.join
105
- markdown.end_with?("\n") ? bbcode : bbcode[0..-2]
106
26
  end
107
27
 
108
28
  end
@@ -0,0 +1,127 @@
1
+ require 'redcarpet/render_strip'
2
+
3
+ module MdToBbcode
4
+
5
+ class BbcodeRenderer < Redcarpet::Render::StripDown
6
+
7
+ MARKER_BOLD = '--MdToBbcode--Bold--'
8
+ MARKER_ITALIC = '--MdToBbcode--Italic--'
9
+
10
+ def preprocess(doc)
11
+ # Due to Redcarpet bug https://github.com/vmg/redcarpet/issues/396 we have to handle bold and italic conversions before hand
12
+ # Be careful to mark them uniquely so that we don't convert them if they were in a code block
13
+ # TODO: Remove this when Redcarpet bug will be fixed
14
+ doc.
15
+ gsub('**', MARKER_BOLD).
16
+ gsub(/\*(\S|$)/, "#{MARKER_ITALIC}\\1").
17
+ gsub(/(\S)\*/, "\\1#{MARKER_ITALIC}")
18
+ end
19
+
20
+ def postprocess(doc)
21
+ # Convert bold and italic correctly due to bug https://github.com/vmg/redcarpet/issues/396
22
+ bbcode_lines = []
23
+ in_bold_text = false
24
+ in_italic_text = false
25
+ # Due to Redcarpet bug https://github.com/vmg/redcarpet/issues/600 we have to change some in-line code to blocks
26
+ # TODO: Remove when Redcarpet will be fixed
27
+ doc.split("\n").map do |line|
28
+ case line
29
+ when /^(\s*)\[b\]\[font=Courier New\]([^\[]*)$/
30
+ "#{$1}[code]"
31
+ when /^(\s*)\[\/font\]\[\/b\]$/
32
+ "#{$1}[/code]"
33
+ else
34
+ # Replace the bold markers with [b] or [/b], and
35
+ # make sure we remove occurences of bold text ([b] and [/b] already part of the text) when bold is already applied: this can happen as we use bold text for inline code
36
+ # TODO: Remove this when https://github.com/vmg/redcarpet/issues/396 will be corrected
37
+ fields = line.split(MARKER_BOLD) + (line.end_with?(MARKER_BOLD) ? [''] : [])
38
+ line = fields.map.with_index do |field, idx|
39
+ content = in_bold_text ? field.gsub('[b]', '').gsub('[/b]', '') : field
40
+ if idx == fields.size - 1
41
+ content
42
+ else
43
+ in_bold_text = !in_bold_text
44
+ "#{content}[#{in_bold_text ? '' : '/'}b]"
45
+ end
46
+ end.join
47
+ # Italic
48
+ if in_italic_text
49
+ line.gsub!(/#{Regexp.escape(MARKER_ITALIC)}(\S.*?)#{Regexp.escape(MARKER_ITALIC)}/, '[/i]\1[i]')
50
+ else
51
+ line.gsub!(/#{Regexp.escape(MARKER_ITALIC)}(\S.*?)#{Regexp.escape(MARKER_ITALIC)}/, '[i]\1[/i]')
52
+ end
53
+ if in_italic_text && line =~ /.*\S#{Regexp.escape(MARKER_ITALIC)}.*/
54
+ line.gsub!(/(.*\S)#{Regexp.escape(MARKER_ITALIC)}(.*)/, '\1[/i]\2')
55
+ in_italic_text = false
56
+ elsif !in_italic_text && line =~ /.*#{Regexp.escape(MARKER_ITALIC)}\S.*/
57
+ line.gsub!(/(.*)#{Regexp.escape(MARKER_ITALIC)}(\S.*)/, '\1[i]\2')
58
+ in_italic_text = true
59
+ end
60
+ line
61
+ end
62
+ end.join("\n").gsub('<br>', "\n")
63
+ end
64
+
65
+ def emphasis(text)
66
+ "[i]#{text}[/i]"
67
+ end
68
+
69
+ def double_emphasis(text)
70
+ # In case the text already contains bold tags (which can be the case as codespan uses them), remove them.
71
+ "[b]#{text.gsub('[b]', '').gsub('[/b]', '')}[/b]"
72
+ end
73
+
74
+ def link(link, title, content)
75
+ "[url=#{link}]#{content}[/url]"
76
+ end
77
+
78
+ def header(text, header_level)
79
+ case header_level
80
+ when 1
81
+ "\n[size=6][b]#{text}[/b][/size]\n\n"
82
+ when 2
83
+ "\n[size=6]#{text}[/size]\n\n"
84
+ when 3
85
+ "\n[size=5][b]#{text}[/b][/size]\n\n"
86
+ when 4
87
+ "\n[size=5]#{text}[/size]\n\n"
88
+ else
89
+ "\n[size=4][b]#{text}[/b][/size]\n\n"
90
+ end
91
+ end
92
+
93
+ def codespan(code)
94
+ "[b][font=Courier New]#{code.
95
+ gsub(MARKER_BOLD, '**').
96
+ gsub(MARKER_ITALIC, '*')
97
+ }[/font][/b]"
98
+ end
99
+
100
+ def image(link, title, alt_text)
101
+ "[img]#{link}[/img]"
102
+ end
103
+
104
+ def list(contents, list_type)
105
+ case list_type
106
+ when :ordered
107
+ "[list=1]\n#{contents}[/list]\n"
108
+ else
109
+ "[list]\n#{contents}[/list]\n"
110
+ end
111
+ end
112
+
113
+ def list_item(text, list_type)
114
+ # If the item spans multiple lines, prefix each new line with 2 spaces to keep the list running.
115
+ "[*]#{text.split(/(?<=\n)/).join(" ")}"
116
+ end
117
+
118
+ def block_code(code, language)
119
+ "[code]#{code.
120
+ gsub(MARKER_BOLD, '**').
121
+ gsub(MARKER_ITALIC, '*')
122
+ }[/code]\n"
123
+ end
124
+
125
+ end
126
+
127
+ end
@@ -1,5 +1,5 @@
1
1
  module MdToBbcode
2
2
 
3
- VERSION = '1.1.2'
3
+ VERSION = '2.0.0'
4
4
 
5
5
  end
data/spec/api_spec.rb CHANGED
@@ -1,19 +1,47 @@
1
1
  describe MdToBbcode do
2
2
 
3
+ it 'converts and keeps new lines' do
4
+ md = <<~EOS
5
+ Line 1
6
+
7
+ Line 2<br>
8
+ Line 3<br><br>
9
+ Line 4<br>
10
+
11
+
12
+ Line 5
13
+
14
+
15
+ Line 6
16
+ EOS
17
+ expect(md.md_to_bbcode).to eq(<<~EOS)
18
+ Line 1
19
+ Line 2
20
+
21
+ Line 3
22
+
23
+
24
+ Line 4
25
+
26
+ Line 5
27
+ Line 6
28
+ EOS
29
+ end
30
+
3
31
  it 'converts heading 1' do
4
- expect('# Heading 1'.md_to_bbcode).to eq '[size=6][b]Heading 1[/b][/size]'
32
+ expect('# Heading 1'.md_to_bbcode).to eq "\n[size=6][b]Heading 1[/b][/size]"
5
33
  end
6
34
 
7
35
  it 'converts heading 2' do
8
- expect('## Heading 2'.md_to_bbcode).to eq '[size=6]Heading 2[/size]'
36
+ expect('## Heading 2'.md_to_bbcode).to eq "\n[size=6]Heading 2[/size]"
9
37
  end
10
38
 
11
39
  it 'converts heading 3' do
12
- expect('### Heading 3'.md_to_bbcode).to eq '[size=5][b]Heading 3[/b][/size]'
40
+ expect('### Heading 3'.md_to_bbcode).to eq "\n[size=5][b]Heading 3[/b][/size]"
13
41
  end
14
42
 
15
43
  it 'converts heading 4' do
16
- expect('#### Heading 4'.md_to_bbcode).to eq '[size=5]Heading 4[/size]'
44
+ expect('#### Heading 4'.md_to_bbcode).to eq "\n[size=5]Heading 4[/size]"
17
45
  end
18
46
 
19
47
  it 'converts bold text' do
@@ -24,6 +52,10 @@ describe MdToBbcode do
24
52
  expect('*Italic text*'.md_to_bbcode).to eq '[i]Italic text[/i]'
25
53
  end
26
54
 
55
+ it 'converts italic text with underscore' do
56
+ expect('_Italic text_'.md_to_bbcode).to eq '[i]Italic text[/i]'
57
+ end
58
+
27
59
  it 'converts italic text after a list' do
28
60
  md = <<~EOS
29
61
  * List item
@@ -32,8 +64,8 @@ describe MdToBbcode do
32
64
  expect(md.md_to_bbcode).to eq(<<~EOS)
33
65
  [list]
34
66
  [*]List item
67
+ [i]Italic text[/i]
35
68
  [/list]
36
- [i]Italic text[/i]
37
69
  EOS
38
70
  end
39
71
 
@@ -53,6 +85,19 @@ describe MdToBbcode do
53
85
  expect('**Bold `in-line code` to display**'.md_to_bbcode).to eq '[b]Bold [font=Courier New]in-line code[/font] to display[/b]'
54
86
  end
55
87
 
88
+ it 'converts inline code in multi-line bold text' do
89
+ md = <<~EOS
90
+ `Before in-line` followed by **bold with `some in-line` and
91
+ containing a multi-line `in-line code`
92
+ to display along with `in-line code` again** and `after as-well`.
93
+ EOS
94
+ expect(md.md_to_bbcode).to eq(<<~EOS)
95
+ [b][font=Courier New]Before in-line[/font][/b] followed by [b]bold with [font=Courier New]some in-line[/font] and
96
+ containing a multi-line [font=Courier New]in-line code[/font]
97
+ to display along with [font=Courier New]in-line code[/font] again[/b] and [b][font=Courier New]after as-well[/font][/b].
98
+ EOS
99
+ end
100
+
56
101
  it 'converts inline code in italic text' do
57
102
  expect('*Italic `in-line code` to display*'.md_to_bbcode).to eq '[i]Italic [b][font=Courier New]in-line code[/font][/b] to display[/i]'
58
103
  end
@@ -87,6 +132,14 @@ describe MdToBbcode do
87
132
  EOS
88
133
  end
89
134
 
135
+ it 'converts bold text in links' do
136
+ expect("This is [a link with **bold** text](http://my.domain.com/path)".md_to_bbcode).to eq 'This is [url=http://my.domain.com/path]a link with [b]bold[/b] text[/url]'
137
+ end
138
+
139
+ it 'converts inline code in links' do
140
+ expect('This is [a link with `inline` code](http://my.domain.com/path)'.md_to_bbcode).to eq 'This is [url=http://my.domain.com/path]a link with [b][font=Courier New]inline[/font][/b] code[/url]'
141
+ end
142
+
90
143
  it 'does not convert other formatting in inline code' do
91
144
  expect('`# in-line *code* that is **not formatted**`'.md_to_bbcode).to eq '[b][font=Courier New]# in-line *code* that is **not formatted**[/font][/b]'
92
145
  end
@@ -169,6 +222,35 @@ describe MdToBbcode do
169
222
  EOS
170
223
  end
171
224
 
225
+ it 'converts different numbered lists separated with a blank line' do
226
+ md = <<~EOS
227
+ 1. List item 11
228
+ 2. List item 12
229
+ 3. List item 13
230
+ In list item
231
+
232
+ Not list
233
+
234
+ 1. List item 21
235
+ 2. List item 22
236
+ 3. List item 23
237
+ EOS
238
+ expect(md.md_to_bbcode).to eq(<<~EOS)
239
+ [list=1]
240
+ [*]List item 11
241
+ [*]List item 12
242
+ [*]List item 13
243
+ In list item
244
+ [/list]
245
+ Not list
246
+ [list=1]
247
+ [*]List item 21
248
+ [*]List item 22
249
+ [*]List item 23
250
+ [/list]
251
+ EOS
252
+ end
253
+
172
254
  it 'converts numbered list' do
173
255
  md = <<~EOS
174
256
  1. List item 1
@@ -184,25 +266,77 @@ describe MdToBbcode do
184
266
  EOS
185
267
  end
186
268
 
187
- it 'converts multi-line numbered list' do
269
+ it 'converts multi-line numbered list without indent' do
188
270
  md = <<~EOS
189
271
  1. List item 1
272
+ And another line 1
273
+ Again 1
274
+ 2. List item 2
275
+ And another line 2
276
+ Again 2
277
+ 3. List item 3
278
+ And another line 3
279
+ Again 3
280
+ EOS
281
+ expect(md.md_to_bbcode).to eq(<<~EOS)
282
+ [list=1]
283
+ [*]List item 1
190
284
  And another line 1
191
-
285
+ Again 1
286
+ [*]List item 2
287
+ And another line 2
288
+ Again 2
289
+ [*]List item 3
290
+ And another line 3
291
+ Again 3
292
+ [/list]
293
+ EOS
294
+ end
295
+
296
+ it 'converts multi-line numbered list with indent' do
297
+ md = <<~EOS
298
+ 1. List item 1
299
+ And another line 1
300
+ Again 1
192
301
  2. List item 2
193
302
  And another line 2
194
-
303
+ Again 2
195
304
  3. List item 3
196
305
  And another line 3
306
+ Again 3
197
307
  EOS
198
308
  expect(md.md_to_bbcode).to eq(<<~EOS)
199
309
  [list=1]
200
310
  [*]List item 1
201
311
  And another line 1
202
-
312
+ Again 1
203
313
  [*]List item 2
204
314
  And another line 2
205
-
315
+ Again 2
316
+ [*]List item 3
317
+ And another line 3
318
+ Again 3
319
+ [/list]
320
+ EOS
321
+ end
322
+
323
+ it 'converts multi-line numbered list with empty lines' do
324
+ md = <<~EOS
325
+ 1. List item 1
326
+ And another line 1<br>
327
+ 2. List item 2
328
+ And another line 2<br>
329
+ 3. List item 3
330
+ And another line 3
331
+ EOS
332
+ expect(md.md_to_bbcode).to eq(<<~EOS)
333
+ [list=1]
334
+ [*]List item 1
335
+ And another line 1
336
+
337
+ [*]List item 2
338
+ And another line 2
339
+
206
340
  [*]List item 3
207
341
  And another line 3
208
342
  [/list]
@@ -274,13 +408,11 @@ describe MdToBbcode do
274
408
  puts 'This is code 1'
275
409
  $stdin.gets
276
410
  ```
277
-
278
411
  2. List item 2
279
412
  ```ruby
280
413
  puts 'This is code 2'
281
414
  $stdin.gets
282
415
  ```
283
-
284
416
  3. List item 3
285
417
  ```ruby
286
418
  puts 'This is code 3'
@@ -290,17 +422,18 @@ describe MdToBbcode do
290
422
  expect(md.md_to_bbcode).to eq(<<~EOS)
291
423
  [list=1]
292
424
  [*]List item 1
293
- [code] puts 'This is code 1'
425
+ [code]
426
+ puts 'This is code 1'
294
427
  $stdin.gets
295
428
  [/code]
296
-
297
429
  [*]List item 2
298
- [code] puts 'This is code 2'
430
+ [code]
431
+ puts 'This is code 2'
299
432
  $stdin.gets
300
433
  [/code]
301
-
302
434
  [*]List item 3
303
- [code] puts 'This is code 3'
435
+ [code]
436
+ puts 'This is code 3'
304
437
  $stdin.gets
305
438
  [/code]
306
439
  [/list]
@@ -312,6 +445,8 @@ describe MdToBbcode do
312
445
  # Heading h1
313
446
 
314
447
  Normal text
448
+ And another line<br>
449
+ with a line break
315
450
 
316
451
  **Bold text**
317
452
 
@@ -324,6 +459,7 @@ describe MdToBbcode do
324
459
  **Bold text including an italic *[link to Google](https://www.google.com)*.**
325
460
 
326
461
  This is a bullet list:
462
+
327
463
  * Bullet item 1
328
464
  * Bullet item 2
329
465
  * Bullet item 3
@@ -351,11 +487,13 @@ describe MdToBbcode do
351
487
  ```
352
488
 
353
489
  This is a numbered list:
490
+
354
491
  1. Numbered item 1
355
492
  2. Numbered item 2
356
493
  3. Numbered item 3
357
494
 
358
495
  Here is some Ruby:
496
+
359
497
  ```ruby
360
498
  puts 'Hello' * 3 * 5
361
499
  # World
@@ -363,9 +501,11 @@ describe MdToBbcode do
363
501
  ```
364
502
 
365
503
  This is a numbered list with 1 item:
504
+
366
505
  1. Numbered item 1
367
506
 
368
507
  This is a numbered list multi-line:
508
+
369
509
  1. Numbered item 1
370
510
  Additional content 1
371
511
  2. Numbered item 2
@@ -380,40 +520,40 @@ describe MdToBbcode do
380
520
  And ending text
381
521
  EOS
382
522
  expect(md.md_to_bbcode).to eq(<<~EOS)
523
+
383
524
  [size=6][b]Heading h1[/b][/size]
384
-
525
+
385
526
  Normal text
386
-
527
+ And another line
528
+
529
+ with a line break
387
530
  [b]Bold text[/b]
388
-
389
531
  Not bold followed by [b]bold and followed by[/b] not bold.
390
-
391
532
  Not bold followed by [b]bold and
392
533
  followed
393
534
  by[/b] not bold on multi-lines.
394
-
395
535
  [b]Bold text including an italic [i][url=https://www.google.com]link to Google[/url][/i].[/b]
396
-
397
536
  This is a bullet list:
398
537
  [list]
399
538
  [*]Bullet item 1
400
539
  [*]Bullet item 2
401
540
  [*]Bullet item 3
402
541
  [/list]
403
-
542
+
404
543
  [size=6]Heading h2[/size]
405
-
544
+
406
545
  Here is a link to [url=https://www.google.com/]Google[/url] in a middle of a line.
407
-
408
546
  An inline code block [b][font=Courier New]this is code[/font][/b] to be inserted.
409
547
  And [b]another one in bold: [font=Courier New]this is *code* that **is preformatted**[/font] but written[/b] in bold.
410
-
548
+
411
549
  [size=5][b]Heading h3[/b][/size]
412
-
550
+
551
+
413
552
  [size=5]Heading h4 with [b][font=Courier New]embedded code[/font][/b][/size]
414
-
553
+
415
554
  Here is a code block in json:
416
- [code]{
555
+ [code]
556
+ {
417
557
  "my_json": {
418
558
  "is": "super",
419
559
  "great": "and",
@@ -421,39 +561,32 @@ describe MdToBbcode do
421
561
  }
422
562
  }
423
563
  [/code]
424
-
425
564
  This is a numbered list:
426
565
  [list=1]
427
566
  [*]Numbered item 1
428
567
  [*]Numbered item 2
429
568
  [*]Numbered item 3
430
569
  [/list]
431
-
432
570
  Here is some Ruby:
433
571
  [code]puts 'Hello' * 3 * 5
434
572
  # World
435
573
  puts `echo World`
436
574
  [/code]
437
-
438
575
  This is a numbered list with 1 item:
439
576
  [list=1]
440
577
  [*]Numbered item 1
441
578
  [/list]
442
-
443
579
  This is a numbered list multi-line:
444
580
  [list=1]
445
581
  [*]Numbered item 1
446
582
  Additional content 1
447
583
  [*]Numbered item 2
448
584
  Additional content 2
449
-
450
585
  [*]Numbered item 3
451
586
  Additional content 3
452
587
  [/list]
453
-
454
588
  Here is an inserted image:
455
589
  [img]https://x-aeon.com/muriel.jpg[/img]
456
-
457
590
  And ending text
458
591
  EOS
459
592
  end
File without changes
data/spec/spec_helper.rb CHANGED
File without changes
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: md_to_bbcode
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muriel Salvan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-02 00:00:00.000000000 Z
11
+ date: 2021-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redcarpet
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.5'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rspec
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,20 @@ dependencies:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '3.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sem_ver_components
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.0'
27
55
  description: Provides an API and an executable to convert Markdown text to BBCode
28
56
  format
29
57
  email:
@@ -35,6 +63,7 @@ extra_rdoc_files: []
35
63
  files:
36
64
  - bin/md_to_bbcode
37
65
  - lib/md_to_bbcode.rb
66
+ - lib/md_to_bbcode/bbcode_renderer.rb
38
67
  - lib/md_to_bbcode/core_extensions/string/md_to_bbcode.rb
39
68
  - lib/md_to_bbcode/version.rb
40
69
  - spec/api_spec.rb
@@ -59,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
88
  - !ruby/object:Gem::Version
60
89
  version: '0'
61
90
  requirements: []
62
- rubygems_version: 3.1.2
91
+ rubygems_version: 3.2.3
63
92
  signing_key:
64
93
  specification_version: 4
65
94
  summary: Convert Markdown text to Bbcode