Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(518)

Side by Side Diff: source/i18n/digitaffix.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/i18n/digitaffix.h ('k') | source/i18n/digitaffixesandpadding.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2015, International Business Machines
3 * Corporation and others. All Rights Reserved.
4 *
5 * file name: digitaffix.cpp
6 */
7
8 #include "unicode/utypes.h"
9
10 #if !UCONFIG_NO_FORMATTING
11
12 #include "digitaffix.h"
13 #include "fphdlimp.h"
14 #include "uassert.h"
15 #include "unistrappender.h"
16
17 U_NAMESPACE_BEGIN
18
19 DigitAffix::DigitAffix() : fAffix(), fAnnotations() {
20 }
21
22 DigitAffix::DigitAffix(
23 const UChar *value, int32_t charCount, int32_t fieldId)
24 : fAffix(value, charCount),
25 fAnnotations(charCount, (UChar) fieldId, charCount) {
26 }
27
28 void
29 DigitAffix::remove() {
30 fAffix.remove();
31 fAnnotations.remove();
32 }
33
34 void
35 DigitAffix::appendUChar(UChar value, int32_t fieldId) {
36 fAffix.append(value);
37 fAnnotations.append((UChar) fieldId);
38 }
39
40 void
41 DigitAffix::append(const UnicodeString &value, int32_t fieldId) {
42 fAffix.append(value);
43 {
44 UnicodeStringAppender appender(fAnnotations);
45 int32_t len = value.length();
46 for (int32_t i = 0; i < len; ++i) {
47 appender.append((UChar) fieldId);
48 }
49 }
50 }
51
52 void
53 DigitAffix::setTo(const UnicodeString &value, int32_t fieldId) {
54 fAffix = value;
55 fAnnotations.remove();
56 {
57 UnicodeStringAppender appender(fAnnotations);
58 int32_t len = value.length();
59 for (int32_t i = 0; i < len; ++i) {
60 appender.append((UChar) fieldId);
61 }
62 }
63 }
64
65 void
66 DigitAffix::append(const UChar *value, int32_t charCount, int32_t fieldId) {
67 fAffix.append(value, charCount);
68 {
69 UnicodeStringAppender appender(fAnnotations);
70 for (int32_t i = 0; i < charCount; ++i) {
71 appender.append((UChar) fieldId);
72 }
73 }
74 }
75
76 UnicodeString &
77 DigitAffix::format(FieldPositionHandler &handler, UnicodeString &appendTo) const {
78 int32_t len = fAffix.length();
79 if (len == 0) {
80 return appendTo;
81 }
82 if (!handler.isRecording()) {
83 return appendTo.append(fAffix);
84 }
85 U_ASSERT(fAffix.length() == fAnnotations.length());
86 int32_t appendToStart = appendTo.length();
87 int32_t lastId = (int32_t) fAnnotations.charAt(0);
88 int32_t lastIdStart = 0;
89 for (int32_t i = 1; i < len; ++i) {
90 int32_t id = (int32_t) fAnnotations.charAt(i);
91 if (id != lastId) {
92 if (lastId != UNUM_FIELD_COUNT) {
93 handler.addAttribute(lastId, appendToStart + lastIdStart, append ToStart + i);
94 }
95 lastId = id;
96 lastIdStart = i;
97 }
98 }
99 if (lastId != UNUM_FIELD_COUNT) {
100 handler.addAttribute(lastId, appendToStart + lastIdStart, appendToStart + len);
101 }
102 return appendTo.append(fAffix);
103 }
104
105 U_NAMESPACE_END
106
107 #endif /* #if !UCONFIG_NO_FORMATTING */
OLDNEW
« no previous file with comments | « source/i18n/digitaffix.h ('k') | source/i18n/digitaffixesandpadding.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698