/// <summary> /// Returns a <see cref="Normalizer2"/> instance which uses the specified data file /// (an ICU data file if data=null, or else custom binary data) /// and which composes or decomposes text according to the specified mode. /// Returns an unmodifiable singleton instance. /// <list type="bullet"> /// <item><description>Use data=null for data files that are part of ICU's own data.</description></item> /// <item><description>Use name="nfc" and COMPOSE/DECOMPOSE for Unicode standard NFC/NFD.</description></item> /// <item><description>Use name="nfkc" and COMPOSE/DECOMPOSE for Unicode standard NFKC/NFKD.</description></item> /// <item><description>Use name="nfkc_cf" and COMPOSE for Unicode standard NFKC_CF=NFKC_Casefold.</description></item> /// </list> /// <para/> /// If data!=null, then the binary data is read once and cached using the provided /// name as the key. /// If you know or expect the data to be cached already, you can use data!=null /// for non-ICU data as well. /// </summary> /// <param name="data">The binary, big-endian normalization (.nrm file) data, or null for ICU data.</param> /// <param name="name">"nfc" or "nfkc" or "nfkc_cf" or name of custom data file.</param> /// <param name="mode">Normalization mode (compose or decompose etc.)</param> /// <returns>The requested <see cref="Normalizer2"/>, if successful.</returns> public static Normalizer2 GetInstance(Stream data, string name, Normalizer2Mode mode) { ByteBuffer bytes = null; if (data != null) { try { bytes = ICUBinary.GetByteBufferFromStreamAndDisposeStream(data); } catch (IOException e) { throw new ICUUncheckedIOException(e); } } Norm2AllModes all2Modes = Norm2AllModes.GetInstance(bytes, name); switch (mode) { case Normalizer2Mode.Compose: return(all2Modes.Comp); case Normalizer2Mode.Decompose: return(all2Modes.Decomp); case Normalizer2Mode.FCD: return(all2Modes.Fcd); case Normalizer2Mode.ComposeContiguous: return(all2Modes.Fcc); default: return(null); // will not occur } }
/// <summary> /// System registration hook. /// </summary> internal static void Register() { Transliterator.RegisterFactory("Any-NFC", new Transliterator.Factory(getInstance: (id) => { return(new NormalizationTransliterator("NFC", Normalizer2.GetNFCInstance())); })); Transliterator.RegisterFactory("Any-NFD", new Transliterator.Factory(getInstance: (id) => { return(new NormalizationTransliterator("NFD", Normalizer2.GetNFDInstance())); })); Transliterator.RegisterFactory("Any-NFKC", new Transliterator.Factory(getInstance: (id) => { return(new NormalizationTransliterator("NFKC", Normalizer2.GetNFKCInstance())); })); Transliterator.RegisterFactory("Any-NFKD", new Transliterator.Factory(getInstance: (id) => { return(new NormalizationTransliterator("NFKD", Normalizer2.GetNFKDInstance())); })); Transliterator.RegisterFactory("Any-FCD", new Transliterator.Factory(getInstance: (id) => { return(new NormalizationTransliterator("FCD", Norm2AllModes.GetFCDNormalizer2())); })); Transliterator.RegisterFactory("Any-FCC", new Transliterator.Factory(getInstance: (id) => { return(new NormalizationTransliterator("FCC", Norm2AllModes.GetNFCInstance().Fcc)); })); Transliterator.RegisterSpecialInverse("NFC", "NFD", true); Transliterator.RegisterSpecialInverse("NFKC", "NFKD", true); Transliterator.RegisterSpecialInverse("FCC", "NFD", false); Transliterator.RegisterSpecialInverse("FCD", "FCD", false); }
/// <summary> /// Construct a <see cref="CanonicalIterator"/> object. /// </summary> /// <param name="source">String to get results for.</param> /// <stable>ICU 2.4</stable> public CanonicalIterator(string source) { Norm2AllModes allModes = Norm2AllModes.GetNFCInstance(); nfd = allModes.Decomp; nfcImpl = allModes.Impl.EnsureCanonIterData(); SetSource(source); }
internal void EnsureOwnedData() { if (ownedData == null) { Normalizer2Impl nfcImpl = Norm2AllModes.GetNFCInstance().Impl; ownedData = new CollationData(nfcImpl); } data = ownedData; }
public ComposedCharIter(bool compat, int options) { if (compat) { n2impl = Norm2AllModes.GetNFKCInstance().Impl; } else { n2impl = Norm2AllModes.GetNFCInstance().Impl; } }
/// <summary> /// Returns a <see cref="Normalizer2"/> instance for Unicode NFKC_Casefold normalization. /// Same as GetInstance(null, "nfkc_cf", UNormalization2Mode.UNORM2_COMPOSE). /// Returns an unmodifiable singleton instance. /// </summary> /// <returns>The requested <see cref="Normalizer2"/>, if successful.</returns> public static Normalizer2 GetNFKCCasefoldInstance() { return(Norm2AllModes.GetNFKC_CFInstance().Comp); }
/// <summary> /// Returns a <see cref="Normalizer2"/> instance for Unicode NFKD normalization. /// Same as GetInstance(null, "nfkc", UNormalization2Mode.UNORM2_DECOMPOSE). /// Returns an unmodifiable singleton instance. /// </summary> /// <returns>The requested <see cref="Normalizer2"/>, if successful.</returns> public static Normalizer2 GetNFKDInstance() { return(Norm2AllModes.GetNFKCInstance().Decomp); }
/// <summary> /// Returns a <see cref="Normalizer2"/> instance for Unicode NFC normalization. /// Same as GetInstance(null, "nfc", UNormalization2Mode.UNORM2_COMPOSE). /// Returns an unmodifiable singleton instance. /// </summary> /// <returns>The requested <see cref="Normalizer2"/>, if successful.</returns> public static Normalizer2 GetNFCInstance() { return(Norm2AllModes.GetNFCInstance().Comp); }