yosina 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/yosina/recipes.rb +5 -1
- data/lib/yosina/transliterators/prolonged_sound_marks.rb +33 -7
- data/lib/yosina/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4d31d3fa007ce64078273418d9372e42e5aae7bacec0682019ce4fab8d2e93f1
|
|
4
|
+
data.tar.gz: c641e3563f3baf54e781660b34f76806d90983d03598133f4efbf1bbeb29531c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '05648b23304aa9cf4668826f2b94bb27c29d7d74eb8832d910ce5d1ff237157c6814af181804dd2cc692d0c7322201daa8c38cbc52cb19c5bb9a20115ec5c497'
|
|
7
|
+
data.tar.gz: 64de351469c65778f19759b834ee516af59cdf8dc42a104cbee1b4e16c627704b13ba421eb3513f0b407b7df2146c6f7a66e288d06eec56e3679bfd1bb6057a1
|
data/lib/yosina/recipes.rb
CHANGED
|
@@ -271,7 +271,11 @@ module Yosina
|
|
|
271
271
|
|
|
272
272
|
def apply_replace_suspicious_hyphens_to_prolonged_sound_marks(ctx)
|
|
273
273
|
if @replace_suspicious_hyphens_to_prolonged_sound_marks
|
|
274
|
-
ctx.insert_middle([:prolonged_sound_marks, {
|
|
274
|
+
ctx.insert_middle([:prolonged_sound_marks, {
|
|
275
|
+
replace_prolonged_marks_following_alnums: true,
|
|
276
|
+
replace_prolonged_marks_between_non_kanas:
|
|
277
|
+
@replace_suspicious_hyphens_to_prolonged_sound_marks == 'aggressive'
|
|
278
|
+
}])
|
|
275
279
|
else
|
|
276
280
|
ctx
|
|
277
281
|
end
|
|
@@ -71,6 +71,12 @@ module Yosina
|
|
|
71
71
|
[0x30fc, 0xff70].include?(char_code)
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
+
def kana?(char_code)
|
|
75
|
+
hiragana?(char_code) || katakana?(char_code) ||
|
|
76
|
+
hatsuon?(char_code) || sokuon?(char_code) ||
|
|
77
|
+
prolonged_sound_mark?(char_code)
|
|
78
|
+
end
|
|
79
|
+
|
|
74
80
|
def prolongable?(char_code)
|
|
75
81
|
prolonged_sound_mark?(char_code) || hiragana?(char_code) || katakana?(char_code)
|
|
76
82
|
end
|
|
@@ -83,7 +89,8 @@ module Yosina
|
|
|
83
89
|
# Transliterator for prolonged sound marks
|
|
84
90
|
class Transliterator < Yosina::BaseTransliterator
|
|
85
91
|
attr_reader :skip_already_transliterated_chars, :allow_prolonged_hatsuon,
|
|
86
|
-
:allow_prolonged_sokuon, :replace_prolonged_marks_following_alnums
|
|
92
|
+
:allow_prolonged_sokuon, :replace_prolonged_marks_following_alnums,
|
|
93
|
+
:replace_prolonged_marks_between_non_kanas
|
|
87
94
|
|
|
88
95
|
# Initialize the transliterator with options
|
|
89
96
|
#
|
|
@@ -96,12 +103,15 @@ module Yosina
|
|
|
96
103
|
# Default: false.
|
|
97
104
|
# @option options [Boolean] :replace_prolonged_marks_following_alnums Replace prolonged marks after alphanum
|
|
98
105
|
# with hyphens. Default: false.
|
|
106
|
+
# @option options [Boolean] :replace_prolonged_marks_between_non_kanas Replace prolonged marks between
|
|
107
|
+
# non-kana characters with hyphens. Default: false.
|
|
99
108
|
def initialize(options = {})
|
|
100
109
|
super()
|
|
101
110
|
@skip_already_transliterated_chars = options.fetch(:skip_already_transliterated_chars, false)
|
|
102
111
|
@allow_prolonged_hatsuon = options.fetch(:allow_prolonged_hatsuon, false)
|
|
103
112
|
@allow_prolonged_sokuon = options.fetch(:allow_prolonged_sokuon, false)
|
|
104
113
|
@replace_prolonged_marks_following_alnums = options.fetch(:replace_prolonged_marks_following_alnums, false)
|
|
114
|
+
@replace_prolonged_marks_between_non_kanas = options.fetch(:replace_prolonged_marks_between_non_kanas, false)
|
|
105
115
|
end
|
|
106
116
|
|
|
107
117
|
# Convert hyphen-like characters to appropriate prolonged sound marks
|
|
@@ -125,13 +135,28 @@ module Yosina
|
|
|
125
135
|
prev_non_prolonged_char = last_non_prolonged_char
|
|
126
136
|
last_non_prolonged_char = char
|
|
127
137
|
|
|
128
|
-
|
|
138
|
+
prev_type = prev_non_prolonged_char&.c&.ord
|
|
139
|
+
following_type = last_non_prolonged_char.c.empty? ? nil : last_non_prolonged_char.c.ord
|
|
140
|
+
|
|
141
|
+
replace_by_alnum = @replace_prolonged_marks_following_alnums &&
|
|
142
|
+
(prev_non_prolonged_char.nil? || alphanumeric?(prev_type))
|
|
143
|
+
replace_by_non_kana = @replace_prolonged_marks_between_non_kanas &&
|
|
144
|
+
(prev_non_prolonged_char.nil? || !kana?(prev_type)) &&
|
|
145
|
+
(following_type.nil? || !kana?(following_type))
|
|
146
|
+
|
|
147
|
+
if (replace_by_alnum || replace_by_non_kana) && (
|
|
129
148
|
!@skip_already_transliterated_chars || !processed_char_in_lookahead
|
|
130
149
|
)
|
|
131
|
-
|
|
132
|
-
prev_non_prolonged_char.nil? ?
|
|
133
|
-
|
|
134
|
-
|
|
150
|
+
if replace_by_non_kana
|
|
151
|
+
prev_half = prev_non_prolonged_char.nil? || halfwidth?(prev_type)
|
|
152
|
+
next_half = !following_type.nil? && halfwidth?(following_type)
|
|
153
|
+
replacement = !prev_half && !next_half ? "\uff0d" : "\u002d"
|
|
154
|
+
else
|
|
155
|
+
halfwidth = halfwidth?(
|
|
156
|
+
prev_non_prolonged_char.nil? ? following_type : prev_type
|
|
157
|
+
)
|
|
158
|
+
replacement = halfwidth ? "\u002d" : "\uff0d"
|
|
159
|
+
end
|
|
135
160
|
lookahead_buf.each do |buffered_char|
|
|
136
161
|
y << Char.new(c: replacement, offset: offset, source: buffered_char)
|
|
137
162
|
offset += replacement.length
|
|
@@ -158,7 +183,8 @@ module Yosina
|
|
|
158
183
|
y << Char.new(c: replacement, offset: offset, source: char)
|
|
159
184
|
offset += replacement.length
|
|
160
185
|
next
|
|
161
|
-
elsif @replace_prolonged_marks_following_alnums && alphanumeric?(last_non_prolonged_char.c.ord)
|
|
186
|
+
elsif (@replace_prolonged_marks_following_alnums && alphanumeric?(last_non_prolonged_char.c.ord)) ||
|
|
187
|
+
(@replace_prolonged_marks_between_non_kanas && !kana?(last_non_prolonged_char.c.ord))
|
|
162
188
|
lookahead_buf << char
|
|
163
189
|
next
|
|
164
190
|
end
|
data/lib/yosina/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: yosina
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Moriyoshi Koizumi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-04-
|
|
11
|
+
date: 2026-04-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: minitest
|