rvpacker-txt 1.11.0 → 1.13.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.
data/lib/extensions.rb CHANGED
@@ -1,120 +1,123 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # @param [String] string
3
+ # @param [String] input_string
4
4
  # @return [String]
5
- def self.romanize_string(string)
6
- string.each_char.each_with_index do |char, i|
7
- case char
8
- when '。'
9
- string[i] = '.'
10
- when '、', ','
11
- string[i] = ','
12
- when ''
13
- string[i] = '·'
14
- when ''
15
- string[i] = ''
16
- when '', 'ー'
17
- string[i] = ''
18
- when '', '‥'
19
- string[i, 3] = '...'
20
- when '', '」', '〈', '〉'
21
- string[i] = "'"
22
- when '', '』', '《', '》'
23
- string[i] = '"'
24
- when '(', '〔', '⦅', '〘'
25
- string[i] = '('
26
- when '', '〕', '⦆', '〙'
27
- string[i] = ')'
28
- when ''
29
- string[i] = '{'
30
- when ''
31
- string[i] = '}'
32
- when '', '【', '〖', '〚'
33
- string[i] = '['
34
- when '', '】', '〗', '〛'
35
- string[i] = ']'
36
- when ''
37
- string[i] = '~'
38
- when ''
39
- string[i] = '?'
40
- when ''
41
- string[i] = ':'
42
- when ''
43
- string[i] = '!'
44
- when ''
45
- string[i] = '*'
46
- when ' '
47
- string[i] = ' '
48
- when ''
49
- string[i] = 'I'
50
- when 'ⅰ'
51
- string[i] = 'i'
52
- when ''
53
- string[i, 2] = 'II'
54
- when ''
55
- string[i, 2] = 'ii'
56
- when ''
57
- string[i, 3] = 'III'
58
- when ''
59
- string[i, 3] = 'iii'
60
- when ''
61
- string[i, 2] = 'IV'
62
- when ''
63
- string[i, 2] = 'iv'
64
- when ''
65
- string[i] = 'V'
66
- when ''
67
- string[i] = 'v'
68
- when ''
69
- string[i, 2] = 'VI'
70
- when ''
71
- string[i, 2] = 'vi'
72
- when ''
73
- string[i, 3] = 'VII'
74
- when ''
75
- string[i, 3] = 'vii'
76
- when ''
77
- string[i, 4] = 'VIII'
78
- when ''
79
- string[i, 4] = 'viii'
80
- when ''
81
- string[i, 2] = 'IX'
82
- when ''
83
- string[i, 2] = 'ix'
84
- when ''
85
- string[i] = 'X'
86
- when ''
87
- string[i] = 'x'
88
- when ''
89
- string[i, 2] = 'XI'
90
- when ''
91
- string[i, 2] = 'xi'
92
- when ''
93
- string[i, 3] = 'XII'
94
- when ''
95
- string[i, 3] = 'xii'
96
- when ''
97
- string[i] = 'L'
98
- when ''
99
- string[i] = 'l'
100
- when ''
101
- string[i] = 'C'
102
- when ''
103
- string[i] = 'c'
104
- when ''
105
- string[i] = 'D'
106
- when ''
107
- string[i] = 'd'
108
- when ''
109
- string[i] = 'M'
110
- when ''
111
- string[i] = 'm'
112
- else
113
- nil
5
+ def self.romanize_string(input_string)
6
+ # @type [Array<String>]
7
+ result = []
8
+
9
+ input_string.each_char do |char|
10
+ result << case char
11
+ when ''
12
+ '.'
13
+ when '、', ''
14
+ ','
15
+ when ''
16
+ '·'
17
+ when ''
18
+ ''
19
+ when '=', ''
20
+ ''
21
+ when '…', '‥'
22
+ '...'
23
+ when '「', '', '〈', '〉'
24
+ "'"
25
+ when '『', '', '《', '》'
26
+ '"'
27
+ when '(', '', '⦅', '〘'
28
+ '('
29
+ when ')', '', '⦆', '〙'
30
+ ')'
31
+ when ''
32
+ '{'
33
+ when ''
34
+ '}'
35
+ when '[', '', '〖', '〚'
36
+ '['
37
+ when ']', '', '〗', '〛'
38
+ ']'
39
+ when ''
40
+ '~'
41
+ when ''
42
+ '?'
43
+ when ''
44
+ ':'
45
+ when ''
46
+ '!'
47
+ when ''
48
+ '*'
49
+ when ' '
50
+ ' '
51
+ when ''
52
+ 'I'
53
+ when ''
54
+ 'i'
55
+ when ''
56
+ 'II'
57
+ when ''
58
+ 'ii'
59
+ when ''
60
+ 'III'
61
+ when ''
62
+ 'iii'
63
+ when ''
64
+ 'IV'
65
+ when ''
66
+ 'iv'
67
+ when ''
68
+ 'V'
69
+ when ''
70
+ 'v'
71
+ when ''
72
+ 'VI'
73
+ when ''
74
+ 'vi'
75
+ when ''
76
+ 'VII'
77
+ when ''
78
+ 'vii'
79
+ when ''
80
+ 'VIII'
81
+ when ''
82
+ 'viii'
83
+ when ''
84
+ 'IX'
85
+ when ''
86
+ 'ix'
87
+ when ''
88
+ 'X'
89
+ when ''
90
+ 'x'
91
+ when ''
92
+ 'XI'
93
+ when ''
94
+ 'xi'
95
+ when ''
96
+ 'XII'
97
+ when ''
98
+ 'xii'
99
+ when ''
100
+ 'L'
101
+ when ''
102
+ 'l'
103
+ when ''
104
+ 'C'
105
+ when ''
106
+ 'c'
107
+ when ''
108
+ 'D'
109
+ when ''
110
+ 'd'
111
+ when ''
112
+ 'M'
113
+ when 'ⅿ'
114
+ 'm'
115
+ else
116
+ char
114
117
  end
115
118
  end
116
119
 
117
- string
120
+ result.join
118
121
  end
119
122
 
120
123
  # @param [Array<String>] array Array of strings
@@ -127,110 +130,103 @@ def self.shuffle_words(array)
127
130
  end
128
131
  end
129
132
 
130
- # @param [String] string A parsed scripts code string, containing raw Ruby code
131
- # @param [Symbol] mode Mode to extract quoted strings
132
- # @return [IndexSet<String>] Set of extracted strings
133
- def extract_quoted_strings(string, mode)
134
- if mode == :read
135
- result = IndexSet.new
136
-
137
- skip_block = false
138
- in_quotes = false
139
- quote_type = nil
140
- buffer = []
141
-
142
- string.each_line do |line|
143
- stripped = line.strip
144
-
145
- next if stripped[0] == '#' ||
146
- (!in_quotes && !stripped.match?(/["']/)) ||
147
- stripped.start_with?(/(Win|Lose)|_Fanfare/) ||
148
- stripped.match?(/eval\(/)
149
-
150
- skip_block = true if stripped.start_with?('=begin')
151
- skip_block = false if stripped.start_with?('=end')
152
-
153
- next if skip_block
154
-
155
- line.each_char do |char|
156
- if %w[' "].include?(char)
157
- unless quote_type.nil? || char == quote_type
158
- buffer.push(char)
159
- next
160
- end
161
-
162
- quote_type = char
163
- in_quotes = !in_quotes
164
- result.add(buffer.join)
165
- buffer.clear
166
- next
167
- end
168
-
169
- next unless in_quotes
170
-
171
- if char == "\r"
172
- next
173
- elsif char == "\n"
174
- buffer.push('\#')
175
- next
176
- end
133
+ def escaped?(line, index)
134
+ backslash_count = 0
177
135
 
178
- buffer.push(char)
179
- end
180
- end
181
-
182
- result
183
- else
184
- strings_array = []
185
- indices_array = []
186
-
187
- skip_block = false
188
- in_quotes = false
189
- quote_type = nil
190
- buffer = []
136
+ (0..index).reverse_each do |i|
137
+ break if line[i] != '\\'
138
+ backslash_count += 1
139
+ end
191
140
 
192
- current_string_index = 0
193
- string.each_line do |line|
194
- stripped = line.strip
141
+ backslash_count.even?
142
+ end
195
143
 
196
- if stripped[0] == '#' || stripped.start_with?(/(Win|Lose)|_Fanfare/)
197
- current_string_index += line.length
144
+ # @param [String] ruby_code
145
+ def extract_strings(ruby_code, mode: false)
146
+ strings = mode ? [] : Set.new
147
+ indices = []
148
+ inside_string = false
149
+ inside_multiline_comment = false
150
+ string_start_index = 0
151
+ current_quote_type = ''
152
+
153
+ global_index = 0
154
+ ruby_code.each_line do |line|
155
+ stripped = line.strip
156
+
157
+ unless inside_string
158
+ if stripped[0] == '#'
159
+ global_index += line.length
198
160
  next
199
161
  end
200
162
 
201
- skip_block = true if stripped.start_with?('=begin')
202
- skip_block = false if stripped.start_with?('=end')
203
-
204
- if skip_block
205
- current_string_index += line.length
206
- next
163
+ if stripped.start_with?('=begin')
164
+ inside_multiline_comment = true
165
+ elsif stripped.start_with?('=end')
166
+ inside_multiline_comment = false
207
167
  end
168
+ end
208
169
 
209
- buffer.push('\#') if in_quotes
170
+ if inside_multiline_comment
171
+ global_index += line.length
172
+ next
173
+ end
210
174
 
211
- line.each_char.each_with_index do |char, index|
212
- if %w[' "].include?(char)
213
- unless quote_type.nil? || char == quote_type
214
- buffer.push(char)
215
- next
216
- end
175
+ i = 0
176
+ while i < line.length
177
+ char = line[i]
217
178
 
218
- quote_type = char
219
- in_quotes = !in_quotes
179
+ break if !inside_string && char == '#'
220
180
 
221
- strings_array.push(buffer.join)
222
- indices_array.push(current_string_index + index)
181
+ if !inside_string && %w[" '].include?(char)
182
+ inside_string = true
183
+ string_start_index = global_index + i
184
+ current_quote_type = char
185
+ elsif inside_string && char == current_quote_type && escaped?(line, i - 1)
186
+ extracted_string = ruby_code[string_start_index + 1...global_index + i].gsub(/\r?\n/, '\#')
223
187
 
224
- buffer.clear
225
- next
188
+ if mode
189
+ strings << extracted_string
190
+ indices << string_start_index + 1
191
+ else
192
+ strings.add(extracted_string)
226
193
  end
227
194
 
228
- buffer.push(char) if in_quotes
195
+ inside_string = false
196
+ current_quote_type = ''
229
197
  end
230
198
 
231
- current_string_index += line.length
199
+ i += 1
232
200
  end
233
201
 
234
- [strings_array, indices_array]
202
+ global_index += line.length
203
+ end
204
+
205
+ mode ? [strings, indices] : strings.to_a
206
+ end
207
+
208
+ ENCODINGS = %w[
209
+ ISO-8859-1
210
+ Windows-1252
211
+ Shift_JIS
212
+ GB18030
213
+ EUC-JP
214
+ ISO-2022-JP
215
+ BIG5
216
+ EUC-KR
217
+ Windows-1251
218
+ KOI8-R
219
+ UTF-8
220
+ ].freeze
221
+
222
+ # @param [String] input_string
223
+ # @return [String]
224
+ def convert_to_utf8(input_string)
225
+ ENCODINGS.each do |encoding|
226
+ return input_string.encode('UTF-8', encoding)
227
+ rescue Encoding::InvalidByteSequenceError, Encoding::UndefinedConversionError
228
+ next
235
229
  end
236
- end
230
+
231
+ raise EncodingError("Cannot convert string #{input_string} to UTF-8")
232
+ end