prawn_hebrew 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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/prawn_hebrew.rb +21 -29
  3. data/lib/version.rb +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c85ea02d489bf50f5f0c8facaab7928485a9042f324a54bfb06cd974708e5324
4
- data.tar.gz: 21a63093c22ffe1baf7c9b646a000138ef05694448315f077642a0e7f72acf43
3
+ metadata.gz: bb9a4a47a50c88ba630e62138ad995627b797d769643e90cb88457eb10b690a6
4
+ data.tar.gz: e0dc4ef750250930ddd517905ae5930032bcc69d43f850106b14a2fa9050fd57
5
5
  SHA512:
6
- metadata.gz: c4ab1e0ce09de9756667400c9b77b43d2f859734056adce3252ffd327af19c1fc97d79ec8c4832c794ef1020a971980e32b9dbd4adf3d4b1960772e06e2edcc7
7
- data.tar.gz: dc6e7cd6daae94a23eb250652dd9d1ec754439e921cd3d0707d2b3060cf6515d1e8859e5e32502e46ba0fdbfc8a55fdf62665a0b9089e4c92871a542ea75c66c
6
+ metadata.gz: c1e2bb75e635bc6a04056fc91517f48eedaa07bdc15c7c74bb5dbfbd5eef4ddb1793a0f3bf2e6cb76af41f71e9411968f31892711aee5068f81132a87871ad5c
7
+ data.tar.gz: b6f983a0f591078eb3efc7f024cc83e0e4694daf3fb2f3f545275efc7c32f772eb227035e09e90952be9b0fde735900a5ed5fb0e0a47db1fda8bff9c9c6b3898
data/lib/prawn_hebrew.rb CHANGED
@@ -160,64 +160,56 @@ module PrawnHebrew
160
160
  char_spacing, leading, min_font_size, rotation, box_opts)
161
161
  min_size = min_font_size || 5
162
162
  current_size = initial_size
163
+ fitting_size = nil
163
164
 
164
- # Try rendering with progressively smaller font sizes until it fits
165
+ # Find the largest font size that fits by testing with dry_run
165
166
  while current_size >= min_size
166
- # Create a copy of box_opts to test rendering
167
- test_opts = box_opts.dup
168
-
169
- # Try rendering at current size
170
167
  fragments = hebrew_formatted_text(text, size: current_size, style: style,
171
168
  hebrew_font: hebrew_font,
172
169
  english_font: english_font)
173
170
 
171
+ test_opts = box_opts.dup
174
172
  test_opts[:leading] = leading if leading > 0
175
173
 
176
- # Test if it fits by attempting to render
177
- success = character_spacing(char_spacing) do
174
+ # Test if it fits without actually rendering
175
+ overflow_text = character_spacing(char_spacing) do
178
176
  if rotation != 0
179
177
  rotate(rotation, origin: test_opts[:at] || [0, 0]) do
180
- result = formatted_text_box(fragments, test_opts.merge(dry_run: true))
181
- result.empty? || result == ""
178
+ formatted_text_box(fragments, test_opts.merge(dry_run: true))
182
179
  end
183
180
  else
184
- result = formatted_text_box(fragments, test_opts.merge(dry_run: true))
185
- result.empty? || result == ""
181
+ formatted_text_box(fragments, test_opts.merge(dry_run: true))
186
182
  end
187
183
  end
188
184
 
189
- # If it fits, render it for real and return
190
- if success
191
- character_spacing(char_spacing) do
192
- if rotation != 0
193
- rotate(rotation, origin: box_opts[:at] || [0, 0]) do
194
- formatted_text_box(fragments, box_opts.merge(leading: leading > 0 ? leading : nil).compact)
195
- end
196
- else
197
- formatted_text_box(fragments, box_opts.merge(leading: leading > 0 ? leading : nil).compact)
198
- end
199
- end
200
- return
185
+ # formatted_text_box returns an array when there's overflow, empty array when it fits
186
+ if overflow_text.is_a?(Array) && overflow_text.empty?
187
+ fitting_size = current_size
188
+ break
201
189
  end
202
190
 
203
191
  # Reduce font size and try again
204
192
  current_size -= 0.5
205
193
  end
206
194
 
207
- # If we've reached min size, render at min size anyway
208
- fragments = hebrew_formatted_text(text, size: min_size, style: style,
195
+ # Use the fitting size, or min_size if nothing fit
196
+ final_size = fitting_size || min_size
197
+
198
+ # Now render once with the final size
199
+ fragments = hebrew_formatted_text(text, size: final_size, style: style,
209
200
  hebrew_font: hebrew_font,
210
201
  english_font: english_font)
211
202
 
212
- box_opts[:leading] = leading if leading > 0
203
+ render_opts = box_opts.dup
204
+ render_opts[:leading] = leading if leading > 0
213
205
 
214
206
  character_spacing(char_spacing) do
215
207
  if rotation != 0
216
- rotate(rotation, origin: box_opts[:at] || [0, 0]) do
217
- formatted_text_box(fragments, box_opts)
208
+ rotate(rotation, origin: render_opts[:at] || [0, 0]) do
209
+ formatted_text_box(fragments, render_opts)
218
210
  end
219
211
  else
220
- formatted_text_box(fragments, box_opts)
212
+ formatted_text_box(fragments, render_opts)
221
213
  end
222
214
  end
223
215
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module PrawnHebrew
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prawn_hebrew
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Lite