1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/*
4**********************************************************************
5* Copyright (C) 2001-2007, International Business Machines
6* Corporation and others. All Rights Reserved.
7**********************************************************************
8* Date Name Description
9* 05/24/01 aliu Creation.
10**********************************************************************
11*/
12#ifndef TITLETRN_H
13#define TITLETRN_H
14
15#include "unicode/utypes.h"
16
17#if !UCONFIG_NO_TRANSLITERATION
18
19#include "unicode/translit.h"
20#include "ucase.h"
21#include "casetrn.h"
22
23U_NAMESPACE_BEGIN
24
25/**
26 * A transliterator that converts all letters (as defined by
27 * <code>UCharacter.isLetter()</code>) to lower case, except for those
28 * letters preceded by non-letters. The latter are converted to title
29 * case using <code>u_totitle()</code>.
30 * @author Alan Liu
31 */
32class TitlecaseTransliterator : public CaseMapTransliterator {
33 public:
34
35 /**
36 * Constructs a transliterator.
37 * @param loc the given locale.
38 */
39 TitlecaseTransliterator();
40
41 /**
42 * Destructor.
43 */
44 virtual ~TitlecaseTransliterator();
45
46 /**
47 * Copy constructor.
48 */
49 TitlecaseTransliterator(const TitlecaseTransliterator&);
50
51 /**
52 * Transliterator API.
53 * @return a copy of the object.
54 */
55 virtual TitlecaseTransliterator* clone() const;
56
57 /**
58 * ICU "poor man's RTTI", returns a UClassID for the actual class.
59 */
60 virtual UClassID getDynamicClassID() const;
61
62 /**
63 * ICU "poor man's RTTI", returns a UClassID for this class.
64 */
65 U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
66
67protected:
68
69 /**
70 * Implements {@link Transliterator#handleTransliterate}.
71 * @param text the buffer holding transliterated and
72 * untransliterated text
73 * @param offset the start and limit of the text, the position
74 * of the cursor, and the start and limit of transliteration.
75 * @param incremental if true, assume more text may be coming after
76 * pos.contextLimit. Otherwise, assume the text is complete.
77 */
78 virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
79 UBool isIncremental) const;
80
81private:
82 /**
83 * Assignment operator.
84 */
85 TitlecaseTransliterator& operator=(const TitlecaseTransliterator&);
86};
87
88U_NAMESPACE_END
89
90#endif /* #if !UCONFIG_NO_TRANSLITERATION */
91
92#endif
93