| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv
ed. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv
ed. |
| 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) | 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) |
| 6 * Copyright (C) 2010 Daniel Bates (dbates@intudata.com) | 6 * Copyright (C) 2010 Daniel Bates (dbates@intudata.com) |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 { | 151 { |
| 152 return toNumeric(number, alphabet, size); | 152 return toNumeric(number, alphabet, size); |
| 153 } | 153 } |
| 154 | 154 |
| 155 template <typename CharacterType, size_t size> | 155 template <typename CharacterType, size_t size> |
| 156 static inline String toSymbolic(int number, const CharacterType(&alphabet)[size]
) | 156 static inline String toSymbolic(int number, const CharacterType(&alphabet)[size]
) |
| 157 { | 157 { |
| 158 return toSymbolic(number, alphabet, size); | 158 return toSymbolic(number, alphabet, size); |
| 159 } | 159 } |
| 160 | 160 |
| 161 static int toHebrewUnder1000(int number, UChar letters[5]) | 161 static void toHebrewUnder1000(int number, Vector<UChar>& letters) |
| 162 { | 162 { |
| 163 // FIXME: CSS3 mentions various refinements not implemented here. | 163 // FIXME: CSS3 mentions various refinements not implemented here. |
| 164 // FIXME: Should take a look at Mozilla's HebrewToText function (in nsBullet
Frame). | 164 // FIXME: Should take a look at Mozilla's HebrewToText function (in nsBullet
Frame). |
| 165 ASSERT(number >= 0 && number < 1000); | 165 ASSERT(number >= 0 && number < 1000); |
| 166 int length = 0; | |
| 167 int fourHundreds = number / 400; | 166 int fourHundreds = number / 400; |
| 168 for (int i = 0; i < fourHundreds; i++) | 167 for (int i = 0; i < fourHundreds; i++) |
| 169 letters[length++] = 1511 + 3; | 168 letters.prepend(1511 + 3); |
| 170 number %= 400; | 169 number %= 400; |
| 171 if (number / 100) | 170 if (number / 100) |
| 172 letters[length++] = 1511 + (number / 100) - 1; | 171 letters.prepend(1511 + (number / 100) - 1); |
| 173 number %= 100; | 172 number %= 100; |
| 174 if (number == 15 || number == 16) { | 173 if (number == 15 || number == 16) { |
| 175 letters[length++] = 1487 + 9; | 174 letters.prepend(1487 + 9); |
| 176 letters[length++] = 1487 + number - 9; | 175 letters.prepend(1487 + number - 9); |
| 177 } else { | 176 } else { |
| 178 if (int tens = number / 10) { | 177 if (int tens = number / 10) { |
| 179 static const UChar hebrewTens[9] = { 1497, 1499, 1500, 1502, 1504, 1
505, 1506, 1508, 1510 }; | 178 static const UChar hebrewTens[9] = { 1497, 1499, 1500, 1502, 1504, 1
505, 1506, 1508, 1510 }; |
| 180 letters[length++] = hebrewTens[tens - 1]; | 179 letters.prepend(hebrewTens[tens - 1]); |
| 181 } | 180 } |
| 182 if (int ones = number % 10) | 181 if (int ones = number % 10) |
| 183 letters[length++] = 1487 + ones; | 182 letters.prepend(1487 + ones); |
| 184 } | 183 } |
| 185 ASSERT(length <= 5); | |
| 186 return length; | |
| 187 } | 184 } |
| 188 | 185 |
| 189 static String toHebrew(int number) | 186 static String toHebrew(int number) |
| 190 { | 187 { |
| 191 // FIXME: CSS3 mentions ways to make this work for much larger numbers. | 188 // FIXME: CSS3 mentions ways to make this work for much larger numbers. |
| 192 ASSERT(number >= 0 && number <= 999999); | 189 ASSERT(number >= 0 && number <= 999999); |
| 193 | 190 |
| 194 if (number == 0) { | 191 if (number == 0) { |
| 195 static const UChar hebrewZero[3] = { 0x05D0, 0x05E4, 0x05E1 }; | 192 static const UChar hebrewZero[3] = { 0x05E1, 0x05E4, 0x05D0 }; |
| 196 return String(hebrewZero, 3); | 193 return String(hebrewZero, 3); |
| 197 } | 194 } |
| 198 | 195 |
| 199 const int lettersSize = 11; // big enough for two 5-digit sequences plus a q
uote mark between | 196 Vector<UChar> letters; |
| 200 UChar letters[lettersSize]; | 197 if (number > 999) { |
| 201 | 198 toHebrewUnder1000(number / 1000, letters); |
| 202 int length; | 199 letters.prepend('\''); |
| 203 if (number < 1000) { | |
| 204 length = 0; | |
| 205 } else { | |
| 206 length = toHebrewUnder1000(number / 1000, letters); | |
| 207 letters[length++] = '\''; | |
| 208 number = number % 1000; | 200 number = number % 1000; |
| 209 } | 201 } |
| 210 length += toHebrewUnder1000(number, letters + length); | 202 toHebrewUnder1000(number, letters); |
| 211 | 203 return String(letters); |
| 212 ASSERT(length <= lettersSize); | |
| 213 return String(letters, length); | |
| 214 } | 204 } |
| 215 | 205 |
| 216 static int toArmenianUnder10000(int number, bool upper, bool addCircumflex, UCha
r letters[9]) | 206 static int toArmenianUnder10000(int number, bool upper, bool addCircumflex, UCha
r letters[9]) |
| 217 { | 207 { |
| 218 ASSERT(number >= 0 && number < 10000); | 208 ASSERT(number >= 0 && number < 10000); |
| 219 int length = 0; | 209 int length = 0; |
| 220 | 210 |
| 221 int lowerOffset = upper ? 0 : 0x0030; | 211 int lowerOffset = upper ? 0 : 0x0030; |
| 222 | 212 |
| 223 if (int thousands = number / 1000) { | 213 if (int thousands = number / 1000) { |
| (...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 957 return toHebrew(count); | 947 return toHebrew(count); |
| 958 } | 948 } |
| 959 | 949 |
| 960 ASSERT_NOT_REACHED(); | 950 ASSERT_NOT_REACHED(); |
| 961 return ""; | 951 return ""; |
| 962 } | 952 } |
| 963 | 953 |
| 964 } // namespace ListMarkerText | 954 } // namespace ListMarkerText |
| 965 | 955 |
| 966 } // namespace blink | 956 } // namespace blink |
| OLD | NEW |