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.
- checksums.yaml +4 -4
- data/lib/prawn_hebrew.rb +46 -25
- data/lib/version.rb +2 -2
- metadata +25 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d3650342bfc589db1e29d35c63fbb20a5964c27e2e3ce0e8bc75cff0b94999db
|
|
4
|
+
data.tar.gz: fa25fcaf654e29ef4a3a1c8ed2055a7dd018f8318119e84d5060ead6746732d2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2
|
-
VERSION = "0.0
|
|
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
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
7
|
+
- Benlite95
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
-
dependencies:
|
|
12
|
-
|
|
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
|
-
-
|
|
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://
|
|
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:
|
|
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
|
|
57
|
+
summary: Hebrew text support for Prawn PDF
|
|
42
58
|
test_files: []
|