1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho* Copyright (c) 2001-2008, International Business Machines 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 04/02/2001 aliu Creation. 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_TRANSLITERATION 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "remtrans.h" 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/unifilt.h" 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UChar CURR_ID[] = {65, 110, 121, 45, 0x52, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x00}; /* "Any-Remove" */ 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUOBJECT_DEFINE_RTTI_IMPLEMENTATION(RemoveTransliterator) 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Factory method 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic Transliterator* RemoveTransliterator_create(const UnicodeString& /*ID*/, 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator::Token /*context*/) { 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* We don't need the ID or context. We just remove data */ 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return new RemoveTransliterator(); 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * System registration hook. 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid RemoveTransliterator::registerIDs() { 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator::_registerFactory(::CURR_ID, RemoveTransliterator_create, integerToken(0)); 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator::_registerSpecialInverse(UNICODE_STRING_SIMPLE("Remove"), 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UNICODE_STRING_SIMPLE("Null"), FALSE); 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruRemoveTransliterator::RemoveTransliterator() : Transliterator(::CURR_ID, 0) {} 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruRemoveTransliterator::~RemoveTransliterator() {} 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruTransliterator* RemoveTransliterator::clone(void) const { 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator* result = new RemoveTransliterator(); 5085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (result != NULL && getFilter() != 0) { 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result->adoptFilter((UnicodeFilter*)(getFilter()->clone())); 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid RemoveTransliterator::handleTransliterate(Replaceable& text, UTransPosition& index, 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool /*isIncremental*/) const { 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Our caller (filteredTransliterate) has already narrowed us 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // to an unfiltered run. Delete it. 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString empty; 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru text.handleReplaceBetween(index.start, index.limit, empty); 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t len = index.limit - index.start; 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru index.contextLimit -= len; 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru index.limit -= len; 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_TRANSLITERATION */ 69