petit-felix 0.1.3 → 0.1.5

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: b82f613c07ac215219d350be885afff66876e67b094d3358d5f2598785b370e9
4
- data.tar.gz: 53dc26d5fa3834c38317f6632c16d8c99bae7ab8af77660c77fdb420be625f41
3
+ metadata.gz: 6dd1314254a58bf139622785e904f6461480b148d809e2eb0e777c319dbf391f
4
+ data.tar.gz: d70547db0dabee7c9af618cd8c7f79bf5086ad3a074e3b2a5d0ffa3194296abf
5
5
  SHA512:
6
- metadata.gz: c054afc66ad63700938463e5d081deba54f3a9b064c9fdd82201d3a315b99c338cc70390873b557f780ea20e832c01f46e7d689830e9eb07d0340a64f42c2fb5
7
- data.tar.gz: ef7cd3f1724ac05f70fd9d73675b72a2246bfcd2978ea0329ed4c5d73c92bda02d56a4f5dacb5bde2a3804f2001375ca752887dce029edf805521b2528201236
6
+ metadata.gz: 49ee539a073acc0668a1c414190e36a05b3e9c8d628c01b78c2c437e1866e2e83c36c36a1f13aeb56fad3877388f98bdc287fcdeee6d3f469abbba1b60b9e121
7
+ data.tar.gz: a3f8e8dda4dd750ffe7d1849ae4d181ae76799c161cc14bb82c3e1f46ead121a59c078b7b3a172ae40e4dc03f3b75bc2d51824fe4818a8f066d08d12c9a80815
data/lib/felix/config.rb CHANGED
@@ -14,7 +14,7 @@ module PetitFelix
14
14
  "image_dir" => "./assets/images",
15
15
  "input_files" => "./md/*",
16
16
  "output_dir" => "./output",
17
- "worker" => "basic_pdf",
17
+ "task" => "pdf-single",
18
18
  }
19
19
 
20
20
  ## Hash for custom command line argument calls
@@ -35,6 +35,8 @@ module PetitFelix
35
35
  "page_layout" => -> (command, args, index, cl_args) { cl_add_config(command, args, index, cl_args) },
36
36
  "input_files" => -> (command, args, index, cl_args) { cl_add_config(command, args, index, cl_args) },
37
37
  "image_dir" => -> (command, args, index, cl_args) { cl_add_config(command, args, index, cl_args) },
38
+ "task" => -> (command, args, index, cl_args) { cl_add_config(command, args, index, cl_args) },
39
+ "template" => -> (command, args, index, cl_args) { cl_add_config(command, args, index, cl_args) },
38
40
  }
39
41
 
40
42
  ### Command Line Arguments
@@ -52,6 +54,7 @@ module PetitFelix
52
54
  ## then finally any arguments defined in the metadata.
53
55
 
54
56
  def load_config(wm, passed_args, args)
57
+
55
58
  @processed_arguments = []
56
59
 
57
60
  # Felix metadata handler
@@ -66,7 +69,7 @@ module PetitFelix
66
69
 
67
70
  if File.file?("./default.cfg")
68
71
 
69
- default_config = metadata.get_metadata(File.read("./default.cfg")[0])
72
+ default_config = metadata.get_metadata(File.read("./default.cfg"))
70
73
  end
71
74
 
72
75
  # Loads command line arguments
@@ -76,20 +79,20 @@ module PetitFelix
76
79
  worker = ""
77
80
  worker_options = nil
78
81
 
79
- if default_options.key?("worker")
80
- worker = default_options["worker"]
82
+ if default_options.key?("task")
83
+ worker = default_options["task"]
81
84
  end
82
85
 
83
- if default_config.key?("worker")
84
- worker = default_config["worker"]
86
+ if default_config.key?("task")
87
+ worker = default_config["task"]
85
88
  end
86
89
 
87
- if cl_args.key?("worker")
88
- worker = cl_args["worker"]
90
+ if cl_args.key?("task")
91
+ worker = cl_args["task"]
89
92
  end
90
93
 
91
- if passed_args.key?("worker")
92
- worker = passed_args["worker"]
94
+ if passed_args.key?("task")
95
+ worker = passed_args["task"]
93
96
  end
94
97
 
95
98
  if worker != ""
@@ -100,11 +103,6 @@ module PetitFelix
100
103
  # First, default options
101
104
  options = default_options
102
105
 
103
- # Then loading default config file
104
- default_config.keys.each do |key|
105
- options[key] = default_config[key]
106
- end
107
-
108
106
  # Then loading default worker args
109
107
  if !worker_options.nil?
110
108
  worker_options.keys.each do |key|
@@ -112,6 +110,11 @@ module PetitFelix
112
110
  end
113
111
  end
114
112
 
113
+ # Then loading default config file
114
+ default_config.keys.each do |key|
115
+ options[key] = default_config[key]
116
+ end
117
+
115
118
  # Then loading CLI arguments
116
119
  cl_args.keys.each do |key|
117
120
  options[key] = cl_args[key]
@@ -132,6 +135,7 @@ module PetitFelix
132
135
  index = 0
133
136
 
134
137
  args.each do |com|
138
+
135
139
  command = com.downcase
136
140
 
137
141
  if command.start_with?("--")
@@ -1,4 +1,3 @@
1
- require "task/basic_pdf_task"
2
1
  require "felix/task_manager"
3
2
 
4
3
  module PetitFelix
@@ -9,10 +8,14 @@ module PetitFelix
9
8
 
10
9
  def render_files(wm, options)
11
10
 
12
- task = wm.get_task options["worker"]
11
+ task = wm.get_task options["task"]
13
12
 
13
+ default_options = wm.get_task_options options["task"]
14
+
15
+ default_options = default_options.merge(options)
16
+
14
17
  if !task.nil?
15
- task.render_files options
18
+ task.render_files default_options
16
19
  end
17
20
 
18
21
  end
@@ -20,14 +20,15 @@ module PetitFelix
20
20
  array = input.lines
21
21
 
22
22
  metadata = {}
23
-
23
+
24
24
  array.each do |set|
25
25
  if set.count(":") >= 1
26
- data = set.split(":")
26
+ data = set.split(":", 2)
27
27
  index = data[0].strip.downcase
28
- metadata[index] = data[1].strip
28
+ metadata[index] = data[1].strip.gsub("\\\"", "\"")
29
29
  end
30
30
  end
31
+
31
32
  metadata
32
33
  end
33
34
 
@@ -40,5 +41,15 @@ module PetitFelix
40
41
  input
41
42
  end
42
43
 
44
+ ## Transforms string into JSON parsed object
45
+ def parse_property string, base="${x}"
46
+ begin
47
+ return JSON.parse(base.sub("${x}", string), symbolize_names: true)
48
+ rescue
49
+ return parse_property
50
+ end
51
+ end
52
+
53
+
43
54
  end
44
55
  end
@@ -4,13 +4,22 @@ require "felix/error"
4
4
  module PetitFelix
5
5
  class TaskManager
6
6
 
7
+ def load_task filename
8
+ load filename
9
+ end
10
+
11
+
7
12
  # Gets the list of tasks loaded
8
13
  def initialize
9
14
  @error_printer = PetitFelix::Error.new
10
15
  @task_list = {}
16
+
17
+ load_task "task/template_pdf_task.rb"
18
+ load_task "task/pdf_single_task.rb"
19
+ load_task "task/basic_pdf_classic_task.rb"
11
20
 
12
21
  task_list = PetitFelix::Task.constants.select {|c| PetitFelix::Task.const_get(c).is_a? Class}
13
-
22
+
14
23
  task_list.delete(:DefaultTask)
15
24
 
16
25
  task_list.each do |task|
@@ -18,9 +27,10 @@ module PetitFelix
18
27
 
19
28
  task_obj = {}
20
29
  task_obj["id"] = task
21
- task_obj["options"] = task_instance::DEFAULT_OPTIONS
22
30
 
23
- name = task_instance::NAME
31
+ task_obj["options"] = task_instance.default_options
32
+
33
+ name = task_instance.name
24
34
 
25
35
  @task_list[name] = task_obj
26
36
  end
@@ -53,7 +63,7 @@ module PetitFelix
53
63
  name = "[UNDEFINED]"
54
64
  end
55
65
 
56
- err_no_task_found name, additional_text: "Unable to get options for Worker " + name + ":\n"
66
+ err_no_task_found name, additional_text: "Unable to get options for Task " + name + ":\n"
57
67
  end
58
68
 
59
69
  return nil
@@ -61,7 +71,7 @@ module PetitFelix
61
71
 
62
72
  # No task found error
63
73
  def err_no_task_found task, additional_text: ""
64
- text = "Worker " + task.downcase + " not found. Make sure the variable \"worker\" is set correctly in your configuration settings. Available Workers: "
74
+ text = "Task " + task.downcase + " not found. Make sure the variable \"task\" is set correctly in your configuration settings. Available Tasks: "
65
75
 
66
76
  @task_list.keys.each do |key|
67
77
  text += "\n " + key
data/lib/petit-felix.rb CHANGED
@@ -10,7 +10,7 @@ module PetitFelix
10
10
  # cl_args - command line arguments passed from CLI
11
11
  # options - hash passed by developer containing default rendering options
12
12
  def initialize(cl_args: [], options: {})
13
-
13
+
14
14
  # Creates a new worker manager, which has all the worker stuff
15
15
  wm = PetitFelix::TaskManager.new
16
16
 
@@ -0,0 +1,191 @@
1
+ require "task/default_task"
2
+ require "worker/basic_pdf_writer_classic"
3
+
4
+ module PetitFelix
5
+
6
+ module Task
7
+
8
+ class BasicPDFTask < PetitFelix::Task::DefaultTask
9
+
10
+ def self.name
11
+ "basic-pdf-classic"
12
+ end
13
+
14
+ ## Default options of the application
15
+ def self.default_options
16
+ return {
17
+ "columns" => 1,
18
+ "default_font_size" => 12,
19
+ "header1_size" => 32,
20
+ "header2_size" => 28,
21
+ "header3_size" => 20,
22
+ "header4_size" => 18,
23
+ "header5_size" => 16,
24
+ "header6_size" => 14,
25
+ "quote_size" => 14,
26
+ "margin" => 40,
27
+ "font_normal" => "./assets/font/Unageo-Regular.ttf",
28
+ "font_italic"=> "./assets/font/Unageo-Regular-Italic.ttf",
29
+ "font_bold"=> "./assets/font/Unageo-ExtraBold.ttf",
30
+ "font_bold_italic" => "./assets/font/Unageo-ExtraBold-Italic.ttf",
31
+ "paginator_start_count" => 1,
32
+ "paginator_start" => 1,
33
+ "paginator" => true,
34
+ "paginator_alternate" => false,
35
+ "back_text" => "",
36
+ "back_text_margin" => 0,
37
+ "back_text_size" => 14,
38
+ "front_title_size"=> 32,
39
+ "front_author_size" => 18,
40
+ "front_date_size" => 14,
41
+ "back_publisher" => "",
42
+ "back_publisher_size" => 14,
43
+ "front_publisher" => "",
44
+ "front_publisher_size" => 14,
45
+ "paginator_size" => 12,
46
+ "back_author" => "",
47
+ "back_author_size" => 16,
48
+ }
49
+ end
50
+
51
+ def render_zine
52
+
53
+ page = File.read(options["filename"])
54
+
55
+ # splits the page into parts for metadata and content
56
+
57
+ # Felix metadata handler
58
+ metadata_helper = PetitFelix::Metadata.new
59
+
60
+ page_data = metadata_helper.split page
61
+
62
+ @metadata = metadata_helper.get_metadata page_data[0]
63
+
64
+ @content = page_data[1]
65
+
66
+ prepare_options options
67
+
68
+ # Only continue if metadata has a title
69
+
70
+ if @metadata.key?("title")
71
+
72
+ # Parameters
73
+
74
+ page_layout = :portrait
75
+ print_scaling = :none
76
+
77
+ if @metaoptions.key?("page_layout")
78
+ page_layout = @metaoptions["page_layout"]
79
+
80
+ if page_layout.is_a? String
81
+ if page_layout.include?("portrait")
82
+ page_layout = :portrait
83
+ else
84
+ if page_layout.include?("landscape")
85
+ page_layout = :landscape
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ # Generates PDF
92
+
93
+ pdf = PetitFelix::Worker::BasicPDFWriter.new(
94
+ page_layout: page_layout,
95
+ print_scaling: print_scaling)
96
+
97
+
98
+ pdf.set_options @metaoptions
99
+
100
+ # Adds extra fonts
101
+
102
+ pdf.initialize_font
103
+
104
+ # Title page generation
105
+
106
+ pdf.title_page
107
+
108
+ # Does the main content
109
+ pdf.main_block @content
110
+
111
+ # Does page numbering
112
+ pdf.page_numbering
113
+
114
+ pdf.go_to_page pdf.page_count
115
+
116
+ # Back page generation
117
+ pdf.back_page
118
+
119
+ # Outputs to file
120
+ pdf.output
121
+
122
+ end
123
+ end
124
+
125
+ def prepare_options options
126
+
127
+ # stores options + metadata. metadata overrides options.
128
+ @metaoptions = {}
129
+
130
+ options.keys.each do |key|
131
+ @metaoptions[key] = options[key]
132
+ end
133
+
134
+ @metadata.keys.each do |key|
135
+ @metaoptions[key] = @metadata[key]
136
+ end
137
+
138
+ # Loads proper values from strings for certain params
139
+ page_layout = :portrait
140
+ print_scaling = :none
141
+
142
+ if @metaoptions.key?("page_layout")
143
+ page_layout = @metaoptions["page_layout"]
144
+
145
+ if page_layout.is_a? String
146
+ if page_layout.include?("portrait")
147
+ @metaoptions["page_layout"] = :portrait
148
+ else
149
+ if page_layout.include?("landscape")
150
+ @metaoptions["page_layout"] = :landscape
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+ end
157
+
158
+ def render_files options
159
+ if options.key?("input_files")
160
+ site_list = options["input_files"].split(",")
161
+ end
162
+
163
+ site_list.each do |page|
164
+
165
+ file_list = Dir[page.strip].select { |path| File.file?(path) }
166
+
167
+ if !file_list.empty?
168
+
169
+ file_list.each do |file|
170
+ options["filename"] = file.strip
171
+
172
+ if File.file?(options["filename"])
173
+ render_zine
174
+ end
175
+
176
+ end
177
+
178
+ else
179
+ if File.file?(page)
180
+ render_zine(page)
181
+ end
182
+ end
183
+ end
184
+
185
+ end
186
+
187
+ end
188
+
189
+ end
190
+
191
+ end
@@ -1,18 +1,49 @@
1
+ require "felix/metadata"
2
+
1
3
  module PetitFelix
2
4
 
3
5
  module Task
4
6
 
5
7
  class DefaultTask
6
8
 
7
- def render_zine options
9
+ def self.name
10
+ ""
11
+ end
12
+
13
+ ## Default options of the application
14
+ def self.default_options
15
+ return {}
16
+ end
17
+
18
+ def prepare_options options
19
+
20
+ # stores options + metadata. metadata overrides options.
21
+ @metaoptions = {}
22
+
23
+ options.keys.each do |key|
24
+ @metaoptions[key] = options[key]
25
+ end
26
+
27
+ # Loads proper values from strings for certain params
28
+ page_layout = :portrait
29
+ print_scaling = :none
30
+
31
+ if @metaoptions.key?("page_layout")
32
+ page_layout = @metaoptions["page_layout"].to_sym
33
+ end
34
+
35
+ end
36
+
37
+ def render_zine
8
38
  print "render_zine() not implemented\n"
9
39
  end
10
40
 
11
41
  def render_files options
42
+
12
43
  if options.key?("input_files")
13
44
  site_list = options["input_files"].split(",")
14
45
  end
15
-
46
+
16
47
  site_list.each do |page|
17
48
 
18
49
  file_list = Dir[page.strip].select { |path| File.file?(path) }
@@ -23,7 +54,8 @@ module PetitFelix
23
54
  options["filename"] = file.strip
24
55
 
25
56
  if File.file?(options["filename"])
26
- render_zine(options)
57
+ prepare_options options
58
+ render_zine
27
59
  end
28
60
 
29
61
  end
@@ -0,0 +1,69 @@
1
+ require "task/template_pdf_task"
2
+ require "worker/template_pdf_writer"
3
+
4
+ module PetitFelix
5
+
6
+ module Task
7
+
8
+ class SinglePDFTask < PetitFelix::Task::DefaultTask
9
+
10
+ def self.name
11
+ "pdf-single"
12
+ end
13
+
14
+ ## Default options of the application
15
+ def self.default_options
16
+ return {
17
+ "pdf" => "false"
18
+ }
19
+ end
20
+
21
+ def render_zine
22
+
23
+ # Only continue if metadata has a title
24
+ # Generates PDF
25
+
26
+ page = File.read(@metaoptions["filename"])
27
+
28
+ # splits the page into parts for metadata and content
29
+
30
+ # Felix metadata handler
31
+ metadata_helper = PetitFelix::Metadata.new
32
+
33
+ page_data = metadata_helper.split page
34
+
35
+ metadata = @metaoptions.merge(metadata_helper.get_metadata(page_data[0]))
36
+
37
+ # Always forces you to use this template
38
+ @metaoptions["template"] = File.dirname(__FILE__) + "/../../templates/zine-single.json"
39
+
40
+ if metadata.key?("pdf") && metadata["pdf"] == "true"
41
+
42
+ pdf = PetitFelix::Worker::TemplatePDFWriter.new(
43
+ page_layout: @metaoptions["page_layout"],
44
+ print_scaling: @metaoptions["print_scaling"])
45
+
46
+ @metaoptions["output_file"] = File.basename(File.basename(@metaoptions["filename"], ".md"), ".markdown") + ".pdf"
47
+
48
+ pdf.set_options @metaoptions
49
+
50
+ pdf.init_values @metaoptions, pdf
51
+
52
+ pdf.read_template
53
+
54
+ # Adds extra fonts
55
+ #pdf.initialize_font
56
+
57
+ # Outputs to file
58
+ pdf.output
59
+
60
+ end
61
+
62
+ end
63
+
64
+
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,50 @@
1
+ require "task/default_task"
2
+ require "worker/template_pdf_writer"
3
+
4
+ module PetitFelix
5
+
6
+ module Task
7
+
8
+ class TemplatePDFTask < PetitFelix::Task::DefaultTask
9
+
10
+ def self.name
11
+ "template-pdf"
12
+ end
13
+
14
+ ## Default options of the application
15
+ def self.default_options
16
+ return {
17
+ "template" => "./templates/test.json",
18
+ "output_file" => "./output/test.pdf"
19
+ }
20
+ end
21
+
22
+ def render_zine
23
+
24
+ # Only continue if metadata has a title
25
+ # Generates PDF
26
+
27
+ pdf = PetitFelix::Worker::TemplatePDFWriter.new(
28
+ page_layout: @metaoptions["page_layout"],
29
+ print_scaling: @metaoptions["print_scaling"])
30
+
31
+ pdf.set_options @metaoptions
32
+
33
+ pdf.init_values @metaoptions, pdf
34
+
35
+ pdf.read_template
36
+
37
+ # Adds extra fonts
38
+ #pdf.initialize_font
39
+
40
+ # Outputs to file
41
+ pdf.output
42
+
43
+ end
44
+
45
+
46
+ end
47
+
48
+ end
49
+
50
+ end
data/lib/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module PetitFelix
4
4
  module Felix
5
- VERSION = "0.1.3"
5
+ VERSION = "0.1.5"
6
6
  end
7
7
  end