1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/intl/icu/source/i18n/remtrans.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,69 @@ 1.4 +/* 1.5 +********************************************************************** 1.6 +* Copyright (c) 2001-2011, International Business Machines 1.7 +* Corporation and others. All Rights Reserved. 1.8 +********************************************************************** 1.9 +* Date Name Description 1.10 +* 04/02/2001 aliu Creation. 1.11 +********************************************************************** 1.12 +*/ 1.13 + 1.14 +#include "unicode/utypes.h" 1.15 + 1.16 +#if !UCONFIG_NO_TRANSLITERATION 1.17 + 1.18 +#include "remtrans.h" 1.19 +#include "unicode/unifilt.h" 1.20 + 1.21 +static const UChar CURR_ID[] = {65, 110, 121, 45, 0x52, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x00}; /* "Any-Remove" */ 1.22 + 1.23 +U_NAMESPACE_BEGIN 1.24 + 1.25 +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RemoveTransliterator) 1.26 + 1.27 +/** 1.28 + * Factory method 1.29 + */ 1.30 +static Transliterator* RemoveTransliterator_create(const UnicodeString& /*ID*/, 1.31 + Transliterator::Token /*context*/) { 1.32 + /* We don't need the ID or context. We just remove data */ 1.33 + return new RemoveTransliterator(); 1.34 +} 1.35 + 1.36 +/** 1.37 + * System registration hook. 1.38 + */ 1.39 +void RemoveTransliterator::registerIDs() { 1.40 + 1.41 + Transliterator::_registerFactory(UnicodeString(TRUE, ::CURR_ID, -1), 1.42 + RemoveTransliterator_create, integerToken(0)); 1.43 + 1.44 + Transliterator::_registerSpecialInverse(UNICODE_STRING_SIMPLE("Remove"), 1.45 + UNICODE_STRING_SIMPLE("Null"), FALSE); 1.46 +} 1.47 + 1.48 +RemoveTransliterator::RemoveTransliterator() : Transliterator(UnicodeString(TRUE, ::CURR_ID, -1), 0) {} 1.49 + 1.50 +RemoveTransliterator::~RemoveTransliterator() {} 1.51 + 1.52 +Transliterator* RemoveTransliterator::clone(void) const { 1.53 + Transliterator* result = new RemoveTransliterator(); 1.54 + if (result != NULL && getFilter() != 0) { 1.55 + result->adoptFilter((UnicodeFilter*)(getFilter()->clone())); 1.56 + } 1.57 + return result; 1.58 +} 1.59 + 1.60 +void RemoveTransliterator::handleTransliterate(Replaceable& text, UTransPosition& index, 1.61 + UBool /*isIncremental*/) const { 1.62 + // Our caller (filteredTransliterate) has already narrowed us 1.63 + // to an unfiltered run. Delete it. 1.64 + UnicodeString empty; 1.65 + text.handleReplaceBetween(index.start, index.limit, empty); 1.66 + int32_t len = index.limit - index.start; 1.67 + index.contextLimit -= len; 1.68 + index.limit -= len; 1.69 +} 1.70 +U_NAMESPACE_END 1.71 + 1.72 +#endif /* #if !UCONFIG_NO_TRANSLITERATION */