kramdown-prismic 0.1.2 → 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
- SHA1:
3
- metadata.gz: 478fc54041b88fe3724b5adb47ef50c1268fcfed
4
- data.tar.gz: dc9377d07e20fd263380158356b94e49f116af53
2
+ SHA256:
3
+ metadata.gz: 5375492a7419784a19fee9021699380d7106184167742f73f693502aeee28767
4
+ data.tar.gz: 378f78feb7e48a07c5177a7ae98556fb918a6b6258201227a5cfd415dc73d23c
5
5
  SHA512:
6
- metadata.gz: 04deb0aed85ffb4c1f043f80a20e4ecef50ff69d53aa809eca3ec83297c07cc4383dc22d20deb13fdc9d790b48d26610454a170178aa6e0f900e81717c86a66d
7
- data.tar.gz: f4b2afe4d8626f581ca937a35eef188d7a0cdd85235902db3dbddb7998e9a5a912c0ae397a4dfe4ee3805a5057f8c0e5a26ffd07e4b78bdad64cd86bc3a57393
6
+ metadata.gz: b90f2f0df8505ef0403704d0db3c32aa3003589e5bd958827ed270347e477b7b87f464626781fa0049b43bf5372f6fd501e4d476b83a61d8bd4d0c399f020bcf
7
+ data.tar.gz: 87d4c10f8ccd35b29ee9fc0b030a604490f35354bb86809bf18c8dfcfe79c3ae62199aa3f2b7195290be38febe09c76a7d9df74734845c9e0b0ebde41602661c
@@ -0,0 +1,39 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+ jobs:
5
+ test-kramdown2:
6
+ strategy:
7
+ fail-fast: false
8
+ matrix:
9
+ os: [ubuntu-latest]
10
+ ruby: [2.6, 2.7, "3.0"]
11
+ gemfile: [ kramdown2 ]
12
+ env:
13
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
14
+ runs-on: ${{ matrix.os }}
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby }}
20
+ bundler-cache: true
21
+ - run: bundle exec rake test
22
+
23
+ test-kramdown1:
24
+ strategy:
25
+ fail-fast: false
26
+ matrix:
27
+ os: [ubuntu-latest]
28
+ ruby: [2.6, 2.7]
29
+ gemfile: [ kramdown1 ]
30
+ env:
31
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
32
+ runs-on: ${{ matrix.os }}
33
+ steps:
34
+ - uses: actions/checkout@v2
35
+ - uses: ruby/setup-ruby@v1
36
+ with:
37
+ ruby-version: ${{ matrix.ruby }}
38
+ bundler-cache: true
39
+ - run: bundle exec rake test
data/Changelog.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 0.3.0
4
+
5
+ - Relax the kramdown dependency to allows the version 2.
6
+ - XML elements support have been removed.
7
+
8
+ ## Version 0.2.2
9
+
10
+ - Convert links with only an image inside. See #1.
11
+
12
+ ## Version 0.2.1
13
+
14
+ - Parse embed elements
15
+ - Convert inline code
16
+
17
+ ## Version 0.2.0
18
+
19
+ - Add parser to convert prismic to markdown
20
+
3
21
  ## Version 0.1.2
4
22
 
5
23
  - fix output with empty paragraph
data/Gemfile.lock CHANGED
@@ -1,15 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kramdown-prismic (0.1.2)
5
- kramdown (~> 1.0)
4
+ kramdown-prismic (0.3.0)
5
+ kramdown (>= 1, < 3)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- kramdown (1.15.0)
10
+ kramdown (2.3.1)
11
+ rexml
11
12
  minitest (5.10.3)
12
- rake (12.2.1)
13
+ rake (13.0.6)
14
+ rexml (3.2.5)
13
15
 
14
16
  PLATFORMS
15
17
  ruby
@@ -17,7 +19,7 @@ PLATFORMS
17
19
  DEPENDENCIES
18
20
  kramdown-prismic!
19
21
  minitest (~> 5.0)
20
- rake (~> 12.0)
22
+ rake (~> 13.0)
21
23
 
22
24
  BUNDLED WITH
23
- 1.14.6
25
+ 1.17.2
data/LICENSE CHANGED
@@ -1,6 +1,7 @@
1
1
  MIT License
2
2
 
3
3
  Copyright (c) 2017 Stormz
4
+ Copyright (c) 2021 François de Metz
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
7
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,19 +1,94 @@
1
1
  # Kramdown Prismic
2
2
 
3
- A Kramdown converter to convert documents into prismic rich text format.
3
+ A [Kramdown][] parser and converter to convert documents into [prismic][] rich text format and back.
4
+
5
+ A useful usage is to convert markdown documents to prismic for import purpose. Then you can even convert prismic format back to markdown.
4
6
 
5
7
  ## Status
6
8
 
7
- Most of the content is translated. See the table below to see the difference:
9
+ The converter part (kramdown to prismic) is working and fairly complete. See *Difference between markdown and rich text* below to know more about limitations.
10
+
11
+ The parser part is quite new and not feature complete (missing list item for instance).
12
+
13
+ ## Install
14
+
15
+ ```ruby
16
+ gem 'kramdown-prismic', '~> 0.1'
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ **Convert kramdown documents to Prismic**
22
+
23
+ ```ruby
24
+ require 'kramdown-prismic'
25
+
26
+ kramdown = '# Hello world'
27
+ Kramdown::Document.new(kramdown).to_prismic
28
+ ```
29
+
30
+ **Convert markdown documents to Prismic**
31
+
32
+ ```ruby
33
+ require 'kramdown-prismic'
34
+
35
+ markdown = '# Hello world'
36
+ Kramdown::Document.new(markdown, input: :markdown).to_prismic
37
+ ```
38
+
39
+ **Convert HTML documents to Prismic**
40
+
41
+ ```ruby
42
+ require 'kramdown-prismic'
43
+
44
+ html = '<h1>Hello world</h1>'
45
+ Kramdown::Document.new(html, input: :html).to_prismic
46
+ ```
47
+
48
+ **Convert Prismic to markdown**
49
+
50
+ ```ruby
51
+ require 'kramdown-prismic'
52
+ prismic = [
53
+ {
54
+ type: "heading1",
55
+ content: {
56
+ text: "This is the document title",
57
+ spans: []
58
+ }
59
+ }
60
+ ]
61
+ Kramdown::Document.new(prismic, input: :prismic).to_kramdown
62
+ ```
63
+
64
+ ### Lookup for warnings
65
+
66
+ If there is some elements that cannot be converted (see the status table), a warning will be emitted.
67
+
68
+ For instance, html elements in the markdown is not supported:
69
+
70
+ ```ruby
71
+ require 'kramdown-prismic'
72
+
73
+ markdown = '<h1>Hello world</h1>'
74
+ result = Kramdown::Document.new(markdown, input: :markdown)
75
+ result.to_prismic
76
+ p result.warnings
77
+ ```
8
78
 
9
79
  ### Difference between markdown and rich text
10
80
 
81
+ Some elements cannot be converted, due to some Prismic limitations. The table below explain the difference and limitations of the current converter:
82
+
11
83
  | Markdown | Prismic |
12
84
  |------------------|----------------------------|
13
- | Blockquote | translated to preformatted |
85
+ | blockquote | converted to preformatted |
14
86
  | hr | nothing |
15
87
  | img | moved to the top level |
16
88
  | nested list | moved to the top level |
89
+ | entity | converted to unicode |
90
+ | typographic_sym | converted to unicode |
91
+ | smart_quote | converted to unicode |
17
92
  | dl | not supported |
18
93
  | dt | not supported |
19
94
  | dd | not supported |
@@ -25,9 +100,6 @@ Most of the content is translated. See the table below to see the difference:
25
100
  | td | not supported |
26
101
  | math | not supported |
27
102
  | footnote | not supported |
28
- | entity | Transformed to unicode |
29
- | typographic_sym | Transformed to unicode |
30
- | smart_quote | Transformed to unicode |
31
103
  | abbreviation | not supported |
32
104
  | html_element | not supported |
33
105
  | xml_comment | not supported |
@@ -35,20 +107,19 @@ Most of the content is translated. See the table below to see the difference:
35
107
  | comment | not supported |
36
108
  | raw | not supported |
37
109
 
38
- ## Install
110
+ ## Develop
39
111
 
40
- ```ruby
41
- gem 'kramdown-prismic', '~> 0.1'
42
- ```
112
+ Install dependencies:
43
113
 
44
- ## Usage
114
+ bundle install
45
115
 
46
- ```ruby
47
- require 'kramdown-prismic'
116
+ Run tests:
48
117
 
49
- Kramdown::Document.new(markdown).to_prismic
50
- ```
118
+ bundle exec rake test
51
119
 
52
120
  ## License
53
121
 
54
122
  MIT
123
+
124
+ [Kramdown]: https://kramdown.gettalong.org/
125
+ [prismic]: https://prismic.io/
@@ -4,8 +4,8 @@ require File.expand_path('../lib/kramdown-prismic/version', __FILE__)
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'kramdown-prismic'
6
6
  s.version = KramdownPrismic::VERSION
7
- s.summary = "A Kramdown converter to convert documents into prismic rich text format."
8
- s.description = "A Kramdown converter to convert documents into prismic rich text format."
7
+ s.summary = "A Kramdown converter to convert documents into prismic rich text format and the other way around."
8
+ s.description = "A Kramdown converter to convert documents into prismic rich text format and the other way around."
9
9
  s.authors = ["François de Metz"]
10
10
  s.email = 'francois@2metz.fr'
11
11
 
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.homepage = 'https://github.com/stormz/kramdown-prismic'
16
16
  s.license = 'MIT'
17
17
 
18
- s.add_dependency "kramdown", "~> 1.0"
18
+ s.add_dependency "kramdown", ">= 1", "< 3"
19
19
  s.add_development_dependency "minitest", "~> 5.0"
20
- s.add_development_dependency "rake", "~> 12.0"
20
+ s.add_development_dependency "rake", "~> 13.0"
21
21
  end
data/kramdown1.gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem 'kramdown', '~> 1.0'
data/kramdown2.gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem 'kramdown', '~> 2.0'
@@ -1,4 +1,5 @@
1
1
  require 'kramdown'
2
2
 
3
+ require 'kramdown/parser/prismic'
3
4
  require 'kramdown/converter/prismic'
4
5
  require 'kramdown-prismic/version'
@@ -1,3 +1,3 @@
1
1
  module KramdownPrismic
2
- VERSION = "0.1.2"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -32,7 +32,9 @@ module Kramdown
32
32
 
33
33
  def extract_non_nestable_elements(child, elements)
34
34
  child.children = child.children.inject([]) do |memo, element|
35
- if element.type == :img
35
+ if element.type == :a && element.children.size === 1 && element.children.first.type == :img
36
+ elements << element
37
+ elsif element.type == :img
36
38
  elements << element
37
39
  warning('images inside content will be moved to the top level and may be rendered differently') if child.children.size > 1
38
40
  elsif element.type == :ul
@@ -123,6 +125,27 @@ module Kramdown
123
125
  }
124
126
  end
125
127
 
128
+ # This can only apply when an link with an image inside has been detected
129
+ def convert_a(element)
130
+ image = element.children.first
131
+ {
132
+ type: 'image',
133
+ content: {
134
+ text: '',
135
+ spans: []
136
+ },
137
+ data: {
138
+ origin: {
139
+ url: image.attr['src']
140
+ },
141
+ alt: image.attr['alt'],
142
+ linkTo: {
143
+ url: element.attr['href']
144
+ }
145
+ }
146
+ }
147
+ end
148
+
126
149
  def convert_html_element(element)
127
150
  warning('translating html elements is not supported')
128
151
  nil
@@ -148,16 +171,6 @@ module Kramdown
148
171
  nil
149
172
  end
150
173
 
151
- def convert_xml_comment(element)
152
- warning('translating xml_comment is not supported')
153
- nil
154
- end
155
-
156
- def convert_xml_pi(element)
157
- warning('translating xml_pi is not supported')
158
- nil
159
- end
160
-
161
174
  def convert_raw(element)
162
175
  warning('translating raw is not supported')
163
176
  nil
@@ -212,6 +225,11 @@ module Kramdown
212
225
  memo[:text] += "\n"
213
226
  end
214
227
 
228
+ def extract_span_codespan(element, memo)
229
+ warning('translating inline code is not supported')
230
+ memo[:text] += element.value
231
+ end
232
+
215
233
  def extract_span_html_element(element, memo)
216
234
  warning('translating html elements is not supported')
217
235
  end
@@ -0,0 +1,101 @@
1
+ module Kramdown
2
+ module Parser
3
+ class Prismic < Base
4
+ def parse
5
+ @root.options[:encoding] = 'UTF-8'
6
+ @root.children = @source.map do |block|
7
+ type = block[:type]
8
+ if type.match(/heading/)
9
+ type = 'heading'
10
+ end
11
+ element = send("parse_#{type}", block)
12
+ parse_spans(element, block)
13
+ element
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def parse_heading(block)
20
+ level = block[:type].match(/heading([1-6])/)[1].to_i
21
+ Kramdown::Element.new(:header, nil, nil, {level: level, raw_text: ''})
22
+ end
23
+
24
+ def parse_paragraph(block)
25
+ Kramdown::Element.new(:p)
26
+ end
27
+
28
+ def parse_image(block)
29
+ p = Kramdown::Element.new(:p)
30
+ img = Kramdown::Element.new(:img, nil, {"src" => block[:data][:origin][:url], "alt" => block[:data][:alt]})
31
+ p.children << img
32
+ p
33
+ end
34
+
35
+ def parse_preformatted(block)
36
+ Kramdown::Element.new(:blockquote)
37
+ end
38
+
39
+ def parse_embed(block)
40
+ Kramdown::Element.new(:html_element, 'iframe', { src: block[:data][:embed_url] })
41
+ end
42
+
43
+ def parse_spans(element, block)
44
+ stack = []
45
+
46
+ (block[:content][:text].size + 1).times do |index|
47
+
48
+ starting_spans = find_starting_spans_for(block, index)
49
+ ending_spans = find_ending_spans_for(block, index)
50
+
51
+ ending_spans.each do |ending_span|
52
+ el = stack.pop
53
+ if stack.empty?
54
+ element.children << el
55
+ else
56
+ stack[-1].children << el
57
+ end
58
+ end
59
+ starting_spans.each do |starting_span|
60
+ stack << if starting_span[:type] == "hyperlink"
61
+ Element.new(:a, nil, {'href' => starting_span[:data][:url]})
62
+ else
63
+ Element.new(starting_span[:type].to_sym)
64
+ end
65
+ end
66
+
67
+ char = block[:content][:text][index]
68
+ next if char.nil?
69
+ current_text = if stack.empty?
70
+ element.children.last
71
+ else
72
+ stack[-1].children.last
73
+ end
74
+ if current_text.nil? || current_text.type != :text
75
+ current_text = Element.new(:text, "")
76
+ if stack.empty?
77
+ element.children << current_text
78
+ else
79
+ stack[-1].children << current_text
80
+ end
81
+ end
82
+ current_text.value += char
83
+ end
84
+ end
85
+
86
+ def find_starting_spans_for(block, index)
87
+ block[:content][:spans].find_all do |span|
88
+ span[:start] == index
89
+ end.sort_by do |span|
90
+ -span[:end]
91
+ end
92
+ end
93
+
94
+ def find_ending_spans_for(block, index)
95
+ block[:content][:spans].find_all do |span|
96
+ span[:end] == index
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -1,32 +1,35 @@
1
+ # coding: utf-8
1
2
  require 'minitest/autorun'
2
3
  require 'kramdown-prismic'
3
4
 
4
- class KramdownPrismicTest < Minitest::Test
5
- def test_convert_heading
6
- expected = [
7
- {
8
- type: "heading1",
9
- content: {
10
- text: "This is the document title",
11
- spans: []
5
+ class KramdownPrismicConverterTest < Minitest::Test
6
+ 6.times do |heading|
7
+ define_method "test_convert_heading_#{heading}" do
8
+ expected = [
9
+ {
10
+ type: "heading#{heading + 1}",
11
+ content: {
12
+ text: "This is the document title",
13
+ spans: []
14
+ }
12
15
  }
13
- }
14
- ]
15
- markdown = "# This is the document title"
16
- assert_equal expected, Kramdown::Document.new(markdown, input: :markdown).to_prismic
16
+ ]
17
+ markdown = "#{"#" * (heading + 1)} This is the document title"
18
+ assert_equal expected, Kramdown::Document.new(markdown, input: :kramdown).to_prismic
19
+ end
17
20
  end
18
21
 
19
- def test_convert_heading2
22
+ def test_convert_heading7
20
23
  expected = [
21
24
  {
22
- type: "heading2",
25
+ type: "heading6",
23
26
  content: {
24
- text: "This is a document title",
27
+ text: "# This is the document title",
25
28
  spans: []
26
29
  }
27
30
  }
28
31
  ]
29
- markdown = "## This is a document title"
32
+ markdown = "####### This is the document title"
30
33
  assert_equal expected, Kramdown::Document.new(markdown, input: :markdown).to_prismic
31
34
  end
32
35
 
@@ -364,6 +367,31 @@ class KramdownPrismicTest < Minitest::Test
364
367
  assert_equal 2, doc.warnings.size
365
368
  end
366
369
 
370
+ def test_convert_img_with_link
371
+ expected = [
372
+ {
373
+ type: "image",
374
+ content: {
375
+ text: "",
376
+ spans: []
377
+ },
378
+ data: {
379
+ origin: {
380
+ url: '/img.png'
381
+ },
382
+ alt: 'alt text',
383
+ linkTo: {
384
+ url: "https://example.net/"
385
+ }
386
+ }
387
+ }
388
+ ]
389
+ markdown = "[![alt text](/img.png)](https://example.net/)"
390
+ doc = Kramdown::Document.new(markdown)
391
+ assert_equal expected, doc.to_prismic
392
+ assert_equal 0, doc.warnings.size
393
+ end
394
+
367
395
  def test_convert_entity
368
396
  expected = [
369
397
  {
@@ -414,6 +442,22 @@ class KramdownPrismicTest < Minitest::Test
414
442
  assert_equal expected, Kramdown::Document.new(markdown, input: :kramdown).to_prismic
415
443
  end
416
444
 
445
+ def test_convert_inline_code
446
+ expected = [
447
+ {
448
+ type: "paragraph",
449
+ content: {
450
+ text: "Hello code",
451
+ spans: []
452
+ }
453
+ }
454
+ ]
455
+ markdown = "Hello `code`"
456
+ doc = Kramdown::Document.new(markdown)
457
+ assert_equal expected, doc.to_prismic
458
+ assert_equal 1, doc.warnings.size
459
+ end
460
+
417
461
  def test_convert_br
418
462
  expected = [
419
463
  {type: "paragraph",
@@ -513,22 +557,6 @@ class KramdownPrismicTest < Minitest::Test
513
557
  assert_equal 1, doc.warnings.size
514
558
  end
515
559
 
516
- def test_convert_xml_comment
517
- expected = []
518
- markdown = "<!-- a *comment* -->"
519
- doc = Kramdown::Document.new(markdown, input: :kramdown)
520
- assert_equal expected, doc.to_prismic
521
- assert_equal 1, doc.warnings.size
522
- end
523
-
524
- def test_convert_xml_pi
525
- expected = []
526
- markdown = "<? a processing `instruction`?>"
527
- doc = Kramdown::Document.new(markdown, input: :kramdown)
528
- assert_equal expected, doc.to_prismic
529
- assert_equal 1, doc.warnings.size
530
- end
531
-
532
560
  def test_convert_raw
533
561
  expected = []
534
562
  markdown = "{::nomarkdown}\nComment\n{:/nomarkdown}"
@@ -0,0 +1,204 @@
1
+ require 'minitest/autorun'
2
+ require 'kramdown-prismic'
3
+
4
+ class KramdownPrismicParserTest < Minitest::Test
5
+ def test_parse_heading
6
+ prismic = [
7
+ {
8
+ type: "heading1",
9
+ content: {
10
+ text: "This is the document title",
11
+ spans: []
12
+ }
13
+ }
14
+ ]
15
+ expected = "# This is the document title\n\n"
16
+ doc = Kramdown::Document.new(prismic, input: :prismic)
17
+ assert_equal expected, doc.to_kramdown
18
+ end
19
+
20
+ def test_parse_heading2
21
+ prismic = [
22
+ {
23
+ type: "heading2",
24
+ content: {
25
+ text: "This is an h2 title",
26
+ spans: []
27
+ }
28
+ }
29
+ ]
30
+ expected = "## This is an h2 title\n\n"
31
+ doc = Kramdown::Document.new(prismic, input: :prismic)
32
+ assert_equal expected, doc.to_kramdown
33
+ end
34
+
35
+ def test_parse_paragraph
36
+ prismic = [
37
+ {
38
+ type: "paragraph",
39
+ content: {
40
+ text: "This is a paragraph",
41
+ spans: []
42
+ }
43
+ }
44
+ ]
45
+ expected = "This is a paragraph\n\n"
46
+ doc = Kramdown::Document.new(prismic, input: :prismic)
47
+ assert_equal expected, doc.to_kramdown
48
+ end
49
+
50
+ def test_parse_paragraph_with_spans
51
+ prismic = [
52
+ {
53
+ type: "paragraph",
54
+ content: {
55
+ text: "This is a paragraph",
56
+ spans: [
57
+ {
58
+ type: "em",
59
+ start: 0,
60
+ end: 4
61
+ }
62
+ ]
63
+ }
64
+ }
65
+ ]
66
+ expected = "*This* is a paragraph\n\n"
67
+ doc = Kramdown::Document.new(prismic, input: :prismic)
68
+ assert_equal expected, doc.to_kramdown
69
+ end
70
+
71
+ def test_parse_paragraph_with_multiple_spans
72
+ prismic = [
73
+ {
74
+ type: "paragraph",
75
+ content: {
76
+ text: "This is a paragraph",
77
+ spans: [
78
+ {
79
+ type: "em",
80
+ start: 0,
81
+ end: 4
82
+ },
83
+ {
84
+ type: "strong",
85
+ start: 5,
86
+ end: 7
87
+ }
88
+ ]
89
+ }
90
+ }
91
+ ]
92
+ expected = "*This* **is** a paragraph\n\n"
93
+ doc = Kramdown::Document.new(prismic, input: :prismic)
94
+ assert_equal expected, doc.to_kramdown
95
+ end
96
+
97
+ def test_parse_paragraph_with_link
98
+ prismic = [
99
+ {
100
+ type: "paragraph",
101
+ content: {
102
+ text: "This is a paragraph",
103
+ spans: [
104
+ {
105
+ type: "hyperlink",
106
+ start: 0,
107
+ end: 19,
108
+ data: {
109
+ url: "https://prismic.io"
110
+ }
111
+ }
112
+ ]
113
+ }
114
+ }
115
+ ]
116
+ expected = "[This is a paragraph][1]\n\n\n\n[1]: https://prismic.io\n"
117
+ doc = Kramdown::Document.new(prismic, input: :prismic)
118
+ assert_equal expected, doc.to_kramdown
119
+ end
120
+
121
+ def test_parse_paragraph_with_nested_spans
122
+ prismic = [
123
+ {
124
+ type: "paragraph",
125
+ content: {
126
+ text: "This is a paragraph",
127
+ spans: [
128
+ {
129
+ type: "em",
130
+ start: 0,
131
+ end: 4
132
+ },
133
+ {
134
+ type: "hyperlink",
135
+ start: 0,
136
+ end: 19,
137
+ data: {
138
+ url: "https://prismic.io"
139
+ }
140
+ }
141
+ ]
142
+ }
143
+ }
144
+ ]
145
+ expected = "[*This* is a paragraph][1]\n\n\n\n[1]: https://prismic.io\n"
146
+ doc = Kramdown::Document.new(prismic, input: :prismic)
147
+ assert_equal expected, doc.to_kramdown
148
+ end
149
+
150
+ def test_parse_image
151
+ prismic = [
152
+ {
153
+ type: "image",
154
+ content: {
155
+ text: "",
156
+ spans: []
157
+ },
158
+ data: {
159
+ origin: {
160
+ url: '/img.png'
161
+ },
162
+ alt: 'alt text'
163
+ }
164
+ }
165
+ ]
166
+ expected = "![alt text](/img.png)\n\n"
167
+ doc = Kramdown::Document.new(prismic, input: :prismic)
168
+ assert_equal expected, doc.to_kramdown
169
+ end
170
+
171
+ def test_parse_preformatted
172
+ prismic = [
173
+ {
174
+ type: "preformatted",
175
+ content: {
176
+ text: "This is a pre block\n",
177
+ spans: []
178
+ }
179
+ }
180
+ ]
181
+ expected = "> This is a pre block \n\n"
182
+ doc = Kramdown::Document.new(prismic, input: :prismic)
183
+ assert_equal expected, doc.to_kramdown
184
+ end
185
+
186
+ def test_parse_embed
187
+ prismic = [
188
+ {
189
+ type: "embed",
190
+ data: {
191
+ type: "video",
192
+ embed_url: "https://www.youtube.com/watch?v=y6y_4_b6RS8"
193
+ },
194
+ content: {
195
+ text: "",
196
+ spans: []
197
+ }
198
+ }
199
+ ]
200
+ expected = "<iframe src=\"https://www.youtube.com/watch?v=y6y_4_b6RS8\"></iframe>\n"
201
+ doc = Kramdown::Document.new(prismic, input: :prismic)
202
+ assert_equal expected, doc.to_kramdown
203
+ end
204
+ end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kramdown-prismic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - François de Metz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-02 00:00:00.000000000 Z
11
+ date: 2021-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: '1.0'
22
+ version: '3'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '1.0'
32
+ version: '3'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: minitest
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -44,20 +50,22 @@ dependencies:
44
50
  requirements:
45
51
  - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '12.0'
53
+ version: '13.0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '12.0'
55
- description: A Kramdown converter to convert documents into prismic rich text format.
60
+ version: '13.0'
61
+ description: A Kramdown converter to convert documents into prismic rich text format
62
+ and the other way around.
56
63
  email: francois@2metz.fr
57
64
  executables: []
58
65
  extensions: []
59
66
  extra_rdoc_files: []
60
67
  files:
68
+ - ".github/workflows/ci.yml"
61
69
  - ".gitignore"
62
70
  - ".travis.yml"
63
71
  - Changelog.md
@@ -67,10 +75,14 @@ files:
67
75
  - README.md
68
76
  - Rakefile
69
77
  - kramdown-prismic.gemspec
78
+ - kramdown1.gemfile
79
+ - kramdown2.gemfile
70
80
  - lib/kramdown-prismic.rb
71
81
  - lib/kramdown-prismic/version.rb
72
82
  - lib/kramdown/converter/prismic.rb
73
- - test/kramdown-prismic_test.rb
83
+ - lib/kramdown/parser/prismic.rb
84
+ - test/converter_test.rb
85
+ - test/parser_test.rb
74
86
  homepage: https://github.com/stormz/kramdown-prismic
75
87
  licenses:
76
88
  - MIT
@@ -90,10 +102,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
102
  - !ruby/object:Gem::Version
91
103
  version: '0'
92
104
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.6.11
105
+ rubygems_version: 3.0.3
95
106
  signing_key:
96
107
  specification_version: 4
97
- summary: A Kramdown converter to convert documents into prismic rich text format.
108
+ summary: A Kramdown converter to convert documents into prismic rich text format and
109
+ the other way around.
98
110
  test_files:
99
- - test/kramdown-prismic_test.rb
111
+ - test/converter_test.rb
112
+ - test/parser_test.rb