ICU-924 add "Remove" transliterator

X-SVN-Rev: 4440
This commit is contained in:
Alan Liu 2001-04-04 06:46:17 +00:00
parent b115ad587f
commit 8dbd284136
4 changed files with 117 additions and 1 deletions

View file

@ -70,7 +70,7 @@ ucol.o ucol_bld.o ucol_elm.o ucol_cnt.o ucol_tok.o ucol_wgt.o ucoleitr.o \
udat.o umsg.o \
unifltlg.o unirange.o uniset.o unitohex.o unum.o \
dbbi.o dbbi_tbl.o rbbi.o rbbi_tbl.o brkdict.o nultrans.o jamohang.o hangjamo.o \
utrans.o
remtrans.o utrans.o
STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O))

View file

@ -466,6 +466,10 @@ SOURCE=.\rbt_set.cpp
# End Source File
# Begin Source File
SOURCE=.\remtrans.cpp
# End Source File
# Begin Source File
SOURCE=.\simpletz.cpp
!IF "$(CFG)" == "i18n - Win32 Release"
@ -1413,6 +1417,10 @@ SOURCE=.\rbt_set.h
# End Source File
# Begin Source File
SOURCE=.\unicode\remtrans.h
# End Source File
# Begin Source File
SOURCE=.\unicode\simpletz.h
!IF "$(CFG)" == "i18n - Win32 Release"

View file

@ -0,0 +1,54 @@
/*
**********************************************************************
* Copyright (c) 2001, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Date Name Description
* 04/02/2001 aliu Creation.
**********************************************************************
*/
#include "unicode/remtrans.h"
const UnicodeString RemoveTransliterator::ID = UnicodeString("Remove", "");
Transliterator* RemoveTransliterator::clone(void) const {
return new RemoveTransliterator();
}
void RemoveTransliterator::handleTransliterate(Replaceable& text, UTransPosition& offsets,
UBool /*isIncremental*/) const {
// Find runs of unfiltered characters and replace them with the
// empty string. This loop has been optimized to what is probably
// an unnecessary degree.
UnicodeString empty;
int32_t start = offsets.start;
for (;;) {
// Find first unfiltered character, if any
while (start < offsets.limit &&
filteredCharAt(text, start) == 0xFFFE) {
++start;
}
if (start >= offsets.limit) {
break;
}
// assert(start < offsets.limit &&
// filteredCharAt(text, start) != 0xFFFE);
// Find last unfiltered character
int32_t limit = start+1; // sic: +1
while (limit < offsets.limit &&
filteredCharAt(text, limit) != 0xFFFE) {
++limit;
}
// assert(start < limit);
// Remove characters
text.handleReplaceBetween(start, limit, empty);
limit -= start; // limit <= deleted length
offsets.contextLimit -= limit;
offsets.limit -= limit;
}
offsets.start = start;
}

View file

@ -0,0 +1,54 @@
/*
**********************************************************************
* Copyright (c) 2001, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Date Name Description
* 04/02/2001 aliu Creation.
**********************************************************************
*/
#ifndef REMTRANS_H
#define REMTRANS_H
#include "unicode/translit.h"
/**
* A transliterator that removes text.
* @author Alan Liu
*/
class U_I18N_API RemoveTransliterator : public Transliterator {
public:
/**
* ID for this transliterator.
*/
static const UnicodeString ID; // public for Transliterator
/**
* Constructs a transliterator.
*/
RemoveTransliterator();
/**
* Destructor.
*/
virtual ~RemoveTransliterator();
/**
* Transliterator API.
*/
Transliterator* clone(void) const;
/**
* Implements {@link Transliterator#handleTransliterate}.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
UBool isIncremental) const;
};
inline RemoveTransliterator::RemoveTransliterator() : Transliterator(ID, 0) {}
inline RemoveTransliterator::~RemoveTransliterator() {}
#endif