byk 0.3.0 → 0.4.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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/README.md +19 -19
  4. data/ext/byk/byk.c +108 -111
  5. data/lib/byk/version.rb +1 -1
  6. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ba019cfc4eecb9208d5c6aaac397820ab8cf78d
4
- data.tar.gz: 7b49cc79f1385c443b3120bbc9e92a3ade338736
3
+ metadata.gz: 2fb4e839b91bf3348e5c59e0e52b97bbbaec43de
4
+ data.tar.gz: 1a5d496e1fe684cba330eed517c3b8de5ad573a0
5
5
  SHA512:
6
- metadata.gz: 5f62f7e005890c0a39538aaa955d00362793539e8f499a8ea1c3922171209e75afd2ebe496162e28635858c47b77a8ad15fb82a7b5e693c5e2a7b357c578157b
7
- data.tar.gz: 1e8ff0ee9b3897780e02a226d3df650f5be408242d6df8919bef0ff75c15bf513605726bdf3f543e3d179e4ff47e70d37466860b338c6ad14367dbb061bf5c4d
6
+ metadata.gz: 9fc2e29e20dad1e0c517afd3c35d60340f256ce44bcda71a9e2fb344be4b685c2fa3b85350dd347e890143c6f9a84a94896eec9df0bfb8ec9b7be8811907053f
7
+ data.tar.gz: c81f02b4075cdc5b82b3f17f47fb4ea74dbcfa29bbe466731c685ec5a7b3d1c54b329075eb8c2d1731b76f03b9bf9b24646ea3aeff88f8ab17577297d0bae960
@@ -0,0 +1,19 @@
1
+ # Changelog
2
+
3
+ ### Byk 0.4.0 (2015-04-17)
4
+
5
+ * Performance tuning and refactoring, ~10% speedup
6
+ * Updated benchmark
7
+ * Introduced changelog
8
+
9
+ ### Byk 0.3.0 (2015-04-16)
10
+
11
+ * MRI 1.9.2 support
12
+
13
+ ### Byk 0.2.0 (2015-04-15)
14
+
15
+ * MRI 1.9.3 support
16
+
17
+ ### Byk 0.1.0 (2015-04-15)
18
+
19
+ * First release
data/README.md CHANGED
@@ -1,13 +1,16 @@
1
1
  Byk
2
2
  ===
3
3
 
4
- Fast transliteration of Serbian Cyrillic into Latin.
5
-
6
- ![byk](https://cloud.githubusercontent.com/assets/626128/7155207/07545960-e35d-11e4-804e-5fdee70a3e30.png)
4
+ [![Gem Version](https://badge.fury.io/rb/byk.svg)](https://rubygems.org/gems/byk)
5
+ [![Build Status](https://travis-ci.org/topalovic/byk.svg?branch=master)](https://travis-ci.org/topalovic/byk)
7
6
 
8
- Inspired by @dejan's
7
+ Ruby gem for fast transliteration of Serbian Cyrillic into Latin
8
+ <br />
9
+ <sub>Inspired by @dejan's
9
10
  [nice little gem](https://github.com/dejan/srbovanje),
10
- this one comes with a C-optimized twist.
11
+ this one comes with a C-optimized twist</sub>
12
+
13
+ ![byk](https://cloud.githubusercontent.com/assets/626128/7155207/07545960-e35d-11e4-804e-5fdee70a3e30.png)
11
14
 
12
15
 
13
16
  ## Installation
@@ -61,8 +64,8 @@ Note that these methods take into account the
61
64
  [two-letter capitalization rules](http://sr.wikipedia.org/wiki/Gajica#Abeceda):
62
65
 
63
66
  ```ruby
64
- "ЉИЉА Љиљановић".to_latin # => "LJILJA Ljiljanović"
65
- "ĐORĐE Đorđević".to_ascii_latin # => "DJORDJE Djordjevic"
67
+ "ЉИЉА Љиљановић".to_latin # => "LJILJA Ljiljanović"
68
+ "ĐORĐE Đorđević".to_ascii_latin # => "DJORDJE Djordjevic"
66
69
  ```
67
70
 
68
71
 
@@ -74,24 +77,21 @@ my hardware. YMMV of course.
74
77
 
75
78
  ## Raison d'être
76
79
 
77
- This kind of speed-up might prove worthwhile for massive
78
- transliteration projects (e.g. sites supporting dual script
79
- l10n). Remember, `Benchmark` is your friend.
80
+ This kind of speed-up might be worthwhile for massive localization
81
+ projects, e.g. sites supporting dual script content. Remember,
82
+ `Benchmark` is your friend.
80
83
 
81
- I found it to be a straightforward little problem, fit for this kind
82
- of tight optimization&hellip; which also gave me an excuse to play
84
+ I found transliteration to be a straightforward little problem that
85
+ lends itself well to optimization. It also gave me an excuse to play
83
86
  with Ruby extensions, so there :smile_cat:
84
87
 
85
88
 
86
89
  ## Compatibility
87
90
 
88
- Byk is supported under MRI Ruby 1.9.2, 1.9.3, 2.0, 2.1 and 2.2.
89
- Earlier versions of MRI are untested (yet).
90
-
91
-
92
- ## Status
93
-
94
- [![Build Status](https://travis-ci.org/topalovic/byk.svg?branch=master)](https://travis-ci.org/topalovic/byk)
91
+ Byk is supported under MRI Ruby >= 1.9.2. I don't plan to support
92
+ 1.8.7 or older due to substantial C API changes between 1.8 and
93
+ 1.9. It doesn't build under Rubinius currently, but I intend to
94
+ support it in future releases.
95
95
 
96
96
 
97
97
  ## License
@@ -17,9 +17,9 @@ rb_check_arity(int argc, int min, int max)
17
17
 
18
18
  #define STR_ENC_GET(str) rb_enc_from_index(ENCODING_GET(str))
19
19
 
20
- #define STR_CAT_COND_ASCII(force_ascii, dest, chr, ascii_chr, len, enc) \
21
- force_ascii ? rb_enc_str_buf_cat(dest, chr, len, enc) \
22
- : str_cat_char(dest, ascii_chr, enc)
20
+ #define STR_CAT_COND_ASCII(ascii, dest, chr, ascii_chr, len, enc) \
21
+ ascii ? rb_enc_str_buf_cat(dest, chr, len, enc) \
22
+ : str_cat_char(dest, ascii_chr, enc)
23
23
 
24
24
  enum {
25
25
  LAT_CAP_TJ=262,
@@ -106,7 +106,6 @@ is_upper_case(unsigned int c)
106
106
  || c == LAT_CAP_ZH);
107
107
  }
108
108
 
109
-
110
109
  static void
111
110
  str_cat_char(VALUE str, unsigned int c, rb_encoding *enc)
112
111
  {
@@ -123,8 +122,10 @@ str_to_latin(int argc, VALUE *argv, VALUE str, int ascii, int bang)
123
122
  long dest_len;
124
123
  char *pos, *end;
125
124
  rb_encoding *enc;
125
+ int len, next_len;
126
+ int seen_upper = 0;
127
+ int force_upper = 0;
126
128
  unsigned int codepoint = 0;
127
- unsigned int prev_codepoint = 0;
128
129
  unsigned int next_codepoint = 0;
129
130
 
130
131
  rb_check_arity(argc, 0, 1);
@@ -134,27 +135,21 @@ str_to_latin(int argc, VALUE *argv, VALUE str, int ascii, int bang)
134
135
 
135
136
  end = RSTRING_END(str);
136
137
  enc = STR_ENC_GET(str);
137
- dest_len = RSTRING_LEN(str) + 30; /* TODO len + margin */
138
+ dest_len = RSTRING_LEN(str) + 30;
138
139
  dest = rb_str_buf_new(dest_len);
139
140
  rb_enc_associate(dest, enc);
140
141
 
141
- while (pos < end) {
142
- int len;
143
- int force_upper = 0;
144
-
145
- prev_codepoint = codepoint;
146
- codepoint = rb_enc_codepoint_len(pos, end, &len, enc);
147
- next_codepoint = 0;
142
+ codepoint = rb_enc_codepoint_len(pos, end, &len, enc);
148
143
 
149
- force_upper = prev_codepoint && is_upper_case(prev_codepoint);
150
-
151
- if (!force_upper && (pos + len < end)) {
152
- /* TODO Trim down to one rb_enc_codepoint call per iter. */
153
- next_codepoint = rb_enc_codepoint(pos + len, end, enc);
154
- force_upper = is_upper_case(next_codepoint);
144
+ while (pos < end) {
145
+ if (pos + len < end) {
146
+ next_codepoint = rb_enc_codepoint_len(pos + len, end, &next_len, enc);
155
147
  }
156
148
 
157
- /* Latin -> "ASCII latin" conversion */
149
+ force_upper = seen_upper || is_upper_case(next_codepoint);
150
+ seen_upper = is_upper_case(codepoint);
151
+
152
+ /* Latin -> "ASCII Latin" conversion */
158
153
  if (ascii && codepoint >= LAT_CAP_TJ && codepoint <= LAT_ZH) {
159
154
  switch (codepoint) {
160
155
  case LAT_TJ:
@@ -174,107 +169,109 @@ str_to_latin(int argc, VALUE *argv, VALUE str, int ascii, int bang)
174
169
  default:
175
170
  rb_enc_str_buf_cat(dest, pos, len, enc);
176
171
  }
177
- pos += len;
178
- continue;
179
172
  }
180
173
 
181
- /* Short-circuit for non-cyrillic codepoints */
182
- if (codepoint < CYR_CAP_DJ || codepoint > CYR_DZ) {
174
+ /* Non-Cyrillic codepoints */
175
+ else if (codepoint < CYR_CAP_DJ || codepoint > CYR_DZ) {
183
176
  rb_enc_str_buf_cat(dest, pos, len, enc);
184
- pos += len;
185
- continue;
186
177
  }
187
178
 
188
- /* Cyrillic -> latin conversion */
189
- switch (codepoint) {
190
- case CYR_CAP_J: rb_enc_str_buf_cat(dest, "J", 1, enc); break;
191
- case CYR_CAP_A: rb_enc_str_buf_cat(dest, "A", 1, enc); break;
192
- case CYR_CAP_B: rb_enc_str_buf_cat(dest, "B", 1, enc); break;
193
- case CYR_CAP_V: rb_enc_str_buf_cat(dest, "V", 1, enc); break;
194
- case CYR_CAP_G: rb_enc_str_buf_cat(dest, "G", 1, enc); break;
195
- case CYR_CAP_D: rb_enc_str_buf_cat(dest, "D", 1, enc); break;
196
- case CYR_CAP_E: rb_enc_str_buf_cat(dest, "E", 1, enc); break;
197
- case CYR_CAP_Z: rb_enc_str_buf_cat(dest, "Z", 1, enc); break;
198
- case CYR_CAP_I: rb_enc_str_buf_cat(dest, "I", 1, enc); break;
199
- case CYR_CAP_K: rb_enc_str_buf_cat(dest, "K", 1, enc); break;
200
- case CYR_CAP_L: rb_enc_str_buf_cat(dest, "L", 1, enc); break;
201
- case CYR_CAP_M: rb_enc_str_buf_cat(dest, "M", 1, enc); break;
202
- case CYR_CAP_N: rb_enc_str_buf_cat(dest, "N", 1, enc); break;
203
- case CYR_CAP_O: rb_enc_str_buf_cat(dest, "O", 1, enc); break;
204
- case CYR_CAP_P: rb_enc_str_buf_cat(dest, "P", 1, enc); break;
205
- case CYR_CAP_R: rb_enc_str_buf_cat(dest, "R", 1, enc); break;
206
- case CYR_CAP_S: rb_enc_str_buf_cat(dest, "S", 1, enc); break;
207
- case CYR_CAP_T: rb_enc_str_buf_cat(dest, "T", 1, enc); break;
208
- case CYR_CAP_U: rb_enc_str_buf_cat(dest, "U", 1, enc); break;
209
- case CYR_CAP_F: rb_enc_str_buf_cat(dest, "F", 1, enc); break;
210
- case CYR_CAP_H: rb_enc_str_buf_cat(dest, "H", 1, enc); break;
211
- case CYR_CAP_C: rb_enc_str_buf_cat(dest, "C", 1, enc); break;
212
- case CYR_A: rb_enc_str_buf_cat(dest, "a", 1, enc); break;
213
- case CYR_B: rb_enc_str_buf_cat(dest, "b", 1, enc); break;
214
- case CYR_V: rb_enc_str_buf_cat(dest, "v", 1, enc); break;
215
- case CYR_G: rb_enc_str_buf_cat(dest, "g", 1, enc); break;
216
- case CYR_D: rb_enc_str_buf_cat(dest, "d", 1, enc); break;
217
- case CYR_E: rb_enc_str_buf_cat(dest, "e", 1, enc); break;
218
- case CYR_Z: rb_enc_str_buf_cat(dest, "z", 1, enc); break;
219
- case CYR_I: rb_enc_str_buf_cat(dest, "i", 1, enc); break;
220
- case CYR_K: rb_enc_str_buf_cat(dest, "k", 1, enc); break;
221
- case CYR_L: rb_enc_str_buf_cat(dest, "l", 1, enc); break;
222
- case CYR_M: rb_enc_str_buf_cat(dest, "m", 1, enc); break;
223
- case CYR_N: rb_enc_str_buf_cat(dest, "n", 1, enc); break;
224
- case CYR_O: rb_enc_str_buf_cat(dest, "o", 1, enc); break;
225
- case CYR_P: rb_enc_str_buf_cat(dest, "p", 1, enc); break;
226
- case CYR_R: rb_enc_str_buf_cat(dest, "r", 1, enc); break;
227
- case CYR_S: rb_enc_str_buf_cat(dest, "s", 1, enc); break;
228
- case CYR_T: rb_enc_str_buf_cat(dest, "t", 1, enc); break;
229
- case CYR_U: rb_enc_str_buf_cat(dest, "u", 1, enc); break;
230
- case CYR_F: rb_enc_str_buf_cat(dest, "f", 1, enc); break;
231
- case CYR_H: rb_enc_str_buf_cat(dest, "h", 1, enc); break;
232
- case CYR_C: rb_enc_str_buf_cat(dest, "c", 1, enc); break;
233
- case CYR_J: rb_enc_str_buf_cat(dest, "j", 1, enc); break;
234
- case CYR_LJ: rb_enc_str_buf_cat(dest, "lj", 2, enc); break;
235
- case CYR_NJ: rb_enc_str_buf_cat(dest, "nj", 2, enc); break;
236
- case CYR_DJ: STR_CAT_COND_ASCII(ascii, dest, "dj", LAT_DJ, 2, enc); break;
237
- case CYR_TJ: STR_CAT_COND_ASCII(ascii, dest, "c", LAT_TJ, 1, enc); break;
238
- case CYR_CH: STR_CAT_COND_ASCII(ascii, dest, "c", LAT_CH, 1, enc); break;
239
- case CYR_ZH: STR_CAT_COND_ASCII(ascii, dest, "z", LAT_ZH, 1, enc); break;
240
- case CYR_SH: STR_CAT_COND_ASCII(ascii, dest, "s", LAT_SH, 1, enc); break;
241
- case CYR_CAP_TJ: STR_CAT_COND_ASCII(ascii, dest, "C", LAT_CAP_TJ, 1, enc); break;
242
- case CYR_CAP_CH: STR_CAT_COND_ASCII(ascii, dest, "C", LAT_CAP_CH, 1, enc); break;
243
- case CYR_CAP_ZH: STR_CAT_COND_ASCII(ascii, dest, "Z", LAT_CAP_ZH, 1, enc); break;
244
- case CYR_CAP_SH: STR_CAT_COND_ASCII(ascii, dest, "S", LAT_CAP_SH, 1, enc); break;
245
-
246
- /* Several special cases */
247
- case CYR_CAP_LJ:
248
- rb_enc_str_buf_cat(dest, (force_upper ? "LJ" : "Lj"), 2, enc);
249
- break;
250
-
251
- case CYR_CAP_NJ:
252
- rb_enc_str_buf_cat(dest, (force_upper ? "NJ" : "Nj"), 2, enc);
253
- break;
254
-
255
- case CYR_CAP_DJ:
256
- STR_CAT_COND_ASCII(ascii, dest, (force_upper ? "DJ" : "Dj"), LAT_CAP_DJ, 2, enc);
257
- break;
258
-
259
- case CYR_CAP_DZ:
260
- rb_enc_str_buf_cat(dest, "D", 1, enc);
261
- if (force_upper) {
262
- STR_CAT_COND_ASCII(ascii, dest, "Z", LAT_CAP_ZH, 1, enc);
263
- }
264
- else {
179
+ /* Cyrillic -> Latin conversion */
180
+ else if (codepoint >= CYR_A) {
181
+ switch (codepoint) {
182
+ case CYR_A: rb_enc_str_buf_cat(dest, "a", 1, enc); break;
183
+ case CYR_B: rb_enc_str_buf_cat(dest, "b", 1, enc); break;
184
+ case CYR_V: rb_enc_str_buf_cat(dest, "v", 1, enc); break;
185
+ case CYR_G: rb_enc_str_buf_cat(dest, "g", 1, enc); break;
186
+ case CYR_D: rb_enc_str_buf_cat(dest, "d", 1, enc); break;
187
+ case CYR_E: rb_enc_str_buf_cat(dest, "e", 1, enc); break;
188
+ case CYR_Z: rb_enc_str_buf_cat(dest, "z", 1, enc); break;
189
+ case CYR_I: rb_enc_str_buf_cat(dest, "i", 1, enc); break;
190
+ case CYR_K: rb_enc_str_buf_cat(dest, "k", 1, enc); break;
191
+ case CYR_L: rb_enc_str_buf_cat(dest, "l", 1, enc); break;
192
+ case CYR_M: rb_enc_str_buf_cat(dest, "m", 1, enc); break;
193
+ case CYR_N: rb_enc_str_buf_cat(dest, "n", 1, enc); break;
194
+ case CYR_O: rb_enc_str_buf_cat(dest, "o", 1, enc); break;
195
+ case CYR_P: rb_enc_str_buf_cat(dest, "p", 1, enc); break;
196
+ case CYR_R: rb_enc_str_buf_cat(dest, "r", 1, enc); break;
197
+ case CYR_S: rb_enc_str_buf_cat(dest, "s", 1, enc); break;
198
+ case CYR_T: rb_enc_str_buf_cat(dest, "t", 1, enc); break;
199
+ case CYR_U: rb_enc_str_buf_cat(dest, "u", 1, enc); break;
200
+ case CYR_F: rb_enc_str_buf_cat(dest, "f", 1, enc); break;
201
+ case CYR_H: rb_enc_str_buf_cat(dest, "h", 1, enc); break;
202
+ case CYR_C: rb_enc_str_buf_cat(dest, "c", 1, enc); break;
203
+ case CYR_J: rb_enc_str_buf_cat(dest, "j", 1, enc); break;
204
+ case CYR_LJ: rb_enc_str_buf_cat(dest, "lj", 2, enc); break;
205
+ case CYR_NJ: rb_enc_str_buf_cat(dest, "nj", 2, enc); break;
206
+ case CYR_DJ: STR_CAT_COND_ASCII(ascii, dest, "dj", LAT_DJ, 2, enc); break;
207
+ case CYR_TJ: STR_CAT_COND_ASCII(ascii, dest, "c", LAT_TJ, 1, enc); break;
208
+ case CYR_CH: STR_CAT_COND_ASCII(ascii, dest, "c", LAT_CH, 1, enc); break;
209
+ case CYR_ZH: STR_CAT_COND_ASCII(ascii, dest, "z", LAT_ZH, 1, enc); break;
210
+ case CYR_SH: STR_CAT_COND_ASCII(ascii, dest, "s", LAT_SH, 1, enc); break;
211
+ case CYR_DZ:
212
+ rb_enc_str_buf_cat(dest, "d", 1, enc);
265
213
  STR_CAT_COND_ASCII(ascii, dest, "z", LAT_ZH, 1, enc);
214
+ break;
215
+ default:
216
+ rb_enc_str_buf_cat(dest, pos, len, enc);
266
217
  }
267
- break;
268
-
269
- case CYR_DZ:
270
- rb_enc_str_buf_cat(dest, "d", 1, enc);
271
- STR_CAT_COND_ASCII(ascii, dest, "z", LAT_ZH, 1, enc);
272
- break;
218
+ }
273
219
 
274
- default:
275
- rb_enc_str_buf_cat(dest, pos, len, enc);
220
+ /* Cyrillic -> Latin conversion, caps */
221
+ else {
222
+ switch (codepoint) {
223
+ case CYR_CAP_J: rb_enc_str_buf_cat(dest, "J", 1, enc); break;
224
+ case CYR_CAP_A: rb_enc_str_buf_cat(dest, "A", 1, enc); break;
225
+ case CYR_CAP_B: rb_enc_str_buf_cat(dest, "B", 1, enc); break;
226
+ case CYR_CAP_V: rb_enc_str_buf_cat(dest, "V", 1, enc); break;
227
+ case CYR_CAP_G: rb_enc_str_buf_cat(dest, "G", 1, enc); break;
228
+ case CYR_CAP_D: rb_enc_str_buf_cat(dest, "D", 1, enc); break;
229
+ case CYR_CAP_E: rb_enc_str_buf_cat(dest, "E", 1, enc); break;
230
+ case CYR_CAP_Z: rb_enc_str_buf_cat(dest, "Z", 1, enc); break;
231
+ case CYR_CAP_I: rb_enc_str_buf_cat(dest, "I", 1, enc); break;
232
+ case CYR_CAP_K: rb_enc_str_buf_cat(dest, "K", 1, enc); break;
233
+ case CYR_CAP_L: rb_enc_str_buf_cat(dest, "L", 1, enc); break;
234
+ case CYR_CAP_M: rb_enc_str_buf_cat(dest, "M", 1, enc); break;
235
+ case CYR_CAP_N: rb_enc_str_buf_cat(dest, "N", 1, enc); break;
236
+ case CYR_CAP_O: rb_enc_str_buf_cat(dest, "O", 1, enc); break;
237
+ case CYR_CAP_P: rb_enc_str_buf_cat(dest, "P", 1, enc); break;
238
+ case CYR_CAP_R: rb_enc_str_buf_cat(dest, "R", 1, enc); break;
239
+ case CYR_CAP_S: rb_enc_str_buf_cat(dest, "S", 1, enc); break;
240
+ case CYR_CAP_T: rb_enc_str_buf_cat(dest, "T", 1, enc); break;
241
+ case CYR_CAP_U: rb_enc_str_buf_cat(dest, "U", 1, enc); break;
242
+ case CYR_CAP_F: rb_enc_str_buf_cat(dest, "F", 1, enc); break;
243
+ case CYR_CAP_H: rb_enc_str_buf_cat(dest, "H", 1, enc); break;
244
+ case CYR_CAP_C: rb_enc_str_buf_cat(dest, "C", 1, enc); break;
245
+ case CYR_CAP_TJ: STR_CAT_COND_ASCII(ascii, dest, "C", LAT_CAP_TJ, 1, enc); break;
246
+ case CYR_CAP_CH: STR_CAT_COND_ASCII(ascii, dest, "C", LAT_CAP_CH, 1, enc); break;
247
+ case CYR_CAP_ZH: STR_CAT_COND_ASCII(ascii, dest, "Z", LAT_CAP_ZH, 1, enc); break;
248
+ case CYR_CAP_SH: STR_CAT_COND_ASCII(ascii, dest, "S", LAT_CAP_SH, 1, enc); break;
249
+ case CYR_CAP_LJ:
250
+ rb_enc_str_buf_cat(dest, (force_upper ? "LJ" : "Lj"), 2, enc);
251
+ break;
252
+ case CYR_CAP_NJ:
253
+ rb_enc_str_buf_cat(dest, (force_upper ? "NJ" : "Nj"), 2, enc);
254
+ break;
255
+ case CYR_CAP_DJ:
256
+ STR_CAT_COND_ASCII(ascii, dest, (force_upper ? "DJ" : "Dj"), LAT_CAP_DJ, 2, enc);
257
+ break;
258
+ case CYR_CAP_DZ:
259
+ rb_enc_str_buf_cat(dest, "D", 1, enc);
260
+ if (force_upper) {
261
+ STR_CAT_COND_ASCII(ascii, dest, "Z", LAT_CAP_ZH, 1, enc);
262
+ }
263
+ else {
264
+ STR_CAT_COND_ASCII(ascii, dest, "z", LAT_ZH, 1, enc);
265
+ }
266
+ break;
267
+ default:
268
+ rb_enc_str_buf_cat(dest, pos, len, enc);
269
+ }
276
270
  }
277
271
  pos += len;
272
+ len = next_len;
273
+ codepoint = next_codepoint;
274
+ next_codepoint = 0;
278
275
  }
279
276
 
280
277
  if (bang) {
@@ -1,3 +1,3 @@
1
1
  module Byk
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: byk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikola Topalović
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-16 00:00:00.000000000 Z
11
+ date: 2015-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -46,6 +46,7 @@ extensions:
46
46
  - ext/byk/extconf.rb
47
47
  extra_rdoc_files: []
48
48
  files:
49
+ - CHANGELOG.md
49
50
  - LICENSE
50
51
  - README.md
51
52
  - ext/byk/byk.c