| Index: icu46/source/i18n/funcrepl.cpp
|
| ===================================================================
|
| --- icu46/source/i18n/funcrepl.cpp (revision 0)
|
| +++ icu46/source/i18n/funcrepl.cpp (revision 0)
|
| @@ -0,0 +1,125 @@
|
| +/*
|
| +**********************************************************************
|
| +* Copyright (c) 2002-2008, International Business Machines Corporation
|
| +* and others. All Rights Reserved.
|
| +**********************************************************************
|
| +* Date Name Description
|
| +* 02/04/2002 aliu Creation.
|
| +**********************************************************************
|
| +*/
|
| +
|
| +#include "unicode/utypes.h"
|
| +
|
| +#if !UCONFIG_NO_TRANSLITERATION
|
| +
|
| +#include "unicode/translit.h"
|
| +#include "unicode/uniset.h"
|
| +#include "funcrepl.h"
|
| +
|
| +static const UChar AMPERSAND = 38; // '&'
|
| +static const UChar OPEN[] = {40,32,0}; // "( "
|
| +static const UChar CLOSE[] = {32,41,0}; // " )"
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(FunctionReplacer)
|
| +
|
| +/**
|
| + * Construct a replacer that takes the output of the given
|
| + * replacer, passes it through the given transliterator, and emits
|
| + * the result as output.
|
| + */
|
| +FunctionReplacer::FunctionReplacer(Transliterator* adoptedTranslit,
|
| + UnicodeFunctor* adoptedReplacer) {
|
| + translit = adoptedTranslit;
|
| + replacer = adoptedReplacer;
|
| +}
|
| +
|
| +/**
|
| + * Copy constructor.
|
| + */
|
| +FunctionReplacer::FunctionReplacer(const FunctionReplacer& other) :
|
| + UnicodeFunctor(other),
|
| + UnicodeReplacer(other)
|
| +{
|
| + translit = other.translit->clone();
|
| + replacer = other.replacer->clone();
|
| +}
|
| +
|
| +/**
|
| + * Destructor
|
| + */
|
| +FunctionReplacer::~FunctionReplacer() {
|
| + delete translit;
|
| + delete replacer;
|
| +}
|
| +
|
| +/**
|
| + * Implement UnicodeFunctor
|
| + */
|
| +UnicodeFunctor* FunctionReplacer::clone() const {
|
| + return new FunctionReplacer(*this);
|
| +}
|
| +
|
| +/**
|
| + * UnicodeFunctor API. Cast 'this' to a UnicodeReplacer* pointer
|
| + * and return the pointer.
|
| + */
|
| +UnicodeReplacer* FunctionReplacer::toReplacer() const {
|
| + return (UnicodeReplacer*) this;
|
| +}
|
| +
|
| +/**
|
| + * UnicodeReplacer API
|
| + */
|
| +int32_t FunctionReplacer::replace(Replaceable& text,
|
| + int32_t start,
|
| + int32_t limit,
|
| + int32_t& cursor)
|
| +{
|
| +
|
| + // First delegate to subordinate replacer
|
| + int32_t len = replacer->toReplacer()->replace(text, start, limit, cursor);
|
| + limit = start + len;
|
| +
|
| + // Now transliterate
|
| + limit = translit->transliterate(text, start, limit);
|
| +
|
| + return limit - start;
|
| +}
|
| +
|
| +/**
|
| + * UnicodeReplacer API
|
| + */
|
| +UnicodeString& FunctionReplacer::toReplacerPattern(UnicodeString& rule,
|
| + UBool escapeUnprintable) const {
|
| + UnicodeString str;
|
| + rule.truncate(0);
|
| + rule.append(AMPERSAND);
|
| + rule.append(translit->getID());
|
| + rule.append(OPEN);
|
| + rule.append(replacer->toReplacer()->toReplacerPattern(str, escapeUnprintable));
|
| + rule.append(CLOSE);
|
| + return rule;
|
| +}
|
| +
|
| +/**
|
| + * Implement UnicodeReplacer
|
| + */
|
| +void FunctionReplacer::addReplacementSetTo(UnicodeSet& toUnionTo) const {
|
| + UnicodeSet set;
|
| + toUnionTo.addAll(translit->getTargetSet(set));
|
| +}
|
| +
|
| +/**
|
| + * UnicodeFunctor API
|
| + */
|
| +void FunctionReplacer::setData(const TransliterationRuleData* d) {
|
| + replacer->setData(d);
|
| +}
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| +#endif /* #if !UCONFIG_NO_TRANSLITERATION */
|
| +
|
| +//eof
|
|
|
| Property changes on: icu46/source/i18n/funcrepl.cpp
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|