From 298c64a1190bf6e4a9ae16961a07045152a6e0d3 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Wed, 10 Jan 2024 10:13:33 +0200 Subject: [PATCH] fix RTL reverse --- Gemfile | 1 + Gemfile.lock | 7 +++++++ config/initializers/twitter_cldr.rb | 19 +++++++++++++++++++ lib/submissions/generate_audit_trail.rb | 4 +++- .../generate_result_attachments.rb | 6 ++++-- 5 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 config/initializers/twitter_cldr.rb diff --git a/Gemfile b/Gemfile index 893e184e..61eae029 100644 --- a/Gemfile +++ b/Gemfile @@ -41,6 +41,7 @@ gem 'sidekiq', require: ENV.key?('REDIS_URL') gem 'sqlite3', require: false gem 'strip_attributes' gem 'turbo-rails' +gem 'twitter_cldr', require: false gem 'tzinfo-data' group :development, :test do diff --git a/Gemfile.lock b/Gemfile.lock index 1e777c0f..66882014 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,6 +125,7 @@ GEM bullet (7.1.4) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) + camertron-eprun (1.1.1) cancancan (3.5.0) capybara (3.39.2) addressable @@ -136,6 +137,7 @@ GEM regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) chunky_png (1.4.0) + cldr-plurals-runtime-rb (1.1.0) cmdparse (3.0.7) coderay (1.1.3) concurrent-ruby (1.2.2) @@ -527,6 +529,10 @@ GEM actionpack (>= 6.0.0) activejob (>= 6.0.0) railties (>= 6.0.0) + twitter_cldr (6.12.0) + camertron-eprun + cldr-plurals-runtime-rb (~> 1.1) + tzinfo tzinfo (2.0.6) concurrent-ruby (~> 1.0) tzinfo-data (1.2023.4) @@ -612,6 +618,7 @@ DEPENDENCIES sqlite3 strip_attributes turbo-rails + twitter_cldr tzinfo-data web-console webmock diff --git a/config/initializers/twitter_cldr.rb b/config/initializers/twitter_cldr.rb new file mode 100644 index 00000000..92d7b8e2 --- /dev/null +++ b/config/initializers/twitter_cldr.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'twitter_cldr/shared/bidi' +require 'twitter_cldr/shared/code_point' +require 'twitter_cldr/resources/loader' + +module TwitterCldr + RESOURCES_DIR = File.join(Gem::Specification.find_by_name('twitter_cldr').gem_dir, 'resources') + + module_function + + def resources + @resources ||= TwitterCldr::Resources::Loader.new + end + + def get_resource(...) + resources.get_resource(...) + end +end diff --git a/lib/submissions/generate_audit_trail.rb b/lib/submissions/generate_audit_trail.rb index 173a0d9e..015ee2a7 100644 --- a/lib/submissions/generate_audit_trail.rb +++ b/lib/submissions/generate_audit_trail.rb @@ -300,7 +300,9 @@ module Submissions def maybe_rtl_reverse(text) if text.match?(RTL_REGEXP) - ArabicLetterConnector.transform(text).reverse + TwitterCldr::Shared::Bidi + .from_string(ArabicLetterConnector.transform(text), direction: :RTL) + .reorder_visually!.to_s else text end diff --git a/lib/submissions/generate_result_attachments.rb b/lib/submissions/generate_result_attachments.rb index 879ed406..3efcf9ca 100644 --- a/lib/submissions/generate_result_attachments.rb +++ b/lib/submissions/generate_result_attachments.rb @@ -13,7 +13,7 @@ module Submissions SIGN_REASON = 'Signed by %s with DocuSeal.co' SIGN_SIGNLE_REASON = 'Digitally signed with DocuSeal.co' - RTL_REGEXP = /\A[\p{Hebrew}\p{Arabic}].*[\p{Hebrew}\p{Arabic}]\z/ + RTL_REGEXP = /[\p{Hebrew}\p{Arabic}]/ TEXT_LEFT_MARGIN = 1 TEXT_TOP_MARGIN = 1 @@ -320,7 +320,9 @@ module Submissions def maybe_rtl_reverse(text) if text.match?(RTL_REGEXP) - ArabicLetterConnector.transform(text).reverse + TwitterCldr::Shared::Bidi + .from_string(ArabicLetterConnector.transform(text), direction: :RTL) + .reorder_visually!.to_s else text end