Class: Yosina::Transliterators::HiraKataComposition::Transliterator
- Inherits:
-
BaseTransliterator
- Object
- BaseTransliterator
- Yosina::Transliterators::HiraKataComposition::Transliterator
- Defined in:
- lib/yosina/transliterators/hira_kata_composition.rb
Overview
Transliterator for hiragana/katakana composition
Instance Attribute Summary collapse
-
#compose_non_combining_marks ⇒ Object
readonly
Returns the value of attribute compose_non_combining_marks.
Instance Method Summary collapse
-
#call(input_chars) ⇒ Enumerable<Char>
Combine decomposed hiragana and katakana characters with their marks.
-
#initialize(options = {}) ⇒ Transliterator
constructor
Initialize the transliterator with options.
Constructor Details
#initialize(options = {}) ⇒ Transliterator
Initialize the transliterator with options
37 38 39 40 41 |
# File 'lib/yosina/transliterators/hira_kata_composition.rb', line 37 def initialize( = {}) super() @compose_non_combining_marks = [:compose_non_combining_marks] || false @mappings = @compose_non_combining_marks ? NON_COMBINING_MARKS : COMBINING_MARKS end |
Instance Attribute Details
#compose_non_combining_marks ⇒ Object (readonly)
Returns the value of attribute compose_non_combining_marks.
30 31 32 |
# File 'lib/yosina/transliterators/hira_kata_composition.rb', line 30 def compose_non_combining_marks @compose_non_combining_marks end |
Instance Method Details
#call(input_chars) ⇒ Enumerable<Char>
Combine decomposed hiragana and katakana characters with their marks
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/yosina/transliterators/hira_kata_composition.rb', line 47 def call(input_chars) e = input_chars.each offset = 0 Chars.enum do |y| begin prev = e.next rescue StopIteration break end if prev.sentinel? y << prev break end loop do begin char = e.next rescue StopIteration break end if prev # Check for combining marks if (mark_mapping = @mappings[char.c]) && (composed = mark_mapping[prev.c]) # Found a composable combination y << Char.new(c: composed, offset: offset, source: char) offset += composed.length prev = nil next end # No composition possible, keep original character y << prev.with_offset(offset) offset += prev.c.length end prev = char end if prev y << prev.with_offset(offset) offset += prev.c.length end end end |