prawndown-ext 0.1.1 → 0.1.3

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: 5947baab09c402391db1f097b756ca062abfb76c16f16b5f275a8129e44abf2b
4
- data.tar.gz: a04223c95701f8dc752a572ed05792564204935d71d7d2ce4ac1547352a5c06f
3
+ metadata.gz: fd619d59e60b9e2febbd337fe13b2305e715f114595ceeef87696b8785a41ff4
4
+ data.tar.gz: 49756da2ec59eb28a26c59b858fd8e25f7ed0032c46aca28899afdd1d43a0ede
5
5
  SHA512:
6
- metadata.gz: a1939d964c12972dd88334209644fee5dbd24cbf3a3b9d5eaadd71a455c6c460baf0472f1788fc8994478c0bdca2afe8a71fafb9214b03ac866fc52b92125cd7
7
- data.tar.gz: 71301a49d2c32d33074f343f66b2b9ca2904b0c8417a7e1f352d071ab6755057e23ed7fc696ef00e7c34f398cb3f0e65745e1e6a5b29189253285480f38ab0c8
6
+ metadata.gz: 7270965459f9fe64cffb85b19bcbdf4e3a0b6965c66f23c4485a52b5719f9d68e78c50f4e267b450e6037e29d5bf9be0ce93ffc4ede4ef032c0a050ce6794ae5
7
+ data.tar.gz: 85c9aecc4f40b3a3ecc88de4a484b30fd1721b8d5d9954c6c473ecb59ca22fb245ddbe51740114b6c6b39be36068264359f0a06cd869f666b1b9616a426918e8
@@ -2,56 +2,68 @@ module PrawndownExt
2
2
  # Markdown to Prawn parser
3
3
  class Parser
4
4
  MATCHERS = {
5
- #/^> (.+)/ => '<quote>\1</quote>', # Quote
5
+ ## Regular markdown
6
6
  /^# (.+)/ => '<font size="HEADER1_SIZE"><b>\1</b></font>', # Header 1
7
7
  /^## (.+)/ => '<font size="HEADER2_SIZE"><b>\1</b></font>', # Header 2
8
8
  /^### (.+)/ => '<font size="HEADER3_SIZE"><b>\1</b></font>', # Header 3
9
9
  /^#### (.+)/ => '<font size="HEADER4_SIZE"><b>\1</b></font>', # Header 4
10
10
  /^##### (.+)/ => '<font size="HEADER5_SIZE"><b>\1</b></font>', # Header 5
11
11
  /^###### (.+)/ => '<font size="HEADER6_SIZE"><b>\1</b></font>', # Header 6
12
- #/!\[([^\[]+)\]\(([^\)]+)\)/ => '<img href="\2" alt="\1">', # Image
13
- /!\[([^\[]+)\]\(([^\)]+)\)/ => '', # Images removed for now
14
12
  /<iframe ([^\[]+)<\/iframe>/ => '', # Embeds are just removed
15
- /\[([^\[]+)\]\(([^\)]+)\)/ => '<link href="\2">\1</link>', # Link
16
13
  /(\*\*|__)(.*?)\1/ => '<b>\2</b>', # Bold
17
14
  /(\*|_)(.*?)\1/ => '<i>\2</i>', # Italic
18
- /\~\~(.*?)\~\~/ => '<strikethrough>\1</strikethrough>' # Strikethrough
15
+ /\~\~(.*?)\~\~/ => '<strikethrough>\1</strikethrough>', # Strikethrough
16
+
17
+ # Command Break items
18
+ # These split into multiple commands for output
19
+
20
+ # Images
21
+ /!\[([^\[]+)\]\(([^\)]+)\)/ => '<command_break>{"command":"img", "alt":"\1", "path":"\2"}<command_break>',
22
+ /^> (.+)/ => '<command_break>{"command":"quote","margin":20,"text":"\\1"}<command_break>', # Quote
23
+
24
+ # Stuff to process last
25
+ /\[([^\[]+)\]\(([^\)]+)\)/ => '<link href="\2">\1</link>', # Link
19
26
  }
20
27
 
28
+ def escape_text text
29
+ text = text.gsub('"', '\\"')
30
+ end
31
+
21
32
  # Initialize a new +Prawndown::Parser+.
22
33
  # +text+ must a a valid Markdown string that only contains supported tags.
23
34
  #
24
35
  # Supported tags are: Header 1-6, bold, italic, strikethrough and link.
25
36
  def initialize(text, options)
26
37
 
27
- @text = text.to_s
28
- @header1_size = 28
29
- @header2_size = 24
30
- @header3_size = 20
31
- @header4_size = 18
32
- @header5_size = 16
33
- @header6_size = 14
34
-
35
- if !options.nil?
36
- if options.key?("header1_size")
37
- @header1_size = options["header1_size"]
38
- end
39
- if options.key?("header2_size")
40
- @header2_size = options["header2_size"]
41
- end
42
- if options.key?("header3_size")
43
- @header3_size = options["header3_size"]
44
- end
45
- if options.key?("header4_size")
46
- @header4_size = options["header4_size"]
47
- end
48
- if options.key?("header5_size")
49
- @header5_size = options["header5_size"]
50
- end
51
- if options.key?("header6_size")
52
- @header6_size = options["header6_size"]
53
- end
54
- end
38
+ #@text = text.to_s
39
+ @text = escape_text text.to_s
40
+ @header1_size = 28
41
+ @header2_size = 24
42
+ @header3_size = 20
43
+ @header4_size = 18
44
+ @header5_size = 16
45
+ @header6_size = 14
46
+
47
+ if !options.nil?
48
+ if options.key?("header1_size")
49
+ @header1_size = options["header1_size"]
50
+ end
51
+ if options.key?("header2_size")
52
+ @header2_size = options["header2_size"]
53
+ end
54
+ if options.key?("header3_size")
55
+ @header3_size = options["header3_size"]
56
+ end
57
+ if options.key?("header4_size")
58
+ @header4_size = options["header4_size"]
59
+ end
60
+ if options.key?("header5_size")
61
+ @header5_size = options["header5_size"]
62
+ end
63
+ if options.key?("header6_size")
64
+ @header6_size = options["header6_size"]
65
+ end
66
+ end
55
67
 
56
68
  end
57
69
 
@@ -74,8 +86,9 @@ module PrawndownExt
74
86
  result = _match.inject(@text) do |final_string, (markdown_matcher, prawn_tag)|
75
87
  final_string.gsub(markdown_matcher, prawn_tag)
76
88
  end
77
-
78
89
 
90
+ result = result.split("<command_break>")
91
+
79
92
  result
80
93
 
81
94
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module PrawndownExt
4
4
  module Ext
5
- VERSION = "0.1.1"
5
+ VERSION = "0.1.3"
6
6
  end
7
7
  end
data/lib/prawndown-ext.rb CHANGED
@@ -1,9 +1,58 @@
1
1
  require 'prawn'
2
2
  require "prawndown/version"
3
3
  require "prawndown/parser"
4
+ require 'json'
4
5
 
5
6
  module PrawndownExt
7
+
6
8
  module Interface
9
+
10
+ class CommandInterface
11
+
12
+ COMMAND = {
13
+ "text" => -> (args, pdf) { cl_text(args, pdf) },
14
+ "img" => -> (args, pdf) { cl_img(args, pdf) },
15
+ "quote" => -> (args,pdf) { cl_text_box(args, pdf) },
16
+ }
17
+
18
+ def self.cl_text args, pdf
19
+
20
+ pdf.text args["text"], inline_format: true
21
+
22
+ end
23
+
24
+ def self.cl_text_box args, pdf
25
+ pdf.pad args["margin"] do
26
+ pdf.indent args["margin"], args["margin"] do
27
+ pdf.text args["text"], inline_format: true
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ def self.cl_img args, pdf
34
+ pdf.image(args["path"],
35
+ width: pdf.bounds.width,
36
+ position: :center)
37
+ end
38
+
39
+
40
+ def exec args, pdf
41
+
42
+ if args.key?("command")
43
+ if COMMAND.include?(args["command"])
44
+ COMMAND[args["command"]].call(args, pdf)
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+
52
+ def unescape_text text
53
+ text = text.gsub('\\"', '"')
54
+ end
55
+
7
56
  # Renders Markdown in the current document
8
57
  #
9
58
  # It supports header 1-6, bold text, italic text, strikethrough and links
@@ -14,8 +63,20 @@ module PrawndownExt
14
63
  # markdown '**Important:** We _hope_ you enjoy your stay!'
15
64
  # end
16
65
  def markdown(string, options: nil)
17
- text PrawndownExt::Parser.new(string, options).to_prawn, options.merge(inline_format: true)
66
+ processed = PrawndownExt::Parser.new(string, options).to_prawn
67
+
68
+ processed.each do |output|
69
+
70
+ begin
71
+ CommandInterface.new.exec JSON.parse(output.strip), self
72
+
73
+ rescue
74
+ text unescape_text(output), inline_format: true
75
+ end
76
+
77
+ end
18
78
  end
79
+
19
80
  end
20
81
  end
21
82
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prawndown-ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - PunishedFelix