Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Concatenate left-to-right (LTR) and right-to-left (RTL) text

It seems that combining left-to-right (LTR) and right-to-left (RTL) text using paste can produce unexpected results for the resulting order:

(x = paste(c('green', 'أحمر', 'أزرق'), collapse=' ')) # arabic for blue and red
#> [1] "green أحمر أزرق"
paste(x, 'yellow')
#> [1] "green أحمر أزرق yellow"
paste(x, 123)
#> [1] "green أحمر أزرق 123"

Is there any known solution to this - i.e. a way to ensure concatenation in the same sequence as the arguments are given? Perhaps the answer is don't concatenate different alphabets!

like image 970
geotheory Avatar asked Jul 14 '17 15:07

geotheory


1 Answers

You may use the Unicode control characters 'left-to-right embedding', u202A ("Treat the following text as embedded left-to-right"):

paste(x, "\u202A", 123)
# [1] "green أحمر أزرق ‭ 123"

See also Terminating Explicit Directional Embeddings and Overrides, (u202C), a thorough description on UNICODE BIDIRECTIONAL ALGORITHM, and here.

like image 129
Henrik Avatar answered Nov 06 '22 09:11

Henrik