idml 0.2.1 → 0.2.2

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: 1b87a74424cdcbf39668b9d617232a939d3d93b5bdc925d9b5ff48a327a2b1f2
4
- data.tar.gz: 3059b9c662c5b979b82989899e0a2048e45b510d96ba4006a1c384ee7688bec1
3
+ metadata.gz: 5f22227bbbc74fdbc901e8e7c8dc23c6f77f4a365cf9fc9c3e78d738d5bfdf04
4
+ data.tar.gz: db2b6f2c4f5f95a392c163388837a1e4a975eee64606a7ab09a801c267160246
5
5
  SHA512:
6
- metadata.gz: 9eabdd81a468d04168b9c5602e3f3c547753430b5e7467c71805f7d74d3e976073ffce7cd85209cbdd2b7f06b83b485c9cc00c070ddbf783e471364accb604e7
7
- data.tar.gz: 88894e18b9f58717958cfbba80021b73a6e3f6b2accdab35993ff82d29312450730d6e255ff906e0c07f61272a63205169cbb75192845080c6226427250aef18
6
+ metadata.gz: 7a0e4ec3b44a84801ec7cf7683643a092a4a41d279e68ef3c31591bfd7b21bdb64056d24e289071184ff0c86bf933bf0b855ddae2a5af7bcbc177104b9033f4e
7
+ data.tar.gz: b1626fc2eb4deaf0ad1f235a15f8ccd34979ea523a6f7d4cbd60408ed82ce26d476c11715073f490127210f57c4f85768171b08d02d280a0c516b82cf00e89ee
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- idml (0.2.1)
4
+ idml (0.2.2)
5
5
  bigdecimal
6
6
  fontisan
7
7
  lutaml-model (~> 0.8.18)
@@ -12,7 +12,7 @@ PATH
12
12
  PATH
13
13
  remote: /Users/mulgogi/src/claricle/pdfrb
14
14
  specs:
15
- pdfrb (0.18.0)
15
+ pdfrb (0.19.0)
16
16
  lutaml-model (>= 0.7.0)
17
17
  thor
18
18
 
@@ -204,7 +204,7 @@ CHECKSUMS
204
204
  ffi (1.17.4-x86_64-linux-gnu) sha256=9d3db14c2eae074b382fa9c083fe95aec6e0a1451da249eab096c34002bc752d
205
205
  ffi (1.17.4-x86_64-linux-musl) sha256=3fdf9888483de005f8ef8d1cf2d3b20d86626af206cbf780f6a6a12439a9c49e
206
206
  fontisan (0.4.45) sha256=2337ca0205f806647b24b8cac57aa34f3769473026ae6f52dc36bde0feed6c62
207
- idml (0.2.1)
207
+ idml (0.2.2)
208
208
  json (2.21.2) sha256=1f1d3b7cf2b3ba1a69beca0bb6db13d5438b80bff3cd54cdaaa620b9b07c1c6a
209
209
  language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
210
210
  lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
@@ -226,7 +226,7 @@ CHECKSUMS
226
226
  paint (2.3.0) sha256=327d623e4038619d5bd99ae5db07973859cd78400c7f0329eea283cef8e83be5
227
227
  parallel (2.1.0) sha256=b35258865c2e31134c5ecb708beaaf6772adf9d5efae28e93e99260877b09356
228
228
  parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
229
- pdfrb (0.18.0)
229
+ pdfrb (0.19.0)
230
230
  prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
231
231
  racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
232
232
  rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
@@ -0,0 +1,23 @@
1
+ # TODO PDF 64: Pipeline optimizations and CLI enhancements
2
+
3
+ ## Status: DONE
4
+
5
+ ## What was implemented
6
+
7
+ 1. **Pipeline SpreadRenderer caching**: `render_spread_pages` creates
8
+ one SpreadRenderer per spread (was one per page). The renderer is
9
+ stateless and can be reused across pages within a spread.
10
+
11
+ 2. **CLI --verbose / -v flag**: Prints progress during rendering:
12
+ - Input and output paths
13
+ - Spread count
14
+ - Goes to stderr (doesn't interfere with stdout piping)
15
+
16
+ 3. **render_options extraction**: CLI's render_options hash extracted
17
+ as a method (DRY).
18
+
19
+ ## Acceptance criteria
20
+
21
+ - [x] SpreadRenderer created once per spread (not per page)
22
+ - [x] CLI --verbose flag prints progress to stderr
23
+ - [x] All tests pass
data/lib/idml/cli.rb CHANGED
@@ -58,7 +58,7 @@ module Idml
58
58
  end
59
59
  end
60
60
 
61
- desc "render PATH [-o OUTPUT] [--pdf-a] [--tagged] [--font-path DIR]",
61
+ desc "render PATH [-o OUTPUT] [--pdf-a] [--tagged] [-v]",
62
62
  "Convert IDML to PDF"
63
63
  method_option :output, aliases: "-o", type: :string, required: true
64
64
  method_option :font_path, type: :array, default: [],
@@ -66,9 +66,12 @@ module Idml
66
66
  method_option :pdf_a, type: :boolean, default: false,
67
67
  desc: "Produce PDF/A-2a compliant output"
68
68
  method_option :tagged, type: :boolean, default: false,
69
- desc: "Produce tagged PDF for accessibility (PDF/UA)"
69
+ desc: "Produce tagged PDF (PDF/UA)"
70
+ method_option :verbose, aliases: "-v", type: :boolean, default: false,
71
+ desc: "Print progress"
70
72
  def render(path)
71
73
  pkg = package(path)
74
+ print_verbose(pkg) if options[:verbose]
72
75
  Idml::Render.render(package: pkg, to: options[:output],
73
76
  **render_options)
74
77
  puts "Wrote #{options[:output]}"
@@ -97,6 +100,11 @@ module Idml
97
100
  }
98
101
  end
99
102
 
103
+ def print_verbose(pkg)
104
+ warn "Rendering to #{options[:output]}"
105
+ warn " #{pkg.spreads.length} spread(s)"
106
+ end
107
+
100
108
  def print_validation_results(results)
101
109
  results.partition(&:ok?).then do |ok, failed|
102
110
  ok.each { |r| puts " OK #{r.part_name}" }
@@ -43,23 +43,27 @@ module Idml
43
43
  font_ref_resolver, font_name)
44
44
  pages = spread.spread.flat_map(&:page)
45
45
  image_refs = collect_images(writer, spread, base_dir, layer_filter)
46
+ renderer = build_renderer(layer_filter, font_ref_resolver, font_name)
46
47
 
47
48
  pages.each do |page|
48
49
  dims = page_dimensions_for(page)
49
50
  canvas = writer.add_page(width: dims[:width], height: dims[:height])
50
- renderer = SpreadRenderer.new(
51
- font_resolver: @font_resolver,
52
- font_ps_name: font_name,
53
- package: @package,
54
- layer_filter: layer_filter,
55
- font_ref_resolver: font_ref_resolver,
56
- )
57
51
  renderer.render(canvas, spread, page_width: dims[:width],
58
52
  page_height: dims[:height],
59
53
  image_refs: image_refs)
60
54
  end
61
55
  end
62
56
 
57
+ def build_renderer(layer_filter, font_ref_resolver, font_name)
58
+ SpreadRenderer.new(
59
+ font_resolver: @font_resolver,
60
+ font_ps_name: font_name,
61
+ package: @package,
62
+ layer_filter: layer_filter,
63
+ font_ref_resolver: font_ref_resolver,
64
+ )
65
+ end
66
+
63
67
  def collect_images(writer, spread, base_dir, layer_filter)
64
68
  refs = []
65
69
  spread.each_page_item do |item|
data/lib/idml/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Idml
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose
@@ -204,6 +204,7 @@ files:
204
204
  - TODO.pdf/61-known-limitations.md
205
205
  - TODO.pdf/62-pdfrb-015-migration.md
206
206
  - TODO.pdf/63-replace-fontmetrics-with-pdfrb.md
207
+ - TODO.pdf/64-pipeline-cli-optimizations.md
207
208
  - TODO.pdf/README.md
208
209
  - exe/idml
209
210
  - idml.gemspec