intl/icu/source/i18n/remtrans.cpp

changeset 0
6474c204b198
     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 */

mercurial