createSanitizer function
Creates a rune sanitizer with the given options.
The sanitizer removes control characters from runes and optionally replaces newline/carriage return/tabs by specified strings.
Example:
import 'package:artisanal/src/unicode/grapheme.dart' as uni;
final sanitizer = createSanitizer(SanitizerOptions(
tabReplacement: ' ',
newlineReplacement: ' ',
));
final clean = sanitizer(uni.codePoints('hello\tworld'));
Implementation
RuneSanitizer createSanitizer([SanitizerOptions? options]) {
final opts = options ?? SanitizerOptions();
final tabRunes = uni.codePoints(opts.tabReplacement);
final newlineRunes = uni.codePoints(opts.newlineReplacement);
return (List<int> runes) {
final result = <int>[];
for (final r in runes) {
if (r == 0xFFFD) {
// Unicode replacement character - skip invalid runes
continue;
} else if (r == 0x0D || r == 0x0A) {
// Carriage return or newline
result.addAll(newlineRunes);
} else if (r == 0x09) {
// Tab
result.addAll(tabRunes);
} else if (_isControl(r)) {
// Other control characters - skip
continue;
} else {
// Keep the character
result.add(r);
}
}
return result;
};
}