rtl_that_string 0.1.0 → 0.2.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/Rakefile +1 -0
- data/lib/rtl_that_string/rtl_that_string.rb +90 -0
- data/lib/rtl_that_string/version.rb +1 -1
- data/lib/rtl_that_string.rb +2 -4
- data/rtl_that_string.gemspec +1 -0
- metadata +17 -5
- data/lib/rtl_that_string/base.rb +0 -80
- data/lib/rtl_that_string/safe_buffer.rb +0 -25
- data/lib/rtl_that_string/string.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37d8425c91b11b96fac7e448aaef45b07c954639
|
4
|
+
data.tar.gz: 4061e2e831cd68a9395a87fde0d22bba1a23186a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a999b66c40e1cedd1b0e98c9e46a871044487bfcdd703e043cb1e41bedcb1a0560310442bcf39ae4fc6d9bc9e972c8b5673e690464338a15d263f16ed671a73a
|
7
|
+
data.tar.gz: 763937007cf71f84ec3fdaee731de28fa86e72e1ea48108dc263d66cd36c9b71d4444945e86a4e7fb2088ee67c8087ecc919a5aea9319ac9c0b3f1664dddb276
|
data/Rakefile
CHANGED
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'string-direction'
|
2
|
+
|
3
|
+
module RtlThatString
|
4
|
+
# String borders
|
5
|
+
# http://www.w3.org/International/questions/qa-bidi-unicode-controls#pairedcontrols
|
6
|
+
RTL_MARK = "\u202F".freeze # RIGHT-TO-LEFT MARK
|
7
|
+
LTR_MARK = "\u202E".freeze # LEFT-TO-RIGHT MARK
|
8
|
+
BIDI_START = "\u202B".freeze # RIGHT-TO-LEFT EMBEDDING (RLE)
|
9
|
+
BIDI_END = "\u202C".freeze # POP DIRECTIONAL FORMATTING (PDF)
|
10
|
+
|
11
|
+
# Html wrapping tags
|
12
|
+
# http://www.w3.org/International/questions/qa-bidi-unicode-controls#correspondance
|
13
|
+
BDO_OPEN = '<bdo dir="rtl">'.freeze
|
14
|
+
BDO_CLOSE = '</bdo>'.freeze
|
15
|
+
BDE_OPEN = '<bde dir="rtl">'.freeze
|
16
|
+
BDE_CLOSE = '</bde>'.freeze
|
17
|
+
|
18
|
+
STRIP_TAGS_REGEX = /<.*?>/.freeze # Strip any html tag, with or without attributes
|
19
|
+
|
20
|
+
# Wrap plain text or html in direction control unicode characters or tags
|
21
|
+
#
|
22
|
+
# If the string is detected as all RTL characters it will be bordered with
|
23
|
+
# directional override characters. If it has mixed RTL and LTR it will get
|
24
|
+
# wrapped with bi-directional override characters.
|
25
|
+
#
|
26
|
+
# If the `html: true` option is passed the string will get wrapped in either
|
27
|
+
# a <bdo></bdo> or <bde></bde> tag.
|
28
|
+
def with_rtl(options = {})
|
29
|
+
return with_rtl_html(options) if options.delete(:html)
|
30
|
+
|
31
|
+
case direction
|
32
|
+
when StringDirection::RTL
|
33
|
+
rtl_string_borders
|
34
|
+
when StringDirection::BIDI
|
35
|
+
majority_rtl? ? bidi_string_borders : self
|
36
|
+
else
|
37
|
+
self
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Modifies self with the result from `with_rtl`
|
42
|
+
def with_rtl!(options = {})
|
43
|
+
self.replace with_rtl(options)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Evaluate the direction of text in an HTML blob by first removing the HTML
|
47
|
+
# tags, then checking the plain text, then returning a wrapped blob of HTML
|
48
|
+
def with_rtl_html(options = {})
|
49
|
+
plain_text = self.gsub(STRIP_TAGS_REGEX, '')
|
50
|
+
|
51
|
+
case plain_text.direction
|
52
|
+
when StringDirection::RTL
|
53
|
+
rtl_html_borders
|
54
|
+
when StringDirection::BIDI
|
55
|
+
plain_text.majority_rtl? ? bidi_html_borders : self
|
56
|
+
else
|
57
|
+
self
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
def majority_rtl?
|
64
|
+
dir_counts = split(' ').each_with_object({}) do |token, h|
|
65
|
+
dir = token.direction
|
66
|
+
h[dir] ||= 1
|
67
|
+
h[dir] += 1
|
68
|
+
end
|
69
|
+
|
70
|
+
dir_counts[StringDirection::RTL] > dir_counts[StringDirection::LTR]
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def rtl_string_borders
|
76
|
+
prepend(RTL_MARK).concat(LTR_MARK)
|
77
|
+
end
|
78
|
+
|
79
|
+
def bidi_string_borders
|
80
|
+
prepend(BIDI_START).concat(BIDI_END)
|
81
|
+
end
|
82
|
+
|
83
|
+
def rtl_html_borders
|
84
|
+
prepend(BDO_OPEN).concat(BDO_CLOSE)
|
85
|
+
end
|
86
|
+
|
87
|
+
def bidi_html_borders
|
88
|
+
prepend(BDE_OPEN).concat(BDE_CLOSE)
|
89
|
+
end
|
90
|
+
end
|
data/lib/rtl_that_string.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
require 'rtl_that_string/version'
|
2
|
-
require 'rtl_that_string/
|
3
|
-
require 'rtl_that_string/safe_buffer' if defined?(ActiveSupport)
|
2
|
+
require 'rtl_that_string/rtl_that_string'
|
4
3
|
|
5
|
-
String.send :include, RtlThatString
|
6
|
-
ActiveSupport::SafeBuffer.send :include, RtlThatString::SafeBuffer if defined?(ActiveSupport)
|
4
|
+
String.send :include, RtlThatString
|
data/rtl_that_string.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rtl_that_string
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Craig Day
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bump
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Small library to wrap text/html in RTL markers/tags
|
56
70
|
email:
|
57
71
|
- cday@zendesk.com
|
@@ -69,9 +83,7 @@ files:
|
|
69
83
|
- bin/console
|
70
84
|
- bin/setup
|
71
85
|
- lib/rtl_that_string.rb
|
72
|
-
- lib/rtl_that_string/
|
73
|
-
- lib/rtl_that_string/safe_buffer.rb
|
74
|
-
- lib/rtl_that_string/string.rb
|
86
|
+
- lib/rtl_that_string/rtl_that_string.rb
|
75
87
|
- lib/rtl_that_string/version.rb
|
76
88
|
- rtl_that_string.gemspec
|
77
89
|
homepage: https://github.com/craig-day/
|
data/lib/rtl_that_string/base.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'string-direction'
|
2
|
-
|
3
|
-
module RtlThatString
|
4
|
-
module Base
|
5
|
-
# String borders
|
6
|
-
# http://www.w3.org/International/questions/qa-bidi-unicode-controls#pairedcontrols
|
7
|
-
RTL_START = "\u202F".freeze # RIGHT-TO-LEFT MARK
|
8
|
-
RTL_END = "\u202E".freeze # LEFT-TO-RIGHT MARK
|
9
|
-
BIDI_START = "\u202B".freeze # RIGHT-TO-LEFT EMBEDDING (RLE)
|
10
|
-
BIDI_END = "\u202C".freeze # POP DIRECTIONAL FORMATTING (PDF)
|
11
|
-
|
12
|
-
# Html wrapping tags
|
13
|
-
# http://www.w3.org/International/questions/qa-bidi-unicode-controls#correspondance
|
14
|
-
BDO_OPEN = '<bdo dir="rtl">'.freeze
|
15
|
-
BDO_CLOSE = '</bdo>'.freeze
|
16
|
-
BDE_OPEN = '<bde dir="rtl">'.freeze
|
17
|
-
BDE_CLOSE = '</bde>'.freeze
|
18
|
-
|
19
|
-
STRIP_TAGS_REGEX = /<.*?>/.freeze # Strip any html tag, with or without attributes
|
20
|
-
|
21
|
-
# Wrap plain text or html in direction control unicode characters or tags
|
22
|
-
#
|
23
|
-
# If the string is detected as all RTL characters it will be bordered with
|
24
|
-
# directional override characters. If it has mixed RTL and LTR it will get
|
25
|
-
# wrapped with bi-directional override characters.
|
26
|
-
#
|
27
|
-
# If the `html: true` option is passed the string will get wrapped in either
|
28
|
-
# a <bdo></bdo> or <bde></bde> tag.
|
29
|
-
def with_rtl(options = {})
|
30
|
-
return with_rtl_html(options) if options.delete(:html)
|
31
|
-
|
32
|
-
case direction
|
33
|
-
when StringDirection::RTL
|
34
|
-
rtl_string_borders
|
35
|
-
when StringDirection::BIDI
|
36
|
-
bidi_string_borders
|
37
|
-
else
|
38
|
-
self
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# Modifies self with the result from `with_rtl`
|
43
|
-
def with_rtl!(options = {})
|
44
|
-
self.replace with_rtl(options)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Evaluate the direction of text in an HTML blob by first removing the HTML
|
48
|
-
# tags, then checking the plain text, then returning a wrapped blob of HTML
|
49
|
-
def with_rtl_html(options = {})
|
50
|
-
plain_text = self.gsub(STRIP_TAGS_REGEX, '')
|
51
|
-
|
52
|
-
case plain_text.direction
|
53
|
-
when StringDirection::RTL
|
54
|
-
rtl_html_borders
|
55
|
-
when StringDirection::BIDI
|
56
|
-
bidi_html_borders
|
57
|
-
else
|
58
|
-
self
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
def rtl_string_borders
|
65
|
-
raise "must be implemented by submodule"
|
66
|
-
end
|
67
|
-
|
68
|
-
def bidi_string_borders
|
69
|
-
raise "must be implemented by submodule"
|
70
|
-
end
|
71
|
-
|
72
|
-
def rtl_html_borders
|
73
|
-
raise "must be implemented by submodule"
|
74
|
-
end
|
75
|
-
|
76
|
-
def bidi_html_borders
|
77
|
-
raise "must be implemented by submodule"
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require_relative './base'
|
2
|
-
|
3
|
-
module RtlThatString
|
4
|
-
module SafeBuffer
|
5
|
-
include RtlThatString::Base
|
6
|
-
|
7
|
-
private
|
8
|
-
|
9
|
-
def rtl_string_borders
|
10
|
-
prepend(RTL_START).concat(RTL_END)
|
11
|
-
end
|
12
|
-
|
13
|
-
def bidi_string_borders
|
14
|
-
prepend(BIDI_START).concat(BIDI_END)
|
15
|
-
end
|
16
|
-
|
17
|
-
def rtl_html_borders
|
18
|
-
prepend(BDO_OPEN).concat(BDO_CLOSE)
|
19
|
-
end
|
20
|
-
|
21
|
-
def bidi_html_borders
|
22
|
-
prepend(BDE_OPEN).concat(BDE_CLOSE)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require_relative './base'
|
2
|
-
|
3
|
-
module RtlThatString
|
4
|
-
module String
|
5
|
-
include RtlThatString::Base
|
6
|
-
|
7
|
-
private
|
8
|
-
|
9
|
-
def rtl_string_borders
|
10
|
-
"#{RTL_START}#{self}#{RTL_END}"
|
11
|
-
end
|
12
|
-
|
13
|
-
def bidi_string_borders
|
14
|
-
"#{BIDI_START}#{self}#{BIDI_END}"
|
15
|
-
end
|
16
|
-
|
17
|
-
def rtl_html_borders
|
18
|
-
"#{BDO_OPEN}#{self}#{BDO_CLOSE}"
|
19
|
-
end
|
20
|
-
|
21
|
-
def bidi_html_borders
|
22
|
-
"#{BDE_OPEN}#{self}#{BDE_CLOSE}"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|