Project

General

Profile

Actions

Feature #22238

open

String#tr to take a Hash for multi-character replacements

Feature #22238: String#tr to take a Hash for multi-character replacements
1

Added by byroot (Jean Boussier) 4 days ago. Updated 2 days ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:126356]

Description

This is @matz's counter proposal to [Feature #22229] from the last dev-meeting

matz: I will counter-propose String#tr-with-hash style.

'Hello </script>'.tr(">" => '\u003e', "<" => '\u003c', "&" => '\u0026') # matz: OK

'Hello </script>'.tr("abc" => 'ABC') # should raise an exception
'Hello </script>'.tr("abc" => 'ABC', "ab" => "XY") # should raise an exception

"fée".tr("é" => "€") # it should work

"Hello".tr("l" => "ABC", "o" => "XYZ") #=> "HeABCABCXYZ"

"Hello".gsub(/./m) { hash[$&] || $& } # gsub equivalent

Notes:

  • Hash keys MUST be single characters (but can be multi-byte).
  • Values can be multiple characters.

Related issues 1 (0 open1 closed)

Related to Ruby - Feature #22229: Allow GCI.escapeHTML to take a custom escape tableRejectedActions

Updated by byroot (Jean Boussier) 4 days ago Actions #1

  • Related to Feature #22229: Allow GCI.escapeHTML to take a custom escape table added

Updated by nobu (Nobuyoshi Nakada) 3 days ago 1Actions #2

byroot (Jean Boussier) wrote:

  • Hash keys MUST be single characters (but can be multi-byte).

I think it would be worth to clarify: "character" means "codepoint" here not including combined characters, as well as String#tr does now.

Updated by Anonymous 2 days ago Actions #3

  • Status changed from Open to Closed

Applied in changeset git|9144c914a1a51176d461c06e11bc78723c2c24cb.


Fix GC compaction re-embedding for arrays and strings

Don't re-embed after compaction for these types if they are pinned because if these objects
aren't embedded we want to keep their xmalloc's backing storage intact so that RARRAY_PTR
and RSTRING_PTR don't point to freed memory across a compaction event. If the object is pinned
we want to be able to trust that these pointers can't go stale across an allocation.

Fixes [Bug #22238]

Updated by luke-gru (Luke Gruber) 2 days ago Actions #4 [ruby-core:126367]

  • Status changed from Closed to Open

The commit in the previous message has the wrong Issue ID, it is unrelated.

Actions

Also available in: PDF Atom