Class: Yosina::Transliterators::CircledOrSquared::Transliterator

Inherits:
BaseTransliterator show all
Defined in:
lib/yosina/transliterators/circled_or_squared.rb

Overview

Transliterator for circled or squared characters

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Transliterator

Initialize the transliterator with options

Parameters:

  • options (Hash) (defaults to: {})

    Configuration options

Options Hash (options):

  • :include_emojis (Boolean)

    Whether to include emoji representations

  • :templates (Hash)

    Custom templates for circle and square

  • :templates['circle'] (String)

    Template for circled characters

  • :templates['square'] (String)

    Template for squared characters



18
19
20
21
22
23
24
25
26
# File 'lib/yosina/transliterators/circled_or_squared.rb', line 18

def initialize(options = {})
  super()
  @include_emojis = options[:include_emojis] || false
  templates = options[:templates] || {}
  @templates = {
    'c' => templates['circle'] || '(?)',
    's' => templates['square'] || '[?]'
  }
end

Instance Method Details

#call(input_chars) ⇒ Enumerable<Char>

Replace circled or squared characters with their corresponding templates

Parameters:

  • input_chars (Enumerable<Char>)

    The characters to transliterate

Returns:

  • (Enumerable<Char>)

    The transliterated characters



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/yosina/transliterators/circled_or_squared.rb', line 32

def call(input_chars)
  offset = 0

  Chars.enum do |y|
    input_chars.each do |char|
      mapping = CIRCLED_OR_SQUARED_MAPPINGS[char.c]
      if mapping && (!mapping[:emoji] || @include_emojis)
        rendering = mapping[:rendering]
        type_abbrev = mapping[:type]
        template = @templates[type_abbrev]
        replacement = +template
        replacement['?'] = rendering

        replacement.each_char do |replacement_char|
          y << Char.new(c: replacement_char, offset: offset, source: char)
          offset += replacement_char.length
        end
      else
        y << Char.new(c: char.c, offset: offset, source: char.source)
        offset += char.c.length
      end
    end
  end
end