// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright ( C ) 2012 - 2016 , International Business Machines
* Corporation and others . All Rights Reserved .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* file name : listformatter . h
* encoding : UTF - 8
* tab size : 8 ( not used )
* indentation : 4
*
* created on : 20120426
* created by : Umesh P . Nair
*/
#ifndef __LISTFORMATTER_H__
#define __LISTFORMATTER_H__
#include "unicode/utypes.h"
#if U_SHOW_CPLUSPLUS_API
#if !UCONFIG_NO_FORMATTING
#include "unicode/unistr.h"
#include "unicode/locid.h"
#include "unicode/formattedvalue.h"
#include "unicode/ulistformatter.h"
U_NAMESPACE_BEGIN
class FieldPositionHandler;
class FormattedListData;
class ListFormatter;
/** @internal */
class Hashtable;
/** @internal */
struct ListFormatInternal;
/* The following can't be #ifndef U_HIDE_INTERNAL_API, needed for other .h file declarations */
/**
* @ internal
* \ cond
*/
struct ListFormatData : public UMemory {
UnicodeString twoPattern;
UnicodeString startPattern;
UnicodeString middlePattern;
UnicodeString endPattern;
Locale locale;
ListFormatData(
const UnicodeString& two,
const UnicodeString& start,
const Unic
odeString& middle, const UnicodeString& end,
const Locale& loc) :
twoPattern(two), startPattern(start), middlePattern(middle), endPattern(end), locale(loc) {}
};
/** \endcond */
/**
* \ file
* \ brief C + + API : API for formatting a list .
*/
/**
* An immutable class containing the result of a list formatting operation .
*
* Instances of this class are immutable and thread - safe .
*
* When calling nextPosition ( ) :
* The fields are returned from start to end . The special field category
* UFIELD_CATEGORY_LIST_SPAN is used to indicate which argument
* was inserted at the given position . The span category will
* always occur before the corresponding instance of UFIELD_CATEGORY_LIST
* in the nextPosition ( ) iterator .
*
* Not intended for public subclassing .
*
* @ stable ICU 64
*/
class U_I18N_API FormattedList : public UMemory, public FormattedValue {
public:
/**
* Default constructor ; makes an empty FormattedList .
* @ stable ICU 64
*/
FormattedList() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
/**
* Move constructor : Leaves the source FormattedList in an undefined state .
* @ stable ICU 64
*/
FormattedList(FormattedList&& src) noexcept;
/**
* Destruct an instance of FormattedList .
* @ stable ICU 64
*/
virtual ~FormattedList() override;
/** Copying not supported; use move constructor instead. */
FormattedList(const FormattedList&) = delete ;
/** Copying not supported; use move assignment instead. */
FormattedList& operator =(const FormattedList&) = delete ;
/**
* Move assignment : Leaves the source FormattedList in an undefined state .
* @ stable ICU 64
*/
FormattedList& operator =(FormattedList&& src) noexcept;
/** @copydoc FormattedValue::toString() */
UnicodeString toString(UErrorCode& status) const override;
/** @copydoc FormattedValue::toTempString() */
UnicodeString toTempString(UErrorCode& status) const override;
/** @copydoc FormattedValue::appendTo() */
Appendable &appendTo(Appendable& appendable, UErrorCode& status) const override;
/** @copydoc FormattedValue::nextPosition() */
UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const override;
private :
FormattedListData *fData;
UErrorCode fErrorCode;
explicit FormattedList(FormattedListData *results)
: fData(results), fErrorCode(U_ZERO_ERROR) {}
explicit FormattedList(UErrorCode errorCode)
: fData(nullptr), fErrorCode(errorCode) {}
friend class ListFormatter;
};
/**
* An immutable class for formatting a list , using data from CLDR ( or supplied
* separately ) .
*
* Example : Input data [ " Alice " , " Bob " , " Charlie " , " Delta " ] will be formatted
* as " Alice , Bob , Charlie and Delta " in English .
*
* The ListFormatter class is not intended for public subclassing .
* @ stable ICU 50
*/
class U_I18N_API ListFormatter : public UObject{
public:
/**
* Copy constructor .
* @ stable ICU 52
*/
ListFormatter(const ListFormatter&);
/**
* Assignment operator .
* @ stable ICU 52
*/
ListFormatter& operator =(const ListFormatter& other);
/**
* Creates a ListFormatter appropriate for the default locale .
*
* @ param errorCode ICU error code , set if no data available for default locale .
* @ return Pointer to a ListFormatter object for the default locale ,
* created from internal data derived from CLDR data .
* @ stable ICU 50
*/
static ListFormatter* createInstance(UErrorCode& errorCode);
/**
* Creates a ListFormatter appropriate for a locale .
*
* @ param locale The locale .
* @ param errorCode ICU error code , set if no data available for the given locale .
* @ return A ListFormatter object created from internal data derived from
* CLDR data .
* @ stable ICU 50
*/
static ListFormatter* createInstance(const Locale& locale, UErrorCode& errorCode);
/**
* Creates a ListFormatter for the given locale , list type , and style .
*
* @ param locale The locale .
* @ param type The type of list formatting to use .
* @ param width The width of formatting to use .
* @ param errorCode ICU error code , set if no data available for the given locale .
* @ return A ListFormatter object created from internal data derived from CLDR data .
* @ stable ICU 67
*/
static ListFormatter* createInstance(
const Locale& locale, UListFormatterType type, UListFormatterWidth width, UErrorCode& errorCode);
/**
* Destructor .
*
* @ stable ICU 50
*/
virtual ~ListFormatter();
/**
* Formats a list of strings .
*
* @ param items An array of strings to be combined and formatted .
* @ param n_items Length of the array items .
* @ param appendTo The string to which the result should be appended to .
* @ param errorCode ICU error code , set if there is an error .
* @ return Formatted string combining the elements of items , appended to appendTo .
* @ stable ICU 50
*/
UnicodeString& format(const UnicodeString items[], int32_t n_items,
UnicodeString& appendTo, UErrorCode& errorCode) const ;
/**
* Formats a list of strings to a FormattedList , which exposes field
* position information . The FormattedList contains more information than
* a FieldPositionIterator .
*
* @ param items An array of strings to be combined and formatted .
* @ param n_items Length of the array items .
* @ param errorCode ICU error code returned here .
* @ return A FormattedList containing field information .
* @ stable ICU 64
*/
FormattedList formatStringsToValue(
const UnicodeString items[],
int32_t n_items,
UErrorCode& errorCode) const ;
#ifndef U_HIDE_INTERNAL_API
/**
@ internal for MeasureFormat
*/
UnicodeString& format(
const UnicodeString items[],
int32_t n_items,
UnicodeString& appendTo,
int32_t index,
int32_t &offset,
UErrorCode& errorCode) const ;
/**
* @ internal constructor made public for testing .
*/
ListFormatter(const ListFormatData &data, UErrorCode &errorCode);
/**
* @ internal constructor made public for testing .
*/
ListFormatter(const ListFormatInternal* listFormatterInternal);
#endif /* U_HIDE_INTERNAL_API */
private :
/**
* Creates a ListFormatter appropriate for a locale and style .
*
* @ param locale The locale .
* @ param style the style , either " standard " , " or " , " unit " , " unit - narrow " , or " unit - short "
*/
static ListFormatter* createInstance(const Locale& locale, const char * style, UErrorCode& errorCode);
static void initializeHash(UErrorCode& errorCode);
static const ListFormatInternal* getListFormatInternal(const Locale& locale, const char *style, UErrorCode& errorCode);
struct U_HIDDEN ListPatternsSink;
static ListFormatInternal* loadListFormatInternal(const Locale& locale, const char * style, UErrorCode& errorCode);
ListFormatter() = delete ;
ListFormatInternal* owned;
const ListFormatInternal* data;
};
U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_FORMATTING */
#endif /* U_SHOW_CPLUSPLUS_API */
#endif // __LISTFORMATTER_H__
Messung V0.5 in Prozent C=95 H=94 G=94
¤ Dauer der Verarbeitung: 0.6 Sekunden
¤
*© Formatika GbR, Deutschland