The project is in a healthy, maintained state
An attributed string implementation for Ruby.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

AttributedString

Ruby Gem Version

An attributed string implementation for Ruby.


🚧 This gem is in development, and its behaviour might still change before 1.0 🚧


An attributed string contains key-value pairs known as attributes that specify additional information related to ranges of characters within the string. Attributed strings support any key-value pair, but are often used for:

  • Rendering attributes such as font, color, and other details.
  • Attributes for inline-attachments such as images, videos, files, etc.
  • Semantic attributes such as link URLs or tool-tip information
  • Language attributes to support automatic gender agreement or verb agreement.
  • Accessibility attributes that provide information for assistive technologies
  • Custom attributes you define

You will typically need to create a presenter for an attributed string, as the default shows no attribute information and inspect shows all attributes.

This gem is inspired by Apple's NSAttributedString.

Installation

Add this line to your application's Gemfile:

  gem 'attributed-string'

Usage

  using AttributedString::Refinements
  hello_world1 = AttributedString.new('Hello, World!',  color: :red, font: 'Helvetica' )
  hello_world2 = 'Hello, World!'.to_attr_s(color: :red, font: 'Helvetica')
  puts hello_world1 == hello_world2
  # => true

  hello_world1.add_attrs(0..4, color: :blue)
  hello_world1 += "!!"
  puts hello_world1.inspect
  # => { color: blue, font: "Helvetica" }Hello{ color: red }, World!{ -color, -font }!!

  puts hello_world1.attrs_at(0)
  # => { color: blue, font: "Helvetica" }

Attachments

  hello_world = AttributedString.new('Hello, World!')

  hello_world.add_attachment("any ruby object", position: string.length)

  # Adding an attachment inserts the Object Replacement Character into the
  # string, in most fonts it will show as a space
  puts hello_world
  # => "Hello, World! "
  puts hello_world.attachments # => ["any ruby object"]

  # Deleting the character from the string removes the attachment
  hello_world[-1..-1] = ''
  puts hello_world.attachments # => []

More Examples

See the test suite.

Used By

  • Instruct - Instruct LLMs to do what you want in Ruby