prawn_hebrew 0.0.7 → 0.1.0

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 +46 -25
  3. data/lib/version.rb +2 -2
  4. metadata +25 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d1ef260d0ff7646b39769526d9c62e7b218213c0984566510a98255d9457939
4
- data.tar.gz: 9ed590c393eeb60137e41a0d2f354513f001f07049d27964c2708acd8c0aa437
3
+ metadata.gz: d3650342bfc589db1e29d35c63fbb20a5964c27e2e3ce0e8bc75cff0b94999db
4
+ data.tar.gz: fa25fcaf654e29ef4a3a1c8ed2055a7dd018f8318119e84d5060ead6746732d2
5
5
  SHA512:
6
- metadata.gz: ad3ab20f48d5d3240b53772ef58da9753ea42f1efa30fba7bee40dcfe23ad1988d4d913160385a7f09097eeae45710d2cb6ef85278586e060bfea2c3aa709539
7
- data.tar.gz: 83933c5108021e9c0d3c8b3c483220ab31640401b49af8332803bfac48d184ac0612251ef8c5638dc8f0620ec99c50fa6a31d8ab291860dafea4bd4943fd80c2
6
+ metadata.gz: cfe833774d37d4bf5e55e69a7b5907b98eba38bc3985b6a645353a5900bf923f9d8d6f7148d8f840645f29c8b171047b85bca64edc4c88fc323c4c3b0a98f065
7
+ data.tar.gz: f84b3caaaea673b4c2463b21ed69607c651b8ceef9a9c055848f339c0e3d87a2903f87a0424c220df23ddfbab36491b94e8bf92532407288d9fe088f1fb4bac3
data/lib/prawn_hebrew.rb CHANGED
@@ -8,42 +8,62 @@ module PrawnHebrew
8
8
 
9
9
  # Set to true for debugging which text rendering path is used
10
10
  DEBUG_MODE = false
11
+ INVISIBLE_CHARS = /[\u200B\u200C\u200D\u200E\u200F\uFEFF\u00AD\u202A\u202B\u202C\u202D\u202E]/.freeze
12
+ NBSP_CHARS = /[\u00A0\u202F]/.freeze
13
+
14
+ def sanitize_text(text)
15
+ return text if text.nil?
16
+ text.to_s.gsub(INVISIBLE_CHARS, '').gsub(NBSP_CHARS, ' ')
17
+ end
11
18
 
12
19
  def hebrew_formatted_text(text, size: 12, style: :normal, hebrew_font: DEFAULT_HEBREW_FONT, english_font: DEFAULT_ENGLISH_FONT)
13
- words = text.to_s.split(/(\s+|\n)/)
14
- hebrew_run = []
15
- fragments = []
20
+ text = sanitize_text(text)
21
+
22
+ # Split by newlines first to process each line independently
23
+ lines = text.to_s.split("\n")
24
+ all_fragments = []
16
25
 
17
26
  styles = style.is_a?(Array) ? style : [style].compact
27
+
28
+ lines.each_with_index do |line, line_idx|
29
+ words = line.split(/(\s+)/)
30
+ hebrew_run = []
31
+
32
+ words.each do |word|
33
+ if word.strip.empty?
34
+ all_fragments << { text: word, font: english_font, size: size, styles: styles } if word != ' '
35
+ next
36
+ end
18
37
 
19
- words.each do |word|
20
- if word.strip.empty?
21
- fragments << { text: word, font: english_font, size: size, styles: styles } if word != ' '
22
- next
23
- end
24
-
25
- if word =~ /\p{Hebrew}/
26
- hebrew_run << word
27
- else
28
- unless hebrew_run.empty?
29
- hebrew_run.reverse.each_with_index do |hw, idx|
30
- fragments << { text: hw, font: hebrew_font, size: size, direction: :rtl, styles: styles }
31
- fragments << { text: ' ', font: hebrew_font, size: size, direction: :rtl, styles: styles } if idx < hebrew_run.length - 1
38
+ if word =~ /\p{Hebrew}/
39
+ hebrew_run << word
40
+ else
41
+ unless hebrew_run.empty?
42
+ hebrew_run.reverse.each_with_index do |hw, idx|
43
+ all_fragments << { text: hw, font: hebrew_font, size: size, direction: :rtl, styles: styles }
44
+ all_fragments << { text: ' ', font: hebrew_font, size: size, direction: :rtl, styles: styles } if idx < hebrew_run.length - 1
45
+ end
46
+ all_fragments << { text: ' ' }
47
+ hebrew_run.clear
32
48
  end
33
- fragments << { text: ' ' }
34
- hebrew_run.clear
49
+ all_fragments << { text: "#{word} ", font: english_font, size: size, styles: styles }
35
50
  end
36
- fragments << { text: "#{word} ", font: english_font, size: size, styles: styles }
37
51
  end
38
- end
39
52
 
40
- unless hebrew_run.empty?
41
- hebrew_run.reverse.each_with_index do |hw, idx|
42
- fragments << { text: hw, font: hebrew_font, size: size, direction: :rtl, styles: styles }
43
- fragments << { text: ' ', font: hebrew_font, size: size, direction: :rtl, styles: styles } if idx < hebrew_run.length - 1
53
+ unless hebrew_run.empty?
54
+ hebrew_run.reverse.each_with_index do |hw, idx|
55
+ all_fragments << { text: hw, font: hebrew_font, size: size, direction: :rtl, styles: styles }
56
+ all_fragments << { text: ' ', font: hebrew_font, size: size, direction: :rtl, styles: styles } if idx < hebrew_run.length - 1
57
+ end
58
+ end
59
+
60
+ # Add newline between lines (except after the last line)
61
+ if line_idx < lines.length - 1
62
+ all_fragments << { text: "\n", font: english_font, size: size, styles: styles }
44
63
  end
45
64
  end
46
- fragments
65
+
66
+ all_fragments
47
67
  end
48
68
 
49
69
  def hebrew_text_box(text, size: 12, style: :normal,
@@ -108,6 +128,7 @@ module PrawnHebrew
108
128
  # Add leading to box_opts if specified
109
129
  box_opts[:leading] = leading if leading > 0
110
130
 
131
+ # Don't set direction or alignment - let the reversed fragments handle it
111
132
  formatted_text_box(fragments, box_opts)
112
133
  end
113
134
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module PrawnHebrew
2
- VERSION = "0.0.7"
1
+ module PrawnHebrew
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,27 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prawn_hebrew
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Ben Lite
7
+ - Benlite95
8
8
  bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies: []
12
- description: Working with hebrew words in prawn
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: prawn
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.4'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.4'
26
+ description: Add Hebrew and bidirectional text support to Prawn PDF library
13
27
  email:
14
- - benlite96@gmail.com
28
+ - your-email@example.com
15
29
  executables: []
16
30
  extensions: []
17
31
  extra_rdoc_files: []
18
32
  files:
19
33
  - lib/prawn_hebrew.rb
20
34
  - lib/version.rb
21
- homepage: https://rubygems.org/gems/prawn_hebrew
35
+ homepage: https://github.com/Benlite95/prawn_hebrew2
22
36
  licenses:
23
37
  - MIT
24
- metadata: {}
38
+ metadata:
39
+ homepage_uri: https://github.com/Benlite95/prawn_hebrew2
40
+ source_code_uri: https://github.com/Benlite95/prawn_hebrew2
25
41
  rdoc_options: []
26
42
  require_paths:
27
43
  - lib
@@ -29,7 +45,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
29
45
  requirements:
30
46
  - - ">="
31
47
  - !ruby/object:Gem::Version
32
- version: '0'
48
+ version: 2.6.0
33
49
  required_rubygems_version: !ruby/object:Gem::Requirement
34
50
  requirements:
35
51
  - - ">="
@@ -38,5 +54,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
38
54
  requirements: []
39
55
  rubygems_version: 3.6.7
40
56
  specification_version: 4
41
- summary: Hebrew Text in Prawn
57
+ summary: Hebrew text support for Prawn PDF
42
58
  test_files: []