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