diff options
Diffstat (limited to 'src/Normalizer.zig')
| -rw-r--r-- | src/Normalizer.zig | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/Normalizer.zig b/src/Normalizer.zig index 3ff157c..b5a54d1 100644 --- a/src/Normalizer.zig +++ b/src/Normalizer.zig | |||
| @@ -343,6 +343,31 @@ test "nfkd !ASCII / alloc" { | |||
| 343 | try testing.expectEqualStrings("He\u{301}llo World! \u{3a5}\u{301}", result.slice); | 343 | try testing.expectEqualStrings("He\u{301}llo World! \u{3a5}\u{301}", result.slice); |
| 344 | } | 344 | } |
| 345 | 345 | ||
| 346 | pub fn nfdCodePoints( | ||
| 347 | self: Self, | ||
| 348 | allocator: mem.Allocator, | ||
| 349 | cps: []const u21, | ||
| 350 | ) ![]u21 { | ||
| 351 | var dcp_list = std.ArrayList(u21).init(allocator); | ||
| 352 | defer dcp_list.deinit(); | ||
| 353 | |||
| 354 | var dc_buf: [18]u21 = undefined; | ||
| 355 | |||
| 356 | for (cps) |cp| { | ||
| 357 | const dc = self.decompose(cp, .nfd, &dc_buf); | ||
| 358 | |||
| 359 | if (dc.form == .same) { | ||
| 360 | try dcp_list.append(cp); | ||
| 361 | } else { | ||
| 362 | try dcp_list.appendSlice(dc.cps); | ||
| 363 | } | ||
| 364 | } | ||
| 365 | |||
| 366 | self.canonicalSort(dcp_list.items); | ||
| 367 | |||
| 368 | return try dcp_list.toOwnedSlice(); | ||
| 369 | } | ||
| 370 | |||
| 346 | pub fn nfkdCodePoints( | 371 | pub fn nfkdCodePoints( |
| 347 | self: Self, | 372 | self: Self, |
| 348 | allocator: mem.Allocator, | 373 | allocator: mem.Allocator, |