idml 0.2.5 → 0.2.7
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 +4 -4
- data/Gemfile.lock +2 -2
- data/TODO.pdf/40-font-ps-name-resolution.md +40 -28
- data/TODO.pdf/52-font-subsetting.md +34 -4
- data/TODO.pdf/55-dead-code-deprecation.md +15 -21
- data/TODO.pdf/63-replace-fontmetrics-with-pdfrb.md +60 -18
- data/TODO.pdf/65-pdfrb-019-integration.md +16 -16
- data/TODO.pdf/67-text-rich-multi-run.md +51 -0
- data/TODO.pdf/68-radial-gradient-shadings.md +36 -0
- data/TODO.pdf/69-transparency-blend-modes.md +84 -0
- data/TODO.pdf/70-stroke-styling.md +32 -0
- data/TODO.pdf/71-shared-placement-module.md +41 -0
- data/TODO.pdf/72-stroke-styling.md +55 -0
- data/TODO.pdf/73-gradient-resolver-cleanup.md +48 -0
- data/TODO.pdf/74-renderer-spec-coverage.md +53 -0
- data/lib/idml/elements/graphic_line.rb +10 -0
- data/lib/idml/elements/polygon.rb +10 -0
- data/lib/idml/elements/rectangle.rb +10 -0
- data/lib/idml/elements/text_frame.rb +2 -0
- data/lib/idml/elements/transparency_setting.rb +25 -0
- data/lib/idml/render/blending.rb +60 -0
- data/lib/idml/render/gradient_resolver.rb +10 -102
- data/lib/idml/render/placement.rb +31 -0
- data/lib/idml/render/renderers/graphic_line_renderer.rb +10 -8
- data/lib/idml/render/renderers/polygon_renderer.rb +9 -7
- data/lib/idml/render/renderers/rectangle_renderer.rb +43 -35
- data/lib/idml/render/renderers/table_renderer.rb +1 -1
- data/lib/idml/render/renderers/text_frame_renderer.rb +1 -9
- data/lib/idml/render/stroke_style.rb +97 -0
- data/lib/idml/render.rb +3 -0
- data/lib/idml/version.rb +1 -1
- metadata +12 -1
|
@@ -43,15 +43,7 @@ module Idml
|
|
|
43
43
|
private_class_method :chain_head?
|
|
44
44
|
|
|
45
45
|
def self.frame_box(frame, page_height)
|
|
46
|
-
|
|
47
|
-
unless bounds
|
|
48
|
-
return { x: 72.0, y: page_height - 72.0, width: 400.0,
|
|
49
|
-
height: 600.0 }
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
transform = Geometry.parse_transform(frame.item_transform)
|
|
53
|
-
transformed = Geometry.transform_bounds(bounds, transform)
|
|
54
|
-
Geometry.bounds_to_pdf_rect(transformed, page_height)
|
|
46
|
+
Placement.box(frame, page_height, fallback: true)
|
|
55
47
|
end
|
|
56
48
|
private_class_method :frame_box
|
|
57
49
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Idml
|
|
4
|
+
module Render
|
|
5
|
+
# Maps IDML stroke-style attributes on a page item to the four
|
|
6
|
+
# pdfrb Canvas setters that control PDF stroke rendering:
|
|
7
|
+
# `line_cap=`, `line_join=`, `miter_limit=`, `dash_pattern=`.
|
|
8
|
+
#
|
|
9
|
+
# IDML → PDF enum mapping per PDF 32000-1 §8.4.3:
|
|
10
|
+
#
|
|
11
|
+
# EndCap → LineCap
|
|
12
|
+
# ButtEndCap → 0
|
|
13
|
+
# RoundEndCap → 1
|
|
14
|
+
# ProjectingEndCap → 2
|
|
15
|
+
#
|
|
16
|
+
# EndJoin → LineJoin
|
|
17
|
+
# MiterEndJoin → 0
|
|
18
|
+
# RoundEndJoin → 1
|
|
19
|
+
# BevelEndJoin → 2
|
|
20
|
+
#
|
|
21
|
+
# `StrokeDashAndGap` is a flat list `[d1, g1, d2, g2, ...]` — pdfrb
|
|
22
|
+
# accepts the same shape as `dash_pattern=[array, phase]`.
|
|
23
|
+
module StrokeStyle
|
|
24
|
+
CAP_MAP = {
|
|
25
|
+
"ButtEndCap" => 0,
|
|
26
|
+
"RoundEndCap" => 1,
|
|
27
|
+
"ProjectingEndCap" => 2,
|
|
28
|
+
}.freeze
|
|
29
|
+
|
|
30
|
+
JOIN_MAP = {
|
|
31
|
+
"MiterEndJoin" => 0,
|
|
32
|
+
"RoundEndJoin" => 1,
|
|
33
|
+
"BevelEndJoin" => 2,
|
|
34
|
+
}.freeze
|
|
35
|
+
|
|
36
|
+
# True when the item has a renderable stroke: a non-None stroke
|
|
37
|
+
# color and a positive stroke weight.
|
|
38
|
+
def self.strokeable?(item)
|
|
39
|
+
!!(item.stroke_color &&
|
|
40
|
+
item.stroke_color != "Color/None" &&
|
|
41
|
+
item.stroke_weight&.positive?)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Apply stroke-style settings from `item` to `canvas` inside a
|
|
45
|
+
# saved graphics state, then yield so the caller can emit the
|
|
46
|
+
# path and call `canvas.stroke`. The save/restore ensures
|
|
47
|
+
# cap/join/miter/dash settings don't bleed into subsequent
|
|
48
|
+
# strokes on the same page.
|
|
49
|
+
def self.apply(canvas, item)
|
|
50
|
+
canvas.save_graphics_state do
|
|
51
|
+
set_cap(canvas, item.end_cap)
|
|
52
|
+
set_join(canvas, item.end_join)
|
|
53
|
+
set_miter(canvas, item.miter_limit)
|
|
54
|
+
set_dash(canvas, item.stroke_dash_and_gap)
|
|
55
|
+
yield
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.set_cap(canvas, raw)
|
|
60
|
+
code = CAP_MAP[raw]
|
|
61
|
+
canvas.line_cap = code if code
|
|
62
|
+
end
|
|
63
|
+
private_class_method :set_cap
|
|
64
|
+
|
|
65
|
+
def self.set_join(canvas, raw)
|
|
66
|
+
code = JOIN_MAP[raw]
|
|
67
|
+
canvas.line_join = code if code
|
|
68
|
+
end
|
|
69
|
+
private_class_method :set_join
|
|
70
|
+
|
|
71
|
+
def self.set_miter(canvas, raw)
|
|
72
|
+
return unless raw
|
|
73
|
+
|
|
74
|
+
value = raw.to_f
|
|
75
|
+
return unless value >= 1.0
|
|
76
|
+
|
|
77
|
+
canvas.miter_limit = value
|
|
78
|
+
end
|
|
79
|
+
private_class_method :set_miter
|
|
80
|
+
|
|
81
|
+
def self.set_dash(canvas, raw)
|
|
82
|
+
return unless raw
|
|
83
|
+
|
|
84
|
+
array = parse_dash_array(raw)
|
|
85
|
+
return unless array.length >= 2
|
|
86
|
+
|
|
87
|
+
canvas.dash_pattern = [array, 0]
|
|
88
|
+
end
|
|
89
|
+
private_class_method :set_dash
|
|
90
|
+
|
|
91
|
+
def self.parse_dash_array(raw)
|
|
92
|
+
raw.to_s.split(/\s+/).map(&:to_f)
|
|
93
|
+
end
|
|
94
|
+
private_class_method :parse_dash_array
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
data/lib/idml/render.rb
CHANGED
|
@@ -11,7 +11,10 @@ module Idml
|
|
|
11
11
|
autoload :FontReferenceResolver,
|
|
12
12
|
"#{__dir__}/render/font_reference_resolver"
|
|
13
13
|
autoload :GradientResolver, "#{__dir__}/render/gradient_resolver"
|
|
14
|
+
autoload :Blending, "#{__dir__}/render/blending"
|
|
15
|
+
autoload :StrokeStyle, "#{__dir__}/render/stroke_style"
|
|
14
16
|
autoload :LayerFilter, "#{__dir__}/render/layer_filter"
|
|
17
|
+
autoload :Placement, "#{__dir__}/render/placement"
|
|
15
18
|
autoload :StoryThreader, "#{__dir__}/render/story_threader"
|
|
16
19
|
autoload :PdfrbWriter, "#{__dir__}/render/pdfrb_writer"
|
|
17
20
|
autoload :SpreadRenderer, "#{__dir__}/render/spread_renderer"
|
data/lib/idml/version.rb
CHANGED
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.
|
|
4
|
+
version: 0.2.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose
|
|
@@ -207,6 +207,14 @@ files:
|
|
|
207
207
|
- TODO.pdf/64-pipeline-cli-optimizations.md
|
|
208
208
|
- TODO.pdf/65-pdfrb-019-integration.md
|
|
209
209
|
- TODO.pdf/66-gradient-shadings-pdfrb.md
|
|
210
|
+
- TODO.pdf/67-text-rich-multi-run.md
|
|
211
|
+
- TODO.pdf/68-radial-gradient-shadings.md
|
|
212
|
+
- TODO.pdf/69-transparency-blend-modes.md
|
|
213
|
+
- TODO.pdf/70-stroke-styling.md
|
|
214
|
+
- TODO.pdf/71-shared-placement-module.md
|
|
215
|
+
- TODO.pdf/72-stroke-styling.md
|
|
216
|
+
- TODO.pdf/73-gradient-resolver-cleanup.md
|
|
217
|
+
- TODO.pdf/74-renderer-spec-coverage.md
|
|
210
218
|
- TODO.pdf/README.md
|
|
211
219
|
- exe/idml
|
|
212
220
|
- idml.gemspec
|
|
@@ -371,6 +379,7 @@ files:
|
|
|
371
379
|
- lib/idml/parts/style_mapping.rb
|
|
372
380
|
- lib/idml/parts/tags.rb
|
|
373
381
|
- lib/idml/render.rb
|
|
382
|
+
- lib/idml/render/blending.rb
|
|
374
383
|
- lib/idml/render/color_helper.rb
|
|
375
384
|
- lib/idml/render/color_resolver.rb
|
|
376
385
|
- lib/idml/render/font_reference_resolver.rb
|
|
@@ -380,6 +389,7 @@ files:
|
|
|
380
389
|
- lib/idml/render/page_item_renderer.rb
|
|
381
390
|
- lib/idml/render/pdfrb_writer.rb
|
|
382
391
|
- lib/idml/render/pipeline.rb
|
|
392
|
+
- lib/idml/render/placement.rb
|
|
383
393
|
- lib/idml/render/render_context.rb
|
|
384
394
|
- lib/idml/render/renderers.rb
|
|
385
395
|
- lib/idml/render/renderers/graphic_line_renderer.rb
|
|
@@ -390,6 +400,7 @@ files:
|
|
|
390
400
|
- lib/idml/render/renderers/text_frame_renderer.rb
|
|
391
401
|
- lib/idml/render/spread_renderer.rb
|
|
392
402
|
- lib/idml/render/story_threader.rb
|
|
403
|
+
- lib/idml/render/stroke_style.rb
|
|
393
404
|
- lib/idml/render/style_resolver.rb
|
|
394
405
|
- lib/idml/text_engine.rb
|
|
395
406
|
- lib/idml/text_engine/cjk_layout.rb
|