From 8cdfa445d6629ffef4cb84967ff7017654045bc2 Mon Sep 17 00:00:00 2001 From: mo khan Date: Wed, 2 Jul 2025 18:36:06 -0600 Subject: chore: add vendor directory --- vendor/unicode-normalization/src/replace.rs | 66 +++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 vendor/unicode-normalization/src/replace.rs (limited to 'vendor/unicode-normalization/src/replace.rs') diff --git a/vendor/unicode-normalization/src/replace.rs b/vendor/unicode-normalization/src/replace.rs new file mode 100644 index 00000000..3ab2a573 --- /dev/null +++ b/vendor/unicode-normalization/src/replace.rs @@ -0,0 +1,66 @@ +// Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +use core::{ + fmt::{self, Write}, + iter::FusedIterator, +}; +use tinyvec::ArrayVec; + +/// External iterator for replacements for a string's characters. +#[derive(Clone)] +pub struct Replacements { + iter: I, + // At this time, the longest replacement sequence has length 2, so we just + // need buffer space for 1 codepoint. + buffer: Option, +} + +#[inline] +pub fn new_cjk_compat_variants>(iter: I) -> Replacements { + Replacements { iter, buffer: None } +} + +impl> Iterator for Replacements { + type Item = char; + + #[inline] + fn next(&mut self) -> Option { + if let Some(c) = self.buffer.take() { + return Some(c); + } + + match self.iter.next() { + Some(ch) => { + // At this time, the longest replacement sequence has length 2. + let mut buffer = ArrayVec::<[char; 2]>::new(); + super::char::decompose_cjk_compat_variants(ch, |d| buffer.push(d)); + self.buffer = buffer.get(1).copied(); + Some(buffer[0]) + } + None => None, + } + } + + fn size_hint(&self) -> (usize, Option) { + let (lower, _) = self.iter.size_hint(); + (lower, None) + } +} + +impl + FusedIterator> FusedIterator for Replacements {} + +impl + Clone> fmt::Display for Replacements { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + for c in self.clone() { + f.write_char(c)?; + } + Ok(()) + } +} -- cgit v1.2.3