createSanitizer function

RuneSanitizer createSanitizer([
  1. SanitizerOptions? options
])

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;
  };
}