1
- // Copyright 2006 Nemanja Trifunovic
1
+ // Copyright 2006-2016 Nemanja Trifunovic
2
2
3
3
/*
4
4
Permission is hereby granted, free of charge, to any person or organization
@@ -41,7 +41,7 @@ namespace utf8
41
41
class invalid_code_point : public exception {
42
42
uint32_t cp;
43
43
public:
44
- invalid_code_point (uint32_t cp ) : cp(cp ) {}
44
+ invalid_code_point (uint32_t codepoint ) : cp(codepoint ) {}
45
45
virtual const char * what () const throw() { return " Invalid code point" ; }
46
46
uint32_t code_point () const {return cp;}
47
47
};
@@ -107,7 +107,9 @@ namespace utf8
107
107
*out++ = *it;
108
108
break ;
109
109
case internal::NOT_ENOUGH_ROOM:
110
- throw not_enough_room ();
110
+ out = utf8::append (replacement, out);
111
+ start = end;
112
+ break ;
111
113
case internal::INVALID_LEAD:
112
114
out = utf8::append (replacement, out);
113
115
++start;
@@ -194,10 +196,10 @@ namespace utf8
194
196
}
195
197
196
198
template <typename octet_iterator, typename distance_type>
197
- void retreat (octet_iterator& it, distance_type n, octet_iterator start )
199
+ void retreat (octet_iterator& it, distance_type n, octet_iterator end )
198
200
{
199
201
for (distance_type i = 0 ; i < n; ++i)
200
- utf8::prior (it, start );
202
+ utf8::prior (it, end );
201
203
}
202
204
203
205
template <typename octet_iterator>
@@ -240,7 +242,7 @@ namespace utf8
240
242
template <typename u16bit_iterator, typename octet_iterator>
241
243
u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result)
242
244
{
243
- while (start != end) {
245
+ while (start < end) {
244
246
uint32_t cp = utf8::next (start, end);
245
247
if (cp > 0xffff ) { // make a surrogate pair
246
248
*result++ = static_cast <uint16_t >((cp >> 10 ) + internal::LEAD_OFFSET);
@@ -264,7 +266,7 @@ namespace utf8
264
266
template <typename octet_iterator, typename u32bit_iterator>
265
267
u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result)
266
268
{
267
- while (start != end)
269
+ while (start < end)
268
270
(*result++) = utf8::next (start, end);
269
271
270
272
return result;
@@ -279,9 +281,9 @@ namespace utf8
279
281
public:
280
282
iterator () {}
281
283
explicit iterator (const octet_iterator& octet_it,
282
- const octet_iterator& range_start ,
283
- const octet_iterator& range_end ) :
284
- it(octet_it), range_start(range_start ), range_end(range_end )
284
+ const octet_iterator& rangestart ,
285
+ const octet_iterator& rangeend ) :
286
+ it(octet_it), range_start(rangestart ), range_end(rangeend )
285
287
{
286
288
if (it < range_start || it > range_end)
287
289
throw std::out_of_range (" Invalid utf-8 iterator position" );
0 commit comments