A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://www.ncbi.nlm.nih.gov/IEB/ToolBox/CPP_DOC/doxyhtml/ncbistr_8cpp_source.html below:

NCBI C++ ToolKit: src/corelib/ncbistr.cpp Source File

41 #include <corelib/ncbi_base64.h> 51 #define NCBI_USE_ERRCODE_X Corelib_Util 58 static const char kDigitUpper

[] =

"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

;

59 static const char kDigitLower

[] =

"0123456789abcdefghijklmnopqrstuvwxyz"

;

70 #if defined(HAVE_WSTRING) 79 #ifdef NCBI_PRODUCTION_VER 80 extern const char

*

const

kNcbiProductionVersionString;

81 const char

*

const

kNcbiProductionVersionString

86 #if !defined(NCBI_OS_MSWIN) && \ 87  !(defined(NCBI_OS_LINUX) && \ 88  (defined(NCBI_COMPILER_GCC) || defined(NCBI_COMPILER_ANY_CLANG))) 89 const string

* CNcbiEmptyString::m_Str = 0;

90 const string

& CNcbiEmptyString::FirstGet(

void

) {

91  static const string

s_Str =

""

;

96 const

wstring* CNcbiEmptyWString::m_Str = 0;

97 const

wstring& CNcbiEmptyWString::FirstGet(

void

) {

98  static const

wstring s_Str = L

""

;

110  if

(!

isspace

((

unsigned char

)

str

[idx])) {

128  if

(

int

res = memcmp(s1.

data

(), s2.

data

(),

min

(n1, n2))) {

131  return

(n1 == n2) ? 0 : (n1 > n2 ? 1 : -1);

147  const char

* s = s1.

data

() + pos;

148  while

(

n

&& *s2 && *s == *s2) {

162  return

s2.

empty

() ? 0 : -1;

171  if

(n_cmp > s2.

length

()) {

174  const char

* s = s1.

data

() + pos;

175  const char

* p = s2.

data

();

176  while

(n_cmp && *s == *p) {

183  return n

> s2.

length

() ? 1 : -1;

202  const char

* p1 = s1.

data

();

203  const char

* p2 = s2.

data

();

205  while

(

n

&& (*p1 == *p2 ||

206  tolower

((

unsigned char

)(*p1)) ==

tolower

((

unsigned char

)(*p2))) ) {

210  return

(n1 == n2) ? 0 : (n1 > n2 ? 1 : -1);

215  return tolower

((

unsigned char

)(*p1)) -

tolower

((

unsigned char

)(*p2));

233  const char

* s = s1.

data

() + pos;

234  while

(

n

&& *s2 && (*s == *s2 ||

235  tolower

((

unsigned char

)(*s)) ==

tolower

((

unsigned char

)(*s2))) ) {

244  return tolower

((

unsigned char

)(*s)) -

tolower

((

unsigned char

)(*s2));

252  return

s2.

empty

() ? 0 : -1;

262  if

(n_cmp > s2.

length

()) {

265  const char

* s = s1.

data

() + pos;

266  const char

* p = s2.

data

();

267  while

(n_cmp && (*s == *p ||

268  tolower

((

unsigned char

)(*s)) ==

tolower

((

unsigned char

)(*p))) ) {

277  return tolower

((

unsigned char

)(*s)) -

tolower

((

unsigned char

)(*p));

294  size_t

str_pos = 0, mask_pos = 0;

296  for

( ; (m =

mask

[mask_pos]); ++str_pos, ++mask_pos) {

300  if

(!s && m !=

'*'

) {

310  while

( (m =

mask

[mask_pos]) ==

'*'

) mask_pos++;

328  if

(!(m =

mask

[++mask_pos]))

336

s = (char)

tolower

((

unsigned char

) s);

340  if

(!(

a

=

mask

[mask_pos++]))

342  if

(

mask

[mask_pos] ==

'-'

&&

mask

[mask_pos+1] !=

']'

) {

344  if

(!(

b

=

mask

[mask_pos++]))

350  a

= (char)

tolower

((

unsigned char

)

a

);

351  b

= (char)

tolower

((

unsigned char

)

b

);

353  if

(

a

<= s && s <=

b

)

356

}

while

(

mask

[mask_pos] !=

']'

);

362  if

(!(m =

mask

[++mask_pos]))

370  if

(s != m &&

tolower

((

unsigned char

)s) !=

tolower

((

unsigned char

)m))

380  if

(

str

[str_pos] ) {

399

*

str

= (char)

tolower

((

unsigned char

)(*str));

408

*it = (char)

tolower

((

unsigned char

)(*it));

418

*

str

= (char)

toupper

((

unsigned char

)(*str));

427

*it = (char)

toupper

((

unsigned char

)(*it));

459  int error

= 0, ret = -1;

467  if

(

str

.data()[0] ==

'+'

&&

len

> 1) {

471  for

(;

i

<

len

; ++

i

) {

472  unsigned

d =

str

.data()[

i

] -

'0'

;

477  unsigned

nv = v * 10 + d;

478  const unsigned

kOverflowLimit = (INT_MAX - 9) / 10 + 1;

479  if

(v >= kOverflowLimit) {

481  if

(v > kOverflowLimit || nv > INT_MAX) {

489

ret =

static_cast<int>

(v);

548

s.reserve(

str

.length() +

msg

.length() + 50);

549

s +=

"Cannot convert string '"

;

553  if

( !

msg

.empty() ) {

561 #define S2N_CONVERT_GUARD(flags) \ 562  CS2N_Guard err_guard(flags, false) 566 #define S2N_CONVERT_GUARD_EX(flags) \ 567  CS2N_Guard err_guard(flags, true) 569 #define S2N_CONVERT_ERROR(to_type, msg, errcode, pos) \ 571  err_guard.Set(errcode); \ 572  if ( !(flags & NStr::fConvErr_NoThrow) ) { \ 574  NCBI_THROW2(CStringException, eConvert, \ 575  err_guard.Message(str, #to_type, msg), pos); \ 583  if (flags & NStr::fConvErr_NoErrMessage) { \ 584  CNcbiError::SetErrno(err_guard.Errno()); \ 586  CNcbiError::SetErrno(err_guard.Errno(), \ 587  err_guard.Message(str, #to_type, msg)); \ 594 #define S2N_CONVERT_ERROR_INVAL(to_type) \ 595  S2N_CONVERT_ERROR(to_type, kEmptyStr, EINVAL, pos) 597 #define S2N_CONVERT_ERROR_RADIX(to_type, msg) \ 598  S2N_CONVERT_ERROR(to_type, msg, EINVAL, pos) 600 #define S2N_CONVERT_ERROR_OVERFLOW(to_type) \ 601  S2N_CONVERT_ERROR(to_type, "overflow"

, ERANGE, pos)

603 #define CHECK_ENDPTR(to_type) \ 605  S2N_CONVERT_ERROR(to_type, kEmptyStr, EINVAL, pos); \ 608 #define CHECK_ENDPTR_SIZE(to_type) \ 609  if ( pos < size ) { \ 610  S2N_CONVERT_ERROR(to_type, kEmptyStr, EINVAL, pos); \ 613 #define CHECK_COMMAS \ 615  if (flags & NStr::fAllowCommas) { \ 617  if ((numpos == pos) || \ 618  ((comma >= 0) && (comma != 3)) ) { \ 639  if

( value < kMin_Int || value >

kMax_Int

) {

654  return

(

unsigned int

)

value

;

662  if

( value < kMin_Long || value > kMax_Long ) {

674  if

(

value

> kMax_ULong ) {

677  return

(

unsigned long

)

value

;

688  int delta

= ch-

'0'

;

689  if

(

unsigned

(

delta

) <

unsigned

(base) ) {

697  if

(!

isalnum

((

unsigned char

) ch)) {

702  if

(

isdigit

((

unsigned char

) ch)) {

705

ch = (char)

tolower

((

unsigned char

) ch);

706  delta

= ch -

'a'

+ 10;

726  if

( ch !=

'.'

&& ch !=

','

) {

733  return

ch ==

'.'

|| ch ==

','

;

735  struct

lconv*

conv

= localeconv();

736  return

ch == *(

conv

->decimal_point);

751  unsigned char

ch =

str

[pos];

768  if

( base == 10 || base == 8 ) {

773  if

( base < 0 || base == 1 || base > 36 ) {

777  unsigned char

ch =

str

[pos];

778  unsigned char next

=

str

[pos+1];

782

}

else if

(

next

==

'x'

||

next

==

'X'

) {

790  if

(ch ==

'0'

&& (

next

==

'x'

||

next

==

'X'

)) {

812  switch

(

str

[pos]) {

841  while

(

char

ch =

str

[pos]) {

851  if

(

n

>= limdiv && (

n

> limdiv ||

delta

> limoff) ) {

860  if

( pos == pos0 || ((comma >= 0) && (comma != 3)) ) {

877

TStringToNumFlags

flags

,

int

base)

884  if

( base == 10 && (

flags

& slow_flags) == 0 ) {

891  if

( ptr != end && *ptr ==

'+'

) {

906  int delta

= ch -

'0'

;

907  if

(

unsigned

(

delta

) >= 10 ) {

911  if

(

n

>= limdiv && (

n

> limdiv ||

delta

> limoff) ) {

915

}

while

( ++ptr != end );

929  if

(

str

[pos] ==

'+'

) {

953  while

(

char

ch =

str

[pos]) {

963  if

(

n

>= limdiv && (

n

> limdiv ||

delta

> limoff) ) {

972  if

( pos == pos0 || ((comma >= 0) && (comma != 3)) ) {

989  const char

* start = ptr;

993  while

(

isspace

((

unsigned char

)c) ) {

1002  else if

( c ==

'+'

) {

1009

*endptr = (

char

*)start;

1011

err_guard.Set(EINVAL);

1016  if

( !*ptr && c >=

'0'

&& c <=

'9'

) {

1018

*endptr = (

char

*)ptr;

1022  return

sign < 0 ? (c ==

'0'

? -0. : -

result

) :

result

;

1025  bool

dot =

false

, expn =

false

, anydigits =

false

;

1026  int

digits = 0, dot_position = 0;

1027  unsigned int first

=0, second=0, first_mul=1;

1032  for

( ; ; c = *ptr++ ) {

1033  if

(c >=

'0'

&& c <=

'9'

) {

1035

c = (char)(c -

'0'

);

1047

}

else if

(digits <= 9) {

1050

}

else if

(digits <= 18) {

1053

second = second*10 + c;

1060  else if

(c ==

'.'

) {

1067

dot_position = digits;

1070  else if

(c ==

'e'

|| c ==

'E'

) {

1082  if

( !dot && (c ==

'n'

|| c ==

'N'

) &&

1085

*endptr = (

char

*)(ptr+3);

1087  return

HUGE_VAL/HUGE_VAL;

1089  if

( (c ==

'i'

|| c ==

'I'

) ) {

1096

*endptr = (

char

*)ptr;

1098  return

sign < 0 ? -HUGE_VAL : HUGE_VAL;

1108

*endptr = (

char

*)start;

1110

err_guard.Set(EINVAL);

1113  int

exponent = dot ? dot_position - digits : 0;

1118  bool

expsign =

false

, expnegate=

false

;

1123  if

(c ==

'-'

|| c ==

'+'

) {

1125  if

(expsign || expdigits) {

1129

expnegate = c ==

'-'

;

1132  else if

(c >=

'0'

&& c <=

'9'

) {

1134  int

newexpvalue = expvalue*10 + (c-

'0'

);

1135  if

(newexpvalue > expvalue) {

1136

expvalue = newexpvalue;

1155

exponent = expnegate ? exponent - expvalue : exponent + expvalue;

1159  if

( first_mul > 1 ) {

1161

ret = ((

long

double)

first

* first_mul + second)* second_mul + third;

1171  if

(

first

&& exponent ) {

1173  if

(exponent > 2*DBL_MAX_10_EXP) {

1175

err_guard.Set(ERANGE);

1176

}

else if

(exponent < 2*DBL_MIN_10_EXP) {

1178

err_guard.Set(ERANGE);

1180  if

( exponent > 0 ) {

1181  static const double

mul1[16] = {

1182

1, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7,

1183

1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15

1185

ret *= mul1[exponent&15];

1186  if

( exponent >>= 4 ) {

1187  static const long double

mul2[16] = {

1205

ret *= mul2[exponent&15];

1206  for

( exponent >>= 4; exponent; --exponent ) {

1210  if

(!

finite

(

double

(ret))) {

1214

err_guard.Set(ERANGE);

1218

exponent = -exponent;

1219  static const long double

mul1[16] = {

1237

ret *= mul1[exponent&15];

1238  if

( exponent >>= 4 ) {

1239  static const long double

mul2[16] = {

1257

ret *= mul2[exponent&15];

1258  for

( exponent >>= 4; exponent; --exponent ) {

1262  if

( ret < DBL_MIN ) {

1266

err_guard.Set(ERANGE);

1276

*endptr = (

char

*)ptr;

1278  return

(

double

)ret;

1289  "NStr::StringToDouble(): mutually exclusive flags specified"

, 0);

1304  switch

(

str

[pos]) {

1322  int

& errno_ref = errno;

1326  const char

* begptr =

str

+ pos;

1332  n

= strtod(begptr, &endptr);

1337  if

(!endptr || (endptr2 && endptr2 > endptr)) {

1342  if

( !endptr || endptr == begptr ) {

1347  if

( errno_ref && errno_ref != ERANGE ) {

1353  bool

is_negative =

n

< 0.;

1380

TStringToNumFlags

flags

)

1389  if

(

str

.HasZeroAtEnd() ) {

1394  if

(

size

<

sizeof

(

buf

) ) {

1413  unsigned char

ch =

str

[pos];

1418

ch = (

unsigned

char)

toupper

(ch);

1432  if

((

kMax_UI8

/ 1024 / 1024) < v) {

1439  if

((

kMax_UI8

/ 1024 / 1024 / 1024) < v) {

1442

v *= 1024 * 1024 * 1024;

1453  if

( ch &&

toupper

(ch) ==

'B'

) {

1461

TStringToNumFlags

flags

,

1465  if

( base < 2 || base > 16 ) {

1482  if

(

str

[pos] ==

'+'

) {

1499  char

ch =

str

[pos];

1509  if

(pos-numpos == 0) {

1510

pos =

str

.length();

1516  if

( !

n

&& errno ) {

1536

TStringToNumFlags

flags

)

1552  const char

* str_ptr =

str

.data();

1553  const char

* str_end = str_ptr +

str

.size();

1556  for

(; str_ptr < str_end; ++str_ptr) {

1563

&& str_ptr + 1 < str_end &&

isdigit

(*(str_ptr + 1)))

1572  if

(str_ptr < str_end && *str_ptr ==

'+'

) {

1575  else if

((str_ptr < str_end && *str_ptr ==

'-'

)

1581  const char

* num_start = str_ptr;

1582  bool

have_dot =

false

;

1585  Uint4

digs_pre_dot = 0, digs_post_dot = 0;

1587  for

(; str_ptr < str_end; ++str_ptr) {

1595  else if

(c ==

'.'

&& allow_dot) {

1596  if

(have_dot || str_ptr == num_start)

1598  if

(*(str_ptr - 1) ==

','

) {

1604  else if

(c ==

','

&& allow_commas) {

1605  if

(have_dot || str_ptr == num_start)

1607  if

(*(str_ptr - 1) ==

','

) {

1615  if

(have_dot && digs_post_dot == 0)

1617  else if

(str_ptr > num_start && *(str_ptr - 1) ==

','

)

1620  const char

* num_end = str_ptr;

1621  if

(num_start == num_end) {

1624  if

(str_ptr < str_end && *str_ptr ==

' ' 1630  if

(str_ptr < str_end)

1631

suff_c = (char)

toupper

(*str_ptr);

1633  static const char

s_Suffixes[] = {

'K'

,

'M'

,

'G'

,

'T'

,

'P'

,

'E'

};

1634  static const char

*

const

s_BinCoefs[] = {

"1024"

,

"1048576"

,

"1073741824"

,

1636  "1125899906842624"

,

1637  "1152921504606846976"

};

1638  static const Uint4

s_NumSuffixes = (

Uint4

)(

sizeof

(s_Suffixes) /

sizeof

(s_Suffixes[0]));

1642  for

(; suff_idx < s_NumSuffixes; ++suff_idx) {

1643  if

(suff_c == s_Suffixes[suff_idx])

1646  if

(suff_idx < s_NumSuffixes) {

1648  if

(str_ptr + 1 < str_end &&

toupper

(*str_ptr) ==

'I' 1649

&&

toupper

(*(str_ptr + 1)) ==

'B'

)

1652

binary_suff =

true

;

1654  else if

(str_ptr < str_end &&

toupper

(*str_ptr) ==

'B'

)

1657  else if

(suff_c ==

'B'

) {

1660  else if

(*(str_ptr - 1) ==

' '

)

1665  for

(; str_ptr < str_end; ++str_ptr) {

1673  if

(str_ptr != str_end) {

1677  Uint4

orig_digs = digs_pre_dot + digs_post_dot;

1679

str_ptr = num_start;

1680  for

(

Uint4 i

= 0; str_ptr < num_end; ++str_ptr) {

1681  if

(*str_ptr ==

','

|| *str_ptr ==

'.'

)

1683

orig_num[

i

++] =

Uint1

(*str_ptr -

'0'

);

1686  Uint1

* num_to_conv = orig_num.get();

1687  Uint4

digs_to_conv = digs_pre_dot;

1689  if

(binary_suff && suff_idx < s_NumSuffixes) {

1690  const char

* coef = s_BinCoefs[suff_idx];

1692

mul_num =

new Uint1

[orig_digs + coef_size];

1693

memset(mul_num.

get

(), 0, orig_digs + coef_size);

1694  for

(

Uint4

coef_i = 0; coef_i < coef_size; ++coef_i) {

1697  Uint4

res_idx = orig_digs + coef_i;

1698  for

(

int

orig_i = orig_digs - 1; orig_i >= 0; --orig_i, --res_idx) {

1699  Uint1

orig_d = orig_num[orig_i];

1700  Uint1

res_d =

Uint1

(coef_d * orig_d + carry + mul_num[res_idx]);

1702  while

(res_d >= 10) {

1703

res_d = (

Uint1

)(res_d - 10);

1706

mul_num[res_idx] = res_d;

1709  for

(; carry != 0; --res_idx) {

1710  Uint1

res_d =

Uint1

(mul_num[res_idx] + carry);

1712  while

(res_d >= 10) {

1713

res_d = (

Uint1

)(res_d - 10);

1716

mul_num[res_idx] = res_d;

1719

digs_to_conv = orig_digs + coef_size - digs_post_dot;

1720

num_to_conv = mul_num.

get

();

1721  while

(digs_to_conv > 1 && *num_to_conv == 0) {

1726  else if

(suff_idx < s_NumSuffixes) {

1727  Uint4

coef_size = (suff_idx + 1) * 3;

1728  if

(coef_size <= digs_post_dot) {

1729

digs_to_conv += coef_size;

1730

digs_post_dot -= coef_size;

1733

digs_to_conv += digs_post_dot;

1734

coef_size -= digs_post_dot;

1736

mul_num =

new Uint1

[digs_to_conv + coef_size];

1737  memmove

(mul_num.

get

(), num_to_conv, digs_to_conv);

1738

memset(mul_num.

get

() + digs_to_conv, 0, coef_size);

1739

num_to_conv = mul_num.

get

();

1740

digs_to_conv += coef_size;

1747  for

(

Uint4 i

= 0;

i

< digs_to_conv; ++

i

) {

1748  Uint1

d = num_to_conv[

i

];

1749  if

(

n

>= limdiv && (

n

> limdiv || d > limoff)) {

1755  if

(digs_post_dot != 0 && num_to_conv[digs_to_conv] >= 5) {

1766

TStringToNumFlags

flags

,

int

base)

1768 #if (SIZEOF_SIZE_T > 4) 1777 template

<

typename

T>

1794

out_str.append(

"0x"

);

1798

*--pos = kDigit[

value

% 16];

1802  else if

( base == 8 ) {

1804

out_str.append(

"0"

);

1811

*--pos = kDigit[

value

% 8];

1817

*--pos = kDigit[

value

% base];

1827  unsigned long value

,

1839  value

=

static_cast<unsigned long>

(-svalue);

1848

*--pos =

'0'

+

value

% 10;

1854

*--pos =

'0'

+

value

% 10;

1869

TNumToStringFlags

flags

,

int

base)

1871  if

( base < 2 || base > 36 ) {

1875  unsigned int value

=

static_cast<unsigned int>

(svalue);

1886

TNumToStringFlags

flags

,

int

base)

1888  if

( base < 2 || base > 36 ) {

1892  unsigned long value

=

static_cast<unsigned long>

(svalue);

1903  unsigned long value

,

1904

TNumToStringFlags

flags

,

1907  if

( base < 2 || base > 36 ) {

1924

*--pos =

'0'

+

value

% 10;

1930

*--pos =

'0'

+

value

% 10;

1952 #define PRINT_INT8_CHUNK 1000000000 1953 #define PRINT_INT8_CHUNK_SIZE 9 1962 #ifdef PRINT_INT8_CHUNK 1975

*--pos =

'0'

+ chunk % 10;

1977

}

while

( pos != end );

1986

*--pos =

'0'

+ chunk % 10;

1995

*--pos =

'0'

+

value

% 10;

2001 #ifdef PRINT_INT8_CHUNK 2010

*--pos =

'0'

+ chunk % 10;

2012

}

while

( pos != end );

2017

*--pos =

'0'

+ chunk % 10;

2022

*--pos =

'0'

+

value

% 10;

2032

TNumToStringFlags

flags

,

int

base)

2034  if

( base < 2 || base > 36 ) {

2043  value

=

static_cast<Uint8>

(svalue<0?-svalue:svalue);

2059

TNumToStringFlags

flags

,

int

base)

2061  if

( base < 2 || base > 36 ) {

2083

TNumToStringFlags

flags

,

2084  unsigned int

max_digits

)

2101  static const char

s_Suffixes[] = {

'K'

,

'M'

,

'G'

,

'T'

,

'P'

,

'E'

};

2102  static const Uint4

s_NumSuffixes =

Uint4

(

sizeof

(s_Suffixes) /

sizeof

(s_Suffixes[0]));

2109  Uint4

digs_pre_dot, suff_idx;

2112  static const Uint8

s_Coefs[] = {1000, 1000000, 1000000000,

2117  for

(; suff_idx < s_NumSuffixes; ++suff_idx) {

2118  if

(

value

< s_Coefs[suff_idx])

2122

num_start[-1] =

'0'

;

2124

digs_pre_dot =

Uint4

(dot_ptr - num_start);

2129  while

(suff_idx > 0 && max_digits - digs_pre_dot >= 3) {

2136  char

* round_dig = num_end - 1;

2137  if

(num_end < buffer + kBufSize && *num_end >=

'5'

)

2139  while

(*round_dig ==

'0'

+ 10) {

2144  if

(round_dig < num_start) {

2145  _ASSERT

(num_start - round_dig == 1);

2146

num_start = round_dig;

2149  if

(digs_pre_dot > 3) {

2157  if

(digs_pre_dot > max_digits) {

2167  static const Uint8

s_Coefs[] = {1, 1024, 1048576, 1073741824,

2173  for

(; suff_idx < s_NumSuffixes; ++suff_idx) {

2174  if

(

value

< s_Coefs[suff_idx])

2177  bool

can_try_another =

true

;

2179  Uint8

mul_coef = s_Coefs[suff_idx - 1];

2181  if

(max_digits == 3 && whole_num >= 1000) {

2183  goto

try_another_suffix;

2186

num_start[-1] =

'0'

;

2189

&& suff_idx != 1 && can_try_another)

2191  Uint4

new_suff = suff_idx - 1;

2192

try_even_more_suffix:

2193  Uint8

new_num =

value

/ s_Coefs[new_suff - 1];

2196  if

(new_digs <= max_digits) {

2197  if

(max_digits - digs_pre_dot >= 3 && new_suff != 1) {

2199  goto

try_even_more_suffix;

2201

suff_idx = new_suff;

2202

can_try_another =

false

;

2203  goto

try_another_suffix;

2205  if

(new_suff != suff_idx - 1) {

2206

suff_idx = new_suff + 1;

2207

can_try_another =

false

;

2208  goto

try_another_suffix;

2211

memcpy(

buffer

, num_start - 1, digs_pre_dot + 1);

2213

dot_ptr = num_start + digs_pre_dot;

2214  Uint4

cnt_more_digs = 1;

2216

cnt_more_digs +=

min

(max_digits - digs_pre_dot, 3 * (suff_idx - 1));

2218  Uint8

left_val =

value

- whole_num * mul_coef;

2222

*num_end = char(d +

'0'

);

2224

left_val -= d * mul_coef;

2227  while

(cnt_more_digs != 0);

2230  char

* round_dig = num_end - 1;

2231  if

(*num_end >=

'5'

)

2233  while

(*round_dig ==

'0'

+ 10) {

2238  if

(round_dig < num_start) {

2240

num_start = round_dig;

2242  if

(digs_pre_dot > max_digits) {

2244  goto

try_another_suffix;

2246  if

(num_end != dot_ptr)

2250

&& num_start[0] ==

'1'

&& num_start[1] ==

'0' 2251

&& num_start[2] ==

'2'

&& num_start[3] ==

'4'

)

2254  goto

try_another_suffix;

2262

out_str.append(1,

'+'

);

2264

out_str.append(num_start, digs_pre_dot);

2267  Uint4

digs_first = digs_pre_dot % 3;

2268

out_str.append(num_start, digs_first);

2269  char

* left_ptr = num_start + digs_first;

2270  Uint4

digs_left = digs_pre_dot - digs_first;

2271  while

(digs_left != 0) {

2272

out_str.append(1,

','

);

2273

out_str.append(left_ptr, 3);

2278  if

(num_end != dot_ptr) {

2279

out_str.append(1,

'.'

);

2280

out_str.append(dot_ptr, num_end - dot_ptr);

2283  if

(suff_idx == 0) {

2286

out_str.append(1,

' '

);

2287

out_str.append(1,

'B'

);

2293

out_str.append(1,

' '

);

2294

out_str.append(1, s_Suffixes[suff_idx]);

2297

out_str.append(1,

'i'

);

2298

out_str.append(1,

'B'

);

2306 #if defined(NCBI_OS_MSWIN) 2344  struct

lconv*

conv

= localeconv();

2345  if

(

'.'

!= *(

conv

->decimal_point)) {

2346  char

* pos = strchr(

buffer

, *(

conv

->decimal_point));

2360

TNumToStringFlags

flags

)

2367  if

(memcmp(&

value

, &zero,

sizeof

(

double

)) == 0) {

2375

strcpy(

buffer

,

"NaN"

);

2377

}

else if

(

value

> 0.) {

2378

strcpy(

buffer

,

"INF"

);

2381

strcpy(

buffer

,

"-INF"

);

2406  struct

lconv*

conv

= localeconv();

2407  if

(

'.'

!= *(

conv

->decimal_point)) {

2408  char

* pos = strchr(

buffer

, *(

conv

->decimal_point));

2424  char

* buffer_start =

buffer

;

2425  char

* buffer_end = (

buffer

+= digits-1);

2434

}

while

(

value

/= 10);

2436  if

(++

buffer

!= buffer_start) {

2438

buffer_end -=

buffer

- buffer_start;

2441  return

++buffer_end;

2445 #define __NLG NCBI_CONST_LONGDOUBLE 2449  int

* dec,

int

* sign)

2461  if

(memcmp(&

val

, &zero,

sizeof

(

double

)) == 0) {

2470

*sign =

val

< 0. ? -1 : 1;

2478  bool

exp_positive =

val

>= 1.;

2479  unsigned int first

, second=0;

2480  long double

mult =

__NLG

(1.);

2520  else

{mult=

__NLG

(1.e-8); exp+=16;}

2557  else

{mult=

__NLG

(1.e8); }

2561  long double

t1 =

value

* mult;

2562  if

(t1 >=

__NLG

(1.e9)) {

2564

}

else if

(t1 <

__NLG

(1.e8)) {

2570  if

(high_precision) {

2571  long double

t2 = (t1-

first

) *

__NLG

(1.e8);

2572  if

(t2 >=

__NLG

(1.e8)) {

2575

second = (

unsigned int

)t2;

2580  bool

use_ext_buffer =

bufsize

> 20;

2582  char

*digits = use_ext_buffer ?

buffer

:

tmp

;

2584  if

(high_precision) {

2587  size_t

digits_len = digits_end - digits;

2588  size_t

digits_got = digits_len;

2589  size_t

digits_expected = high_precision ? 17 : 9;

2599  if

(high_precision) {

2600  if

(digits[pos] ==

'4'

) {

2602  while

(pt != 0 && digits[--pt] ==

'9'

)

2606

}

else if

(digits[pos] ==

'5'

) {

2608  while

(pt != 0 && digits[--pt] ==

'0'

)

2616  if

(digits[pos] >=

'5'

) {

2618  if

(digits[--pos] <

'9'

) {

2625  if

(digits_expected <= digits_got) {

2630

exp_positive = --exp == 0;

2640  for

(pos = digits_len; pos-- > 0 && digits[pos] ==

'0'

;)

2643

*dec = exp_positive ?

int

(exp) : -

int

(exp);

2645  if

(!use_ext_buffer) {

2647

memcpy(

buffer

, digits, digits_len);

2650  "Destination buffer too small"

, 0);

2663  "Destination buffer too small"

, 0);

2668  val

,

precision

, digits,

sizeof

(digits), &dec, &sign);

2669  if

(digits_len == 0) {

2674

strncpy(

buffer

,digits, digits_len);

2677  if

(digits_len == 1 && dec == 0 && sign >=0) {

2682  bool

exp_positive = dec >= 0;

2683  unsigned int

exp= (

unsigned int

)(exp_positive ? dec : (-dec));

2686  char

*buffer_pos =

buffer

;

2688  char

*digits_pos = digits;

2691

*buffer_pos++ =

'-'

;

2695  if

((exp_positive && exp >=

precision

) || (!exp_positive && exp > 4)) {

2696

*buffer_pos++ = *digits_pos++;

2698  if

(digits_len != 0) {

2699

*buffer_pos++ =

'.'

;

2700

strncpy(buffer_pos,digits_pos,digits_len);

2701

buffer_pos += digits_len;

2703

*buffer_pos++ =

'e'

;

2704

*buffer_pos++ = exp_positive ?

'+'

:

'-'

;

2707 #if NCBI_COMPILER_MSVC && _MSC_VER < 1900 2708  bool

need_zeros =

true

;

2709  size_t

need_digits = 3;

2711  bool

need_zeros = exp < 10 ?

true

:

false

;

2712  size_t

need_digits = exp < 100 ? 2 : 3;

2716

}

else if

(exp_positive) {

2717

*buffer_pos++ = *digits_pos++;

2719  if

(digits_len > exp) {

2720

strncpy(buffer_pos,digits_pos,exp);

2722

*buffer_pos++ =

'.'

;

2723

strncpy(buffer_pos,digits_pos+exp,digits_len-exp);

2724

buffer_pos += digits_len-exp;

2726

strncpy(buffer_pos,digits_pos,digits_len);

2727

buffer_pos += digits_len;

2728

exp -= (

unsigned int

)digits_len;

2730

*buffer_pos++ =

'0'

;

2734

*buffer_pos++ =

'0'

;

2735

*buffer_pos++ =

'.'

;

2736  for

(--exp; exp--;) {

2737

*buffer_pos++ =

'0'

;

2739

strncpy(buffer_pos,digits_pos, digits_len);

2740

buffer_pos += digits_len;

2743  return

buffer_pos -

buffer

;

2749 #if (SIZEOF_SIZE_T > 4) 2782  if

(

str

.HasZeroAtEnd() ) {

2783

res = ::sscanf(

str

.data(),

"%p"

, &ptr);

2785

res = ::sscanf(

string

(

str

).c_str(),

"%p"

, &ptr);

2838  "String cannot be converted to bool"

, 0);

2844 #ifdef HAVE_VASPRINTF 2855 #elif defined(HAVE_VSNPRINTF) 2866  buf

.reset(

new char

[

size

]);

2872 #elif defined(HAVE_VPRINTF) 2874  buf

[

sizeof

(

buf

) - 1] = 0;

2876  if

(

buf

[

sizeof

(

buf

) - 1]) {

2882 # error Please port this code to your system. 2890

EDirection direction,

2904  if

(use_case ==

eCase

) {

2908

pos =

str

.find(pattern, search_pos);

2913

search_pos = pos + plen;

2914

++current_occurence;

2916  while

(current_occurence <= occurence);

2920

search_pos = slen - plen;

2922

pos =

str

.rfind(pattern, search_pos);

2927

search_pos = (pos < plen) ? 0 : pos - plen;

2928

++current_occurence;

2930  while

(current_occurence <= occurence);

2937  string

x_first(pattern, 0, 1);

2938  if

(

isupper

((

unsigned char

)x_first[0])) {

2939

x_first += (char)

tolower

((

unsigned char

)x_first[0]);

2940

}

else if

(

islower

((

unsigned char

)x_first[0])) {

2941

x_first += (char)

toupper

((

unsigned char

)x_first[0]);

2946

pos =

str

.find_first_of(x_first, search_pos);

2947  while

(pos !=

NPOS

) {

2948  if

( (pos + plen) > slen ) {

2954

pos =

str

.find_first_of(x_first, pos + 1);

2960

search_pos = pos + plen;

2961

++current_occurence;

2963  while

(current_occurence <= occurence);

2967

search_pos = slen - plen;

2969

pos =

str

.find_last_of(x_first, search_pos);

2970  while

(pos !=

NPOS

&& pos

2975

pos =

str

.find_last_of(x_first, pos - 1);

2978

search_pos = (pos < plen) ? 0 : pos - plen;

2979

++current_occurence;

2981  while

(current_occurence <= occurence);

2992  string

pat(pattern, 0, 1);

2994  if

(

isupper

((

unsigned char

) pat[0])) {

2995

pat += (char)

tolower

((

unsigned char

) pat[0]);

2996

}

else if

(

islower

((

unsigned char

) pat[0])) {

2997

pat += (char)

toupper

((

unsigned char

) pat[0]);

3002  while

(pos !=

NPOS

&& (pos +

l

) <= end

3004

pos =

str

.find_first_of(pat, pos + 1);

3006  return

pos > end ?

NPOS

: pos;

3010  while

(pos !=

NPOS

&& pos >= start

3015

pos =

str

.find_last_of(pat, pos - 1);

3025  if

(lst.empty())

return NULL

;

3026  ITERATE

(list<string>, st_itr, lst) {

3027  if

(

Equal

(*st_itr,

val

, use_case)) {

3037  if

(vec.empty())

return NULL

;

3038  ITERATE

(vector<string>, st_itr, vec) {

3039  if

(

Equal

(*st_itr,

val

, use_case)) {

3052  return

!(ch ==

'_'

||

isalnum

((

unsigned char

)ch));

3059

EDirection direction)

3069  while

(pos !=

NPOS

) {

3077  if

(pos + plen == slen) {

3103  if

(len1 == 0 || len2 == 0) {

3118  if

(memcmp(t1.

data

(), t2.

data

(),

len

) == 0) {

3135  if

(pos == 0 || memcmp(t1.

data

() +

len

-

n

, t2.

data

(),

n

) == 0) {

3145 template

<

class

TStr>

3147  const

TStr& empty_str)

3156  while

(

isspace

((

unsigned char

)

str

[beg]) ) {

3157  if

(++beg == length) {

3165  while

(

isspace

((

unsigned char

)

str

[--end])) {

3173  _ASSERT

(beg < end && end <= length);

3174  if

( beg | (end - length) ) {

3175  return str

.substr(beg, end - beg);

3208  while

(

isspace

((

unsigned char

)

str

.data()[beg]) ) {

3209  if

(++beg == length) {

3221  while

(

isspace

((

unsigned char

)

str

.data()[--end])) {

3230  _ASSERT

(beg < end && end <= length);

3232  if

( beg | (end - length) ) {

3233  str

.replace(0, length,

str

, beg, end - beg);

3241  if

(!

str

.length() ||

3253  if

(!

str

.length() ||

3265  if

(!

str

.length() ||

3277  if

(!

str

.length() ||

3289  if

(!

str

.length() ||

3301  if

(!

str

.length() ||

3311  const string

& search,

const string

& replace,

3318  "NStr::Replace(): source and destination are the same"

, 0);

3322  if

(start_pos + search.size() > src.size() || search == replace) {

3330  if

(replace.size() > search.size() && src.size() > 16*1024) {

3337

start_pos = src.find(search, start_pos);

3338  if

(start_pos ==

NPOS

)

3341

start_pos += search.size();

3344

dst.resize(src.size() -

n

*search.size() +

n

*replace.size());

3347

start_pos = start_orig;

3348

string::const_iterator src_start = src.begin();

3349

string::const_iterator src_end = src.begin();

3350

string::iterator dst_pos = dst.begin();

3353

start_pos = src.find(search, start_pos);

3354  if

(start_pos ==

NPOS

)

3357

src_end = src.begin() + start_pos;

3358  copy

(src_start, src_end, dst_pos);

3359

dst_pos += (src_end - src_start);

3361  copy

(replace.begin(), replace.end(), dst_pos);

3362

dst_pos += replace.size();

3363

start_pos += search.size();

3364

src_start = src.begin() + start_pos;

3367  copy

(src_start, src.end(), dst_pos);

3377

start_pos = dst.find(search, start_pos);

3378  if

(start_pos ==

NPOS

)

3380

dst.replace(start_pos, search.size(), replace);

3381

start_pos += replace.size();

3391  const string

& search,

const string

& replace,

3396  Replace

(src, search, replace, dst, start_pos, max_replace, num_replace);

3402  const string

& search,

const string

& replace,

3408  if

( start_pos + search.size() > src.size() || search == replace )

3411  bool

equal_len = (search.size() == replace.size());

3413

start_pos = src.find(search, start_pos);

3414  if

(start_pos ==

NPOS

)

3419  copy

(replace.begin(), replace.end(), src.begin() + start_pos);

3421

src.replace(start_pos, search.size(), replace);

3423

start_pos += replace.size();

3431 template

<

typename

TString,

typename

TContainer>

3432

TContainer&

s_Split

(

const

TString&

str

,

const

TString& delim,

3434

vector<SIZE_TYPE>* token_pos,

3442

TPosArray token_pos_proxy(token_pos);

3448 #define CHECK_SPLIT_TEMPSTRING_FLAGS(where) \ 3450  if ((flags & (NStr::fSplit_CanEscape | NStr::fSplit_CanQuote)) && !storage) { \ 3451  NCBI_THROW2(CStringException, eBadArgs, \ 3452  "NStr::"

#where "(): the selected flags require non-NULL storage", 0); \

3459

vector<SIZE_TYPE>* token_pos)

3465

vector<string>&

arr

, TSplitFlags

flags

,

3466

vector<SIZE_TYPE>* token_pos)

3472

list<CTempString>&

arr

, TSplitFlags

flags

,

3480

vector<CTempString>&

arr

, TSplitFlags

flags

,

3488

list<CTempStringEx>&

arr

, TSplitFlags

flags

,

3496

vector<CTempStringEx>&

arr

, TSplitFlags

flags

,

3504

list<string>&

arr

, TSplitFlags

flags

,

3505

vector<SIZE_TYPE>* token_pos)

3511

vector<string>&

arr

, TSplitFlags

flags

,

3512

vector<SIZE_TYPE>* token_pos)

3518

list<CTempString>&

arr

, TSplitFlags

flags

,

3526

vector<CTempString>&

arr

, TSplitFlags

flags

,

3534

list<CTempStringEx>&

arr

, TSplitFlags

flags

,

3542

vector<CTempStringEx>&

arr

, TSplitFlags

flags

,

3551  string

& str1,

string

& str2, TSplitFlags

flags

)

3584

TSplitter splitter(

str

, delim,

flags

, storage);

3588

splitter.Advance(&part_collector,

NULL

, &delim_pos);

3589

part_collector.

Join

(&str1);

3590

part_collector.

Clear

();

3594

splitter.Advance(&part_collector);

3595

part_collector.

Join

(&str2);

3597  return

delim_pos !=

NPOS

;

3601 #define SS_ADD_CHAR(c) \ 3609  out

.reserve(

str

.size());

3613  if

( allow_chars.

empty

() && reject_chars.

empty

() && !have_class ) {

3618  bool

have_allowed =

false

;

3621  for

(

char

c :

str

) {

3624  bool

allowed =

false

;

3651  if

(!allowed && !allow_chars.

empty

() && allow_chars.

find

(c) !=

NPOS

) {

3654  if

(allowed && !reject_chars.

empty

() && reject_chars.

find

(c) !=

NPOS

) {

3672  if

(

last

!=

' '

) {

3680

have_allowed =

true

;

3690  if

(reject_replacement ==

' '

) {

3699

have_allowed =

true

;

3703  if

(

last

!= reject_replacement) {

3705

have_allowed =

true

;

3736

unique_ptr<CNcbiOstrstream>

out

;

3739  for

(

i

= 0;

i

<

str

.size(); ++

i

) {

3740  bool

octal =

false

;

3778  if

(

i

&&

str

[

i

- 1] ==

'?'

)

3780  if

(

i

<

str

.size() - 1 &&

str

[

i

+ 1] ==

'?'

)

3785  if

(!isascii((

unsigned char

) c)) {

3791  if

(!

isprint

((

unsigned char

) c)) {

3801  out

->write(

str

.data() + j,

i

- j);

3805  out

->write(

"n\\\n"

, 3);

3809

reduce = (

i

==

str

.size() - 1 ||

3810  str

[

i

+ 1] <

'0'

||

'7'

<

str

[

i

+ 1] ?

true

:

false

);

3817

v = (

unsigned

char) c >> 6;

3819  val

[k++] = char(

'0'

+ v);

3822

v = ((

unsigned

char) c >> 3) & 7;

3824  val

[k++] = char(

'0'

+ v);

3826

v = (

unsigned

char) c & 7;

3827  val

[k++] = char(

'0'

+ v);

3836  out

->write(

str

.data() + j,

i

- j);

3851  if

(

str

.empty() ) {

3854  out

.reserve(

str

.size() * 2);

3856  for

(

char

c :

str

) {

3857  if

(c == escape_char || metacharacters.

find

(c) !=

NPOS

) {

3869  if

(

str

.empty() ) {

3872  out

.reserve(

str

.size());

3873  bool

escaped =

false

;

3875  for

(

char

c :

str

) {

3881  if

(c == escape_char) {

3896  if

(

str

.empty()) {

3899  out

.reserve(

str

.size() * 2);

3901  out

.push_back(quote_char);

3902  for

(

char

c :

str

) {

3903  if

(c == quote_char || c == escape_char) {

3908  out

.push_back(quote_char);

3917  if

(

str

.empty()) {

3920  out

.reserve(

str

.size());

3921  bool

escaped =

false

;

3922  char

quote_char =

str

[0];

3924  if

(

str

.length() < 2 ||

str

[

str

.length()-1] != quote_char) {

3926  "The source string must start and finish with the same character"

, 0);

3937  if

(c == escape_char) {

3986  const char

quote_char =

'"'

;

3988  if

(

len

< 2 ||

str

[0] != quote_char ||

str

[

len

-1] != quote_char) {

3990  "The source string must start and finish with a double quote"

, 0);

3994  bool

escaped =

false

;

3996  bool

collect =

true

;

4001  out

.reserve(

str

.size());

4003  for

(pos = 1; pos <

len

; ++pos) {

4004  unsigned char

ch =

str

[pos];

4005  if

(ch == quote_char && !escaped) {

4007  CTempString

sub(

str

.data() + last_quote + 1, pos - last_quote - 1);

4013  if

(pos != last_quote + 1) {

4015  "Quoted string format error"

, pos);

4021

escaped = ch ==

'\\'

? !escaped :

false

;

4024  if

(escaped || last_quote !=

len

-1) {

4026  "Unterminated quoted string"

,

str

.length());

4041  for

(

i

= 0;

i

<

str

.size();

i

++) {

4045  result

.append(

"&amp;"

);

4048  result

.append(

"&lt;"

);

4051  result

.append(

"&gt;"

);

4054  result

.append(

"&apos;"

);

4057  result

.append(

"&quot;"

);

4063  if

(

i

+1 ==

str

.size()) {

4064  result

.append(

"&#x2d;"

);

4066

}

else if

(

str

[

i

+1] ==

'-'

) {

4068  result

.append(1, c).append(

"&#x2d;"

);

4076  unsigned int

uc = (

unsigned int

)(c);

4083  if

((uc < 0x8) || (uc == 0xB) || (uc == 0xC) ||

4084

(uc >= 0x0E && uc <=0x1F) ||

4085

(uc >= 0x7F && uc <=0x84) ||

4086

(uc >= 0x86 && uc <=0x9F) )

4099  const char

* charmap =

"0123456789abcdef"

;

4102  unsigned

hi = ch >> 4;

4103  unsigned

lo = ch & 0xF;

4105  result

.append(1, charmap[hi]);

4107  result

.append(1, charmap[lo]).append(1,

';'

);

4127  const char

* begin =

str

.data();

4128  const char

* end = begin +

str

.size();

4129  for

(

const char

* curr = begin; curr < end; ++curr ) {

4137  bool

is_entity =

false

;

4139

(

i

+2 <

str

.size()) && (semicolon !=

NPOS

)) {

4141  if

(

i

>= semicolon ) {

4142

semicolon =

str

.find(

";"

,

i

+1);

4144  if

( semicolon !=

NPOS

) {

4147  if

(

str

[

i

+1] ==

'#'

) {

4152  for

(; p < semicolon; ++p) {

4162  for

(; p < semicolon; ++p) {

4169

is_entity = (p == semicolon);

4175  "\" contains HTML encoded entities"

);

4178  result

.append(

"amp;"

);

4183  result

.append(

"&lt;"

);

4186  result

.append(

"&gt;"

);

4189  result

.append(

"&apos;"

);

4192  result

.append(

"&quot;"

);

4195  if

((

unsigned int

)c < 0x20) {

4196  const char

* charmap =

"0123456789abcdef"

;

4199  unsigned

hi = ch >> 4;

4200  unsigned

lo = ch & 0xF;

4202  result

.append(1, charmap[hi]);

4204  result

.append(1, charmap[lo]).append(1,

';'

);

4205

}

else if

(c > 0x7F) {

4414

{ 977,

"thetasym"

},

4448

{ 8501,

"alefsym"

},

4515  for

( ; p->

u

!= 0; ++p) {

4516  if

(

uch

== p->

u

) {

4532  "Unable to guess the source string encoding"

, 0);

4536

ustr.reserve(

str

.size());

4542  for

(

i

=

str

.begin();

i

!= e;) {

4545  if

(

i

!= e && ch ==

'&'

) {

4547

end_of_entity = itmp =

i

;

4548  bool

ent, dec,

hex

, parsed=

false

;

4549

ent =

isalpha

((

unsigned char

)(*itmp)) != 0;

4550

dec = !ent && *itmp ==

'#'

&& ++itmp != e &&

4551  isdigit

((

unsigned char

)(*itmp)) != 0;

4552  hex

= !dec && itmp != e &&

4553

(*itmp ==

'x'

|| *itmp ==

'X'

) && ++itmp != e &&

4554  isxdigit

((

unsigned char

)(*itmp)) != 0;

4555

start_of_entity = itmp;

4557  if

(itmp != e && (ent || dec ||

hex

)) {

4559  for

(

int len

=0;

len

<16 && itmp != e; ++

len

, ++itmp) {

4560  if

(*itmp ==

'&'

|| *itmp ==

'#'

) {

4563  if

(*itmp ==

';'

) {

4564

end_of_entity = itmp;

4567

ent = ent &&

isalnum

( (

unsigned char

)(*itmp)) != 0;

4568

dec = dec &&

isdigit

( (

unsigned char

)(*itmp)) != 0;

4571  if

(end_of_entity !=

i

&& (ent || dec ||

hex

)) {

4574  string

entity(start_of_entity, end_of_entity);

4576  for

( ; p->

u

!= 0; ++p) {

4577  if

(entity.compare(p->

s

) == 0) {

4587  for

(itmp = start_of_entity; itmp != end_of_entity; ++itmp) {

4592  if

(

ud

>=

'0'

&&

ud

<=

'9'

) {

4594

}

else if

(

ud

>=

'a'

&&

ud

<=

'f'

) {

4597

}

else if

(

ud

>=

'A'

&&

ud

<=

'F'

) {

4607  i

= ++end_of_entity;

4615

ustr.append( 1, ch );

4636  auto

encode_char = [&](

char

c)

4638  static const char

* charmap =

"0123456789abcdef"

;

4639  result

.append(

"\\u00"

);

4641  unsigned

hi = ch >> 4;

4642  unsigned

lo = ch & 0xF;

4643  result

.append(1, charmap[hi]);

4644  result

.append(1, charmap[lo]);

4647  for

(

auto

c :

str

) {

4650  result

.append(

"\\\""

);

4653  result

.append(

"\\\\"

);

4656  if

((

unsigned int

)c < 0x20) {

4660  if

(encoding ==

eJsonEnc_UTF8

&& (

unsigned int

)c >= 0x80) {

4670  return '"'

+

result

+

'"'

;

4711  if

(!

str

.empty() &&

4712  str

.find_first_of(

"!{} \t\r\n[|&;<>()$`\"'*?#~=%\\"

) ==

NPOS

) {

4724  if

(

str

.find(

'\''

) !=

NPOS

&&

4725  str

.find_first_of(

"\"\\$`"

) ==

NPOS

) {

4726  return "\""

+

str

+

"\""

;

4758  bool

avoid_double_quotes = (

str

.find(

'"'

) ==

NPOS

||

4761

avoid_double_quotes ?

"'\\''"

:

"'\"'\"'"

) +

"'"

;

4772  if

(

s

.size() > 2) {

4775

pos =

s

.find(

"''"

, pos);

4776  if

(pos ==

NPOS

)

break

;

4777  if

(pos == 0 ||

s

[pos-1] !=

'\\'

) {

4792  out

.reserve(

str

.size());

4794  bool

is_error =

false

;

4796  while

(pos <

str

.size() || !is_error) {

4798  if

(pos2 ==

NPOS

) {

4807  if

(++pos2 ==

str

.size()) {

4809  "Unterminated escape sequence"

, pos2);

4811  switch

(

str

[pos2]) {

4812  case 'a'

:

out

+=

'\a'

;

break

;

4813  case 'b'

:

out

+=

'\b'

;

break

;

4814  case 'f'

:

out

+=

'\f'

;

break

;

4815  case 'n'

:

out

+=

'\n'

;

break

;

4816  case 'r'

:

out

+=

'\r'

;

break

;

4817  case 't'

:

out

+=

'\t'

;

break

;

4818  case 'v'

:

out

+=

'\v'

;

break

;

4822  while

(pos <

str

.size()

4833  unsigned int value

=

4844  "' is out of range [0-255]"

, pos2);

4851  value

= (unsigned)user_char;

4857  out

+=

static_cast<char>

(

value

);

4860  "\\x followed by no hexadecimal digits"

, pos);

4864  case '0'

:

case '1'

:

case '2'

:

case '3'

:

4865  case '4'

:

case '5'

:

case '6'

:

case '7'

:

4868  unsigned char

c = (

unsigned

char)(

str

[pos++] -

'0'

);

4869  while

(pos < pos2 + 3 && pos <

str

.size()

4870

&&

str

[pos] >=

'0'

&&

str

[pos] <=

'7'

) {

4871

c = (

unsigned

char)((c << 3) | (

str

[pos++] -

'0'

));

4897  const char

* str_pos =

str

.data();

4900  if

(

str

.empty() || ((quote_char = *str_pos) !=

'"'

&& quote_char !=

'\''

)) {

4902  "The source string must start with a quote"

, 0);

4905  const char

* str_end = str_pos +

str

.length();

4906  bool

escaped =

false

;

4908  while

(++str_pos < str_end) {

4909  if

(*str_pos == quote_char && !escaped) {

4910  size_t

pos = str_pos -

str

.data();

4911  if

(n_read !=

NULL

)

4915

escaped = *str_pos ==

'\\'

? !escaped :

false

;

4919  "Unterminated quoted string"

,

str

.length());

4933  out

.reserve(

str

.size());

4936  while

(pos <

str

.size()) {

4938  if

(pos2 ==

NPOS

) {

4947  if

(++pos2 ==

str

.size()) {

4949  "Unterminated escape sequence"

, pos2);

4951  switch

(

str

[pos2]) {

4954  case '/'

:

out

+=

str

[pos2];

break

;

4955  case 'b'

:

out

+=

'\b'

;

break

;

4956  case 'f'

:

out

+=

'\f'

;

break

;

4957  case 'n'

:

out

+=

'\n'

;

break

;

4958  case 'r'

:

out

+=

'\r'

;

break

;

4959  case 't'

:

out

+=

'\t'

;

break

;

4962  while

(pos <

str

.size() &&

isxdigit

((

unsigned char

)

str

[pos])) {

4965  if

(

auto len

= pos - pos2) {

4968

}

else if

(

len

> 4) {

4973  if

(

value

> 0xff) {

4975  "Escaped UTF-8 characters after '\\u00ff' are not supported"

, pos2);

4977  out

+=

static_cast<char>

(

value

);

5002  bool

comments_ok = (start + 1 <

str

.size() &&

str

[start + 1] ==

'!'

);

5003  for

(

SIZE_TYPE

pos = start + 1; pos <

str

.size(); ++pos) {

5004  switch

(

str

[pos]) {

5009

pos =

str

.find(

'\"'

, pos + 1);

5012  "Unclosed string in HTML tag"

, start);

5018  if

(comments_ok && pos + 1 <

str

.size()

5019

&&

str

[pos + 1] ==

'-'

) {

5020

pos =

str

.find(

"--"

, pos + 2);

5023  "Unclosed comment in HTML tag"

, start);

5043

(

"#0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

,

5045  if

(pos !=

NPOS

&&

str

[pos] ==

';'

) {

5060  if

(pos2 ==

NPOS

) {

5061

width +=

str

.size() - pos;

5064

width += pos2 - pos;

5065  if

(

str

[pos2] ==

'&'

) {

5082 inline bool _isspace

(

unsigned char

c)

5084  return

((c>=0x09 && c<=0x0D) || (c==0x20));

5087 template

<

typename

_D>

5089

_D& dest, TWrapFlags

flags

,

5090  const string

* prefix,

5091  const string

* prefix1)

5104  string

temp_back; temp_back.reserve(width);

5117  typedef

pair<SIZE_TYPE, SIZE_TYPE> TWrapSubstr;

5124

TWrapSubstr best_link(0, 0);

5125

TWrapSubstr latest_link(0, 0);

5127  while

(pos <

len

) {

5128  bool

hyphen =

false

;

5133

EScore best_score = eForced;

5137  bool

thisPartHasBackspace =

false

;

5139

temp_back = *prefix1;

5142  if

(is_html && best_link.second != 0) {

5144  str

.begin() + best_link.first,

5145  str

.begin() + best_link.second);

5153  if

(nl_pos <= pos) {

5154

nl_pos =

str

.find(

'\n'

, pos);

5155  if

(nl_pos ==

NPOS

) {

5159  if

(

column

+ (nl_pos - pos) <= width) {

5166

EScore score = eForced;

5168  const char

c =

str

[pos2];

5172

best_score = eNewline;

5173

best_link = latest_link;

5176  else if

(

_isspace

((

unsigned char

)c)) {

5177  if

(!do_flat && pos2 > 0 &&

5179  if

(pos2 <

len

- 1 &&

str

[pos2 + 1] ==

'\b'

) {

5180

thisPartHasBackspace =

true

;

5186  else if

(is_html && c ==

'<'

) {

5191  if

(pos2 ==

NPOS

) {

5195  if

((pos2 - start_of_tag) >= 6 &&

5196  str

[start_of_tag + 1] ==

'a'

&&

5197  str

[start_of_tag + 2] ==

' '

&&

5198  str

[start_of_tag + 3] ==

'h'

&&

5199  str

[start_of_tag + 4] ==

'r'

&&

5200  str

[start_of_tag + 5] ==

'e'

&&

5201  str

[start_of_tag + 6] ==

'f'

)

5204

latest_link.first = start_of_tag;

5205

latest_link.second = pos2 + 1;

5207  if

((pos2 - start_of_tag) >= 3 &&

5208  str

[start_of_tag + 1] ==

'/'

&&

5209  str

[start_of_tag + 2] ==

'a'

&&

5210  str

[start_of_tag + 3] ==

'>'

)

5213

latest_link.first = 0;

5214

latest_link.second = 0;

5217  else if

(is_html && c ==

'&'

) {

5220  if

(pos2 ==

NPOS

) {

5224  else if

(c ==

','

&&

column

< width && score_pos <

len

- 1) {

5228  else if

(do_flat ? c ==

'-'

:

ispunct

((

unsigned char

)c)) {

5232  case '('

:

case '['

:

case '{'

:

case '<'

:

case '`'

:

5236  if

(score_pos <

len

- 1 &&

column

< width) {

5244  if

(score >= best_score && score_pos > pos0) {

5245

best_pos = score_pos;

5247

best_link = latest_link;

5250  while

(pos2 <

len

- 1 &&

str

[pos2 + 1] ==

'\b'

) {

5256

thisPartHasBackspace =

true

;

5260  if

(best_score != eNewline &&

column

<= width) {

5261  if

(best_pos !=

len

) {

5264

best_link = latest_link;

5266

thisPartHasBackspace =

true

;

5275

string::const_iterator begin =

str

.begin() + pos;

5276

string::const_iterator end =

str

.begin() + best_pos;

5277  if

(thisPartHasBackspace) {

5280

string::const_iterator bs;

5281  while

((bs = find(begin, end,

'\b'

)) != end) {

5284

temp_back.append(begin, bs - 1);

5290  if

(

size

> prefix1->size()) {

5291

temp_back.resize(

size

- 1);

5300

temp_back.append(begin, end);

5306  if

(is_html && best_link.second != 0) {

5307

temp_back +=

"</a>"

;

5317  if

(best_score ==

eSpace

) {

5318  while

(

str

[pos] ==

' '

) {

5321  if

(

str

[pos] ==

'\n'

) {

5325  if

(best_score == eNewline) {

5330  if

(best_score ==

eSpace

|| best_score == eNewline) {

5334  while

(pos <

len

&&

str

[pos] ==

'\b'

) {

5338

dest.Append(temp_back);

5344

IWrapDest& dest, TWrapFlags

flags

,

5345  const string

* prefix,

5346  const string

* prefix1)

5354  const string

* prefix,

const string

* prefix1)

5356

CWrapDestStringList d(arr2);

5363  const string

& delim, list<string>&

arr

,

5365  const string

* prefix,

5366  const string

* prefix1)

5372  const string

* pfx = prefix1 ? prefix1 : prefix;

5377  bool

at_start =

true

;

5382  if

(

column

+ term_width <= width) {

5394

}

else if

(

column

+ delwidth + term_width <= width) {

5397  column

+= delwidth + term_width;

5401  arr

.push_back(

s

);

5427

list<CTempString> words;

5428  unsigned int

nw = 0;

5431  while

(pos <

str

.size()) {

5437  while

(pos <

str

.size()) {

5445  if

(width <

len

+ nw + wlen) {

5447  if

(width < wlen &&

len

< width -

len

)

5457  if

(

str

[pos - 1] ==

'.'

||

5458  str

[pos - 1] ==

'!'

||

5459  str

[pos - 1] ==

'?'

) {

5460  if

(

len

+ 1 >= width)

5469  if

(words.back().empty()) {

5476  if

(pos <

str

.size() &&

len

< width && !big) {

5477

space = (width -

len

) / (nw - 1);

5478

nw = (

unsigned int

)((width -

len

) % (nw - 1));

5487  ITERATE

(list<CTempString>, w, words) {

5489

par.back().append(space + (

n

<= nw ? 1 : 0) ,

' '

);

5490

par.back().append(w->data(), w->size());

5501  if

(

str

.empty()) {

5504 #if !defined(NCBI_OS_MSWIN) 5506

vector<CTempString> lines;

5514  auto

& line = lines[

i

];

5525  while

(

isspace

((

unsigned char

)line[pos])) {

5526  if

(++pos ==

len

) {

5539  if

(prefix.

empty

() || prefix.

size

() > pos) {

5540

prefix.

assign

(line, 0, pos);

5550  auto

& line = lines[

i

];

5552  bool

last_line = (

i

== lines.size()-1);

5570  while

(

isspace

((

unsigned char

)line[pos])) {

5571  if

(++pos ==

len

) {

5584  if

( prefix.

size

() ) {

5597 #if !defined(HAVE_STRDUP) 5598 extern char

*

strdup

(

const char

*

str

)

5603  size_t size

= strlen(

str

) + 1;

5610 static const char s_Encode

[256][4] = {

5611  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5612  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5613  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5614  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5615  "+"

,

"!"

,

"%22"

,

"%23"

,

"$"

,

"%25"

,

"%26"

,

"'"

,

5616  "("

,

")"

,

"*"

,

"%2B"

,

","

,

"-"

,

"."

,

"%2F"

,

5617  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5618  "8"

,

"9"

,

"%3A"

,

"%3B"

,

"%3C"

,

"%3D"

,

"%3E"

,

"%3F"

,

5619  "%40"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5620  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5621  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5622  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"_"

,

5623  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5624  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5625  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5626  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"%7E"

,

"%7F"

,

5627  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5628  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5629  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5630  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5631  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5632  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5633  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5634  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5635  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5636  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5637  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5638  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5639  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5640  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5641  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5642  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5646  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5647  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5648  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5649  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5650  "+"

,

"%21"

,

"%22"

,

"%23"

,

"%24"

,

"%25"

,

"%26"

,

"%27"

,

5651  "%28"

,

"%29"

,

"%2A"

,

"%2B"

,

"%2C"

,

"%2D"

,

"%2E"

,

"%2F"

,

5652  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5653  "8"

,

"9"

,

"%3A"

,

"%3B"

,

"%3C"

,

"%3D"

,

"%3E"

,

"%3F"

,

5654  "%40"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5655  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5656  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5657  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"%5F"

,

5658  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5659  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5660  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5661  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"%7E"

,

"%7F"

,

5662  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5663  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5664  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5665  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5666  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5667  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5668  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5669  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5670  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5671  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5672  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5673  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5674  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5675  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5676  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5677  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5681  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5682  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5683  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5684  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5685  "%20"

,

"%21"

,

"%22"

,

"%23"

,

"%24"

,

"%25"

,

"%26"

,

"%27"

,

5686  "%28"

,

"%29"

,

"%2A"

,

"%2B"

,

"%2C"

,

"%2D"

,

"%2E"

,

"%2F"

,

5687  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5688  "8"

,

"9"

,

"%3A"

,

"%3B"

,

"%3C"

,

"%3D"

,

"%3E"

,

"%3F"

,

5689  "%40"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5690  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5691  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5692  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"%5F"

,

5693  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5694  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5695  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5696  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"%7E"

,

"%7F"

,

5697  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5698  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5699  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5700  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5701  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5702  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5703  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5704  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5705  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5706  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5707  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5708  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5709  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5710  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5711  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5712  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5716  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5717  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5718  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5719  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5720  "+"

,

"%21"

,

"%22"

,

"%23"

,

"%24"

,

"%25"

,

"%26"

,

"%27"

,

5721  "%28"

,

"%29"

,

"%2A"

,

"%2B"

,

"%2C"

,

"%2D"

,

"."

,

"/"

,

5722  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5723  "8"

,

"9"

,

"%3A"

,

"%3B"

,

"%3C"

,

"%3D"

,

"%3E"

,

"%3F"

,

5724  "%40"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5725  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5726  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5727  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"_"

,

5728  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5729  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5730  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5731  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"%7E"

,

"%7F"

,

5732  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5733  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5734  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5735  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5736  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5737  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5738  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5739  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5740  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5741  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5742  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5743  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5744  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5745  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5746  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5747  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5753  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5754  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5755  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5756  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5757  "%20"

,

"%21"

,

"%22"

,

"%23"

,

"%24"

,

"%25"

,

"%26"

,

"%27"

,

5758  "%28"

,

"%29"

,

"%2A"

,

"+"

,

"%2C"

,

"-"

,

"."

,

"%2F"

,

5759  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5760  "8"

,

"9"

,

"%3A"

,

"%3B"

,

"%3C"

,

"%3D"

,

"%3E"

,

"%3F"

,

5761  "%40"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5762  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5763  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5764  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"%5F"

,

5765  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5766  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5767  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5768  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"%7E"

,

"%7F"

,

5769  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5770  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5771  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5772  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5773  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5774  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5775  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5776  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5777  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5778  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5779  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5780  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5781  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5782  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5783  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5784  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5794  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5795  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5796  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5797  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5798  "%20"

,

"!"

,

"%22"

,

"%23"

,

"$"

,

"%25"

,

"&"

,

"'"

,

5799  "("

,

")"

,

"*"

,

"+"

,

","

,

"-"

,

"."

,

"%2F"

,

5800  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5801  "8"

,

"9"

,

"%3A"

,

";"

,

"%3C"

,

"="

,

"%3E"

,

"%3F"

,

5802  "%40"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5803  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5804  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5805  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"_"

,

5806  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5807  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5808  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5809  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"~"

,

"%7F"

,

5810  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5811  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5812  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5813  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5814  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5815  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5816  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5817  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5818  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5819  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5820  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5821  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5822  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5823  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5824  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5825  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5835  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5836  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5837  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5838  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5839  "%20"

,

"%21"

,

"%22"

,

"%23"

,

"%24"

,

"%25"

,

"%26"

,

"%27"

,

5840  "%28"

,

"%29"

,

"%2A"

,

"%2B"

,

"%2C"

,

"-"

,

"."

,

"%2F"

,

5841  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5842  "8"

,

"9"

,

"%3A"

,

"%3B"

,

"%3C"

,

"%3D"

,

"%3E"

,

"%3F"

,

5843  "%40"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5844  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5845  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5846  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"%5F"

,

5847  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5848  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5849  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5850  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"%7E"

,

"%7F"

,

5851  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5852  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5853  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5854  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5855  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5856  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5857  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5858  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5859  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5860  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5861  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5862  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5863  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5864  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5865  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5866  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5878  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5879  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5880  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5881  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5882  "%20"

,

"!"

,

"%22"

,

"%23"

,

"$"

,

"%25"

,

"&"

,

"'"

,

5883  "("

,

")"

,

"*"

,

"+"

,

","

,

"-"

,

"."

,

"/"

,

5884  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5885  "8"

,

"9"

,

":"

,

";"

,

"%3C"

,

"="

,

"%3E"

,

"%3F"

,

5886  "@"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5887  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5888  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5889  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"_"

,

5890  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5891  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5892  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5893  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"~"

,

"%7F"

,

5894  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5895  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5896  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5897  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5898  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5899  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5900  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5901  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5902  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5903  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5904  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5905  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5906  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5907  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5908  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5909  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5913  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5914  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5915  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5916  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5917  "%20"

,

"!"

,

"%22"

,

"%23"

,

"$"

,

"%25"

,

"%26"

,

"'"

,

5918  "("

,

")"

,

"%2A"

,

"%2B"

,

"%2C"

,

"-"

,

"."

,

"/"

,

5919  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5920  "8"

,

"9"

,

":"

,

"%3B"

,

"%3C"

,

"%3D"

,

"%3E"

,

"?"

,

5921  "@"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5922  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5923  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5924  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"_"

,

5925  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5926  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5927  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5928  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"~"

,

"%7F"

,

5929  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5930  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5931  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5932  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5933  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5934  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5935  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5936  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5937  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5938  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5939  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5940  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5941  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5942  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5943  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5944  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5948  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5949  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5950  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5951  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5952  "%20"

,

"!"

,

"%22"

,

"%23"

,

"$"

,

"%25"

,

"%26"

,

"'"

,

5953  "("

,

")"

,

"%2A"

,

"%2B"

,

"%2C"

,

"-"

,

"."

,

"/"

,

5954  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5955  "8"

,

"9"

,

":"

,

"%3B"

,

"%3C"

,

"%3D"

,

"%3E"

,

"?"

,

5956  "@"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5957  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5958  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

5959  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"_"

,

5960  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

5961  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

5962  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

5963  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"~"

,

"%7F"

,

5964  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

5965  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

5966  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

5967  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

5968  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

5969  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

5970  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

5971  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

5972  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

5973  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

5974  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

5975  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

5976  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

5977  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

5978  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

5979  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 5989  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

5990  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

5991  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

5992  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

5993  "%20"

,

"!"

,

"%22"

,

"%23"

,

"$"

,

"%25"

,

"&"

,

"'"

,

5994  "("

,

")"

,

"*"

,

"+"

,

","

,

"-"

,

"."

,

"/"

,

5995  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

5996  "8"

,

"9"

,

":"

,

";"

,

"%3C"

,

"="

,

"%3E"

,

"?"

,

5997  "@"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

5998  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

5999  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

6000  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"_"

,

6001  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

6002  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

6003  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

6004  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"~"

,

"%7F"

,

6005  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

6006  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

6007  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

6008  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

6009  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

6010  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

6011  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

6012  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

6013  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

6014  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

6015  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

6016  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

6017  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

6018  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

6019  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

6020  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 6024  "%00"

,

"%01"

,

"%02"

,

"%03"

,

"%04"

,

"%05"

,

"%06"

,

"%07"

,

6025  "%08"

,

"%09"

,

"%0A"

,

"%0B"

,

"%0C"

,

"%0D"

,

"%0E"

,

"%0F"

,

6026  "%10"

,

"%11"

,

"%12"

,

"%13"

,

"%14"

,

"%15"

,

"%16"

,

"%17"

,

6027  "%18"

,

"%19"

,

"%1A"

,

"%1B"

,

"%1C"

,

"%1D"

,

"%1E"

,

"%1F"

,

6028  "+"

,

"!"

,

"%22"

,

"%23"

,

"$"

,

"%25"

,

"%26"

,

"'"

,

6029  "("

,

")"

,

"*"

,

"%2B"

,

"%2C"

,

"-"

,

"."

,

"%2F"

,

6030  "0"

,

"1"

,

"2"

,

"3"

,

"4"

,

"5"

,

"6"

,

"7"

,

6031  "8"

,

"9"

,

"%3A"

,

"%3B"

,

"%3C"

,

"%3D"

,

"%3E"

,

"%3F"

,

6032  "%40"

,

"A"

,

"B"

,

"C"

,

"D"

,

"E"

,

"F"

,

"G"

,

6033  "H"

,

"I"

,

"J"

,

"K"

,

"L"

,

"M"

,

"N"

,

"O"

,

6034  "P"

,

"Q"

,

"R"

,

"S"

,

"T"

,

"U"

,

"V"

,

"W"

,

6035  "X"

,

"Y"

,

"Z"

,

"%5B"

,

"%5C"

,

"%5D"

,

"%5E"

,

"_"

,

6036  "%60"

,

"a"

,

"b"

,

"c"

,

"d"

,

"e"

,

"f"

,

"g"

,

6037  "h"

,

"i"

,

"j"

,

"k"

,

"l"

,

"m"

,

"n"

,

"o"

,

6038  "p"

,

"q"

,

"r"

,

"s"

,

"t"

,

"u"

,

"v"

,

"w"

,

6039  "x"

,

"y"

,

"z"

,

"%7B"

,

"%7C"

,

"%7D"

,

"%7E"

,

"%7F"

,

6040  "%80"

,

"%81"

,

"%82"

,

"%83"

,

"%84"

,

"%85"

,

"%86"

,

"%87"

,

6041  "%88"

,

"%89"

,

"%8A"

,

"%8B"

,

"%8C"

,

"%8D"

,

"%8E"

,

"%8F"

,

6042  "%90"

,

"%91"

,

"%92"

,

"%93"

,

"%94"

,

"%95"

,

"%96"

,

"%97"

,

6043  "%98"

,

"%99"

,

"%9A"

,

"%9B"

,

"%9C"

,

"%9D"

,

"%9E"

,

"%9F"

,

6044  "%A0"

,

"%A1"

,

"%A2"

,

"%A3"

,

"%A4"

,

"%A5"

,

"%A6"

,

"%A7"

,

6045  "%A8"

,

"%A9"

,

"%AA"

,

"%AB"

,

"%AC"

,

"%AD"

,

"%AE"

,

"%AF"

,

6046  "%B0"

,

"%B1"

,

"%B2"

,

"%B3"

,

"%B4"

,

"%B5"

,

"%B6"

,

"%B7"

,

6047  "%B8"

,

"%B9"

,

"%BA"

,

"%BB"

,

"%BC"

,

"%BD"

,

"%BE"

,

"%BF"

,

6048  "%C0"

,

"%C1"

,

"%C2"

,

"%C3"

,

"%C4"

,

"%C5"

,

"%C6"

,

"%C7"

,

6049  "%C8"

,

"%C9"

,

"%CA"

,

"%CB"

,

"%CC"

,

"%CD"

,

"%CE"

,

"%CF"

,

6050  "%D0"

,

"%D1"

,

"%D2"

,

"%D3"

,

"%D4"

,

"%D5"

,

"%D6"

,

"%D7"

,

6051  "%D8"

,

"%D9"

,

"%DA"

,

"%DB"

,

"%DC"

,

"%DD"

,

"%DE"

,

"%DF"

,

6052  "%E0"

,

"%E1"

,

"%E2"

,

"%E3"

,

"%E4"

,

"%E5"

,

"%E6"

,

"%E7"

,

6053  "%E8"

,

"%E9"

,

"%EA"

,

"%EB"

,

"%EC"

,

"%ED"

,

"%EE"

,

"%EF"

,

6054  "%F0"

,

"%F1"

,

"%F2"

,

"%F3"

,

"%F4"

,

"%F5"

,

"%F6"

,

"%F7"

,

6055  "%F8"

,

"%F9"

,

"%FA"

,

"%FB"

,

"%FC"

,

"%FD"

,

"%FE"

,

"%FF" 6064  const

char (*encode_table)[4];

6113  const unsigned char

* cstr = (

const unsigned char

*)

str

.data();

6114  for

(pos = 0; pos <

len

; pos++) {

6115  if

(encode_table[cstr[pos]][0] ==

'%'

)

6118

dst.resize(dst_len);

6121  for

(pos = 0; pos <

len

; pos++, p++) {

6122  const char

* subst = encode_table[cstr[pos]];

6123  if

(*subst !=

'%'

) {

6127

dst[++p] = *(++subst);

6128

dst[++p] = *(++subst);

6141  result

.reserve(stringSize + 7);

6146  result

.append(1,

'\''

);

6150  result

.append(1,

'\''

);

6151

}

else if

(

offset

> 0 && (c & 0x80) != 0) {

6156  result

.append(1,

'\''

);

6170  if

(dst.length() < src.

length

()) {

6176  switch

( src[psrc] ) {

6181  if

(psrc + 2 >

len

) {

6182

dst[pdst] = src[psrc++];

6186  if

(n1 < 0 || n1 > 15 || n2 < 0 || n2 > 15) {

6187

dst[pdst] = src[psrc++];

6189

dst[pdst] = char((n1 << 4) | n2);

6201

dst[pdst] = src[psrc++];

6230  const

char (*encode_table)[4];

6254  const unsigned char

* cstr = (

const unsigned char

*)

str

.data();

6257  const char

* subst = encode_table[cstr[pos]];

6258  if

(*subst != cstr[pos]) {

6268  size_t n

=

str

.size();

6271  size_t

pos = 0,

len

= 0, n_read, n_written;

6274  static const size_t

no_breaks = 0;

6275  const char

* ptr = dst_buf;

6277  sizeof

(dst_buf), &n_written, &no_breaks));

6278  _ASSERT

(n_read && n_written);

6281  if

(line_len &&

len

+ n_written > line_len) {

6284

dst.append(ptr,

len

);

6285

dst.append(1,

'\n'

);

6289

}

while

(

n_written > line_len);

6291

dst.append(ptr, n_written);

6300  size_t n

=

str

.size();

6303  const char

*

prev

= 0;

6304  size_t

pos = 0, n_prev = 0, n_read, n_written;

6307  const char

*

next

=

str

.data() + pos;

6309

|| (n_written &&

prev

&& memchr(

prev

,

'='

, n_prev))) {

6319

dst.append(dst_buf, n_written);

6332  const char

* c =

str

;

6335  if

( strchr(

str

,

':'

) ) {

6342  bool

have_group =

false

;

6343  const char

* prev_colon =

NULL

;

6346  for

(; c && c -

str

< (

int

)

size

&& *c !=

'%'

; c++) {

6353  if

(prev_colon && c - prev_colon == 1) {

6370  char

d = (char)

toupper

((

unsigned char

)(*c));

6371  if

(d < '0' || d >

'F'

) {

6388  int

& errno_ref = errno;

6391  if

( !

isdigit

((

unsigned char

)(*c)) )

6394  val

= strtoul(c, &e, 10);

6395  if

(c == e || errno_ref)

6409  if

((

size_t

)(c -

str

) !=

size

) {

6412  return

!*c && dots == 3 &&

val

< 256;

6419  if

(

str

.HasZeroAtEnd() ) {

6424  if

(

size

<

sizeof

(

buf

) ) {

6438  template

<

typename

TDelimiter>

6445

PDelimiter(

const

TDelimiter& delim)

6449  bool

operator()(

char

tested_symbol)

const

;

6464  template

<

typename

TComparator,

typename

TResult>

6470  const char

* current_ptr =

str

.data();

6471  const char

* end_ptr = current_ptr +

str

.length();

6472  size_t

current_field = 0;

6475  for

( ; current_field != field_no; current_field++) {

6476  while

(current_ptr < end_ptr && !

delimiter

(*current_ptr))

6480  while

(current_ptr < end_ptr &&

delimiter

(*current_ptr))

6486  if

(current_ptr >= end_ptr)

6490  if

(current_field != field_no)

6494  const char

* field_start = current_ptr;

6495  while

(current_ptr < end_ptr && !

delimiter

(*current_ptr))

6498  return

TResult(field_start, current_ptr - field_start);

6504  bool

PDelimiter<char>::operator() (

char

c)

const 6510  bool

PDelimiter<CTempString>::operator() (

char

c)

const 6522  return

s_GetField<PDelimiter<CTempString>,

string

>

6525

PDelimiter<CTempString>(delimiters),

6535  return

s_GetField<PDelimiter<char>,

string

>

6548  return

s_GetField<PDelimiter<CTempString>,

CTempString

>

6551

PDelimiter<CTempString>(delimiters),

6581  "NStr::StringToNumeric overflow"

, 0);

6589 #if defined(__EXPORT_CTOR_STRINGUTF8__) 6617 #if NCBITOOLKIT_USE_LONG_UCS4 6625 #if defined(HAVE_WSTRING) 6633 #if NCBITOOLKIT_USE_LONG_UCS4 6641 #if defined(HAVE_WSTRING) 6651 #if NCBITOOLKIT_USE_LONG_UCS4 6673  for

(; src != to; ++src, ++

count

) {

6676  while

(more-- && good) {

6690  if

(err == src.

end

()) {

6702  if

(err !=

str

.end()) {

6704  string

(

"Source string is not in UTF8 format: "

) +

6716  bool

cp1252, iso1, ascii, utf8, cesu8;

6717  for

(cp1252 = iso1 = ascii = utf8 =

true

, cesu8=

false

;

i

!= end; ++

i

) {

6740  if

(ch == 0x81 || ch == 0x8D || ch == 0x8F ||

6741

ch == 0x90 || ch == 0x9D) {

6748  if

(utf8 && !cesu8 && ch == 0xED && (end -

i

) > 5) {

6752  if

( ((c1 & 0xA0) == 0xA0) && (c3 == (

uint8_t

)0xED) && ((c4 & 0xB0) == 0xB0) ) {

6765

}

else if

(cp1252) {

6774  bool

matches =

false

;

6776  switch

( enc_src ) {

6789

matches = (encoding == enc_src);

6808  "Cannot convert encoding to string"

, 0);

6824  const char

* ascii[] = {

6825  "ANSI_X3.4-1968"

,

"iso-ir-6"

,

"ANSI_X3.4-1986"

,

"ISO_646.irv:1991"

,

6826  "ASCII"

,

"ISO646-US"

,

"US-ASCII"

,

"us"

,

"IBM367"

,

"cp367"

,

"csASCII"

,

NULL

};

6827  for

(

i

=0; ascii[

i

]; ++

i

) {

6832  const char

* iso8859_1[] = {

6833  "ISO_8859-1:1987"

,

"iso-ir-100"

,

"ISO_8859-1"

,

"ISO-8859-1"

,

6834  "latin1"

,

"l1"

,

"IBM819"

,

"CP819"

,

"csISOLatin1"

,

NULL

};

6835  for

(

i

=0; iso8859_1[

i

]; ++

i

) {

6840  const char

* cesu[] = {

6841  "CESU-8"

,

"csCESU8"

,

"csCESU-8"

,

NULL

};

6842  for

(

i

=0; cesu[

i

]; ++

i

) {

6853

0x20AC, 0x003F, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,

6854

0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x003F, 0x017D, 0x003F,

6855

0x003F, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,

6856

0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x003F, 0x017E, 0x0178

6868  "Unacceptable character encoding"

, 0);

6873  if

(ch > 0x7F && ch < 0xA0) {

6879  "Unsupported character encoding"

, 0);

6888  "Unacceptable character encoding"

, 0);

6894  for

(

Uint1

ch = 0x80; ch <= 0x9F; ++ch) {

6902  "Failed to convert symbol to requested encoding"

, 0);

6925 #if defined(HAVE_WSTRING) 6930

,

m_Facet

(use_facet< ctype<wchar_t> >(lcl)) {

6933  wchar_t

w =

m_Facet

.widen(ch);

6934  if

(w == (

wchar_t

)-1) {

6935  string msg

(

"Failed to convert to Unicode char "

);

6942  char

ch =

m_Facet

.narrow(sym,0);

6943  if

(ch == 0 && sym != 0) {

6944  string msg

(

"Failed to convert Unicode symbol "

);

6951  const

ctype<wchar_t>&

m_Facet

;

6969  for

(

char

ch : src) {

6972  self

.reserve(needed+1);

6973  for

(

char

ch : src) {

6981  const SCharEncoder

& enc,

const char

* substitute_on_error)

6987  for

( ; src != to; ++src ) {

6989  if

(substitute_on_error) {

6994  result

.append(substitute_on_error);

7014  "Conversion into CESU-8 encoding is not supported"

, 0);

7019 #if defined(HAVE_WSTRING) 7021  const locale

& lcl,

const char

* substitute_on_error, EValidate

validate

)

7034  string

(

"Source string is not in UTF8 format: "

) +

7044  self

.append(1,

Uint1

(ch));

7046  else if

(ch < 0x800) {

7047  self

.append(1,

Uint1

( (ch >> 6) | 0xC0));

7048  self

.append(1,

Uint1

( (ch & 0x3F) | 0x80));

7049

}

else if

(ch < 0x10000) {

7050  self

.append(1,

Uint1

( (ch >> 12) | 0xE0));

7051  self

.append(1,

Uint1

(((ch >> 6) & 0x3F) | 0x80));

7052  self

.append(1,

Uint1

(( ch & 0x3F) | 0x80));

7054  self

.append(1,

Uint1

( (ch >> 18) | 0xF0));

7055  self

.append(1,

Uint1

(((ch >> 12) & 0x3F) | 0x80));

7056  self

.append(1,

Uint1

(((ch >> 6) & 0x3F) | 0x80));

7057  self

.append(1,

Uint1

( (ch & 0x3F) | 0x80));

7069  "Unable to guess the source string encoding"

, 0);

7074  "Source string does not match the declared encoding"

, 0);

7082  self

.reserve(

max

(

self

.capacity(),

self

.length()+src.

length

()));

7083  const char

*

i

= src.

data

();

7084  const char

* end =

i

+ src.

length

();

7085  for

(;

i

!= end; ++

i

) {

7087  if

(ch == 0xED && (end -

i

) > 5) {

7091  if

( ((c1 & 0xA0) == 0xA0) && (c3 == (

uint8_t

)0xED) && ((c4 & 0xB0) == 0xB0) ) {

7097  self

.append(1, ch);

7105  for

(

i

= src.

begin

();

i

!= end; ++

i

) {

7111  self

.reserve(

max

(

self

.capacity(),

self

.length()+needed+1));

7112  for

(

i

= src.

begin

();

i

!= end; ++

i

) {

7123

}

else if

(ch < 0x800) {

7125

}

else if

(ch < 0x10000) {

7137  while

(more-- && good) {

7140  return

good ? (src -

str

.begin() + 1) : 0;

7146  if

((ch & 0x80) != 0) {

7147  if

((ch & 0xE0) == 0xC0) {

7148  if

((ch & 0xFE) == 0xC0) {

7153

}

else if

((ch & 0xF0) == 0xE0) {

7155

}

else if

((ch & 0xF8) == 0xF0) {

7156  if

((

unsigned char

)ch > (

unsigned char

)0xF4) {

7171  return

(ch & 0xC0) == 0x80;

7178  if

((ch & 0x80) == 0) {

7180

}

else if

((ch & 0xE0) == 0xC0) {

7181

chRes = (ch & 0x1F);

7183

}

else if

((ch & 0xF0) == 0xE0) {

7184

chRes = (ch & 0x0F);

7186

}

else if

((ch & 0xF8) == 0xF0) {

7187

chRes = (ch & 0x07);

7191  "Source string is not in UTF8 format"

, 0);

7199  if

((ch & 0xC0) == 0x80) {

7200  return

(chU << 6) | (ch & 0x3F);

7203  "Source string is not in UTF8 format"

, 0);

7217  return

chU == 0x85 || chU == 0xA0 || chU == 0x1680 || chU == 0x180E;

7218

}

else if

(chU >= 0x3000) {

7219  return

chU == 0x3000;

7221  return

chU <=0x200A || chU == 0x2028 || chU == 0x2029 || chU == 0x202F || chU == 0x205F;

7223  return

iswspace(chU)!=0;

7228  if

(!

str

.empty()) {

7233  str

.replace(0,

str

.length(),

t

.data(),

t

.length());

7242  if

(

str

.empty()) {

7255  while

(end != beg) {

7256  while

(end != beg) {

7258  if

((ch & 0x80) == 0 || (ch & 0xC0) == 0xC0) {

7279  case eConvert

:

return "eConvert"

;

7280  case eBadArgs

:

return "eBadArgs"

;

7281  case eFormat

:

return "eFormat"

;

7370

node = node->next.get()) {

7371

s->append(node->str.data(), node->str.size());

7391  "CTempStringList::Join(): non-NULL storage required"

, 0);

7397

node = node->next.get()) {

7398

memcpy(p, node->str.data(), node->str.size());

7399

p += node->str.size();

7411

node = node->next.get()) {

7412

total += node->str.size();

7441  SIZE_TYPE

pos, part_start, delim_pos = 0, quote_pos = 0;

7442  bool

found_text =

false

,

done

;

7443  char

active_quote =

'\0'

;

7450

pos = part_start =

m_Pos

;

7453  if

(ptr_part_start) {

7454

*ptr_part_start = part_start;

7462  if

(ptr_delim_pos) {

7463

*ptr_delim_pos =

NPOS

;

7471  SIZE_TYPE

next_start = pos = delim_pos + 1;

7472  bool

handled =

false

;

7473  char

c =

m_Str

[delim_pos];

7483  if

(active_quote !=

'\0'

) {

7484  if

(c == active_quote) {

7489

active_quote =

'\0'

;

7498

quote_pos = delim_pos;

7517  if

(ptr_delim_pos) {

7518

*ptr_delim_pos = delim_pos;

7522  if

(delim_pos > part_start) {

7524  if

(part_collector !=

NULL

) {

7525

part_collector->

Add

(

m_Str

.

substr

(part_start, delim_pos - part_start));

7528

part_start = next_start;

7531  if

(active_quote !=

'\0'

) {

7535  if

(delim_pos ==

NPOS

) {

7537  if

(part_collector !=

NULL

) {

ncbi::TMaskedQueryRegions mask

CNcbiOstrstreamToString class helps convert CNcbiOstrstream to a string Sample usage:

CS2N_Guard(NStr::TStringToNumFlags, bool skip_if_zero)

string Message(const CTempString str, const char *to_type, const CTempString msg)

Adapter for token position container pointer(NULL legal) Makes pointer to a container look as a legal...

Main tokenization algorithm.

@ eCharBuffer

Zeros are part of the data.

CStringUTF8_DEPRECATED(void)

Singly-linked list of substrings that will constitute a single Split/Tokenize piece,...

Helper class to allocate memory for CTempString[Ex] on demand in the functions which need to modify t...

CTempString implements a light-weight string on top of a storage buffer whose lifetime management is ...

The NCBI C++ standard methods for dealing with std::string.

static vector< string > arr

std::ofstream out("events_result.xml")

main entry point for tests

static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)

static DLIST_TYPE *DLIST_NAME() last(DLIST_LIST_TYPE *list)

static DLIST_TYPE *DLIST_NAME() prev(DLIST_LIST_TYPE *list, DLIST_TYPE *item)

static DLIST_TYPE *DLIST_NAME() next(DLIST_LIST_TYPE *list, DLIST_TYPE *item)

static const char * str(char *buf, int n)

static const char * column

static const char * validate(DSNINFO *di)

Go looking for trouble.

char * strdup(const char *str)

Supply string duplicate function, if one is not defined.

#define ITERATE(Type, Var, Cont)

ITERATE macro to sequence through container elements.

#define NON_CONST_ITERATE(Type, Var, Cont)

Non constant version of ITERATE macro.

element_type * get(void) const

Get pointer.

#define ERR_POST_X_ONCE(err_subcode, message)

Error posting only once during program execution with default error code and given error subcode.

#define ERR_POST_X(err_subcode, message)

Error posting with default error code and given error subcode.

void Warning(CExceptionArgs_Base &args)

#define NCBI_THROW2(exception_class, err_code, message, extra)

Throw exception with extra parameter.

virtual const char * GetErrCodeString(void) const

Get error code interpreted as text.

static void SetErrno(int errno_code)

Set last error using errno code.

void Info(CExceptionArgs_Base &args)

#define finite

Define value of finite (Is Finite).

#define NCBI_CONST_LONGDOUBLE(v)

uint8_t Uint1

1-byte (8-bit) unsigned integer

unsigned char Uchar

Alias for unsigned char.

uint32_t Uint4

4-byte (32-bit) unsigned integer

int64_t Int8

8-byte (64-bit) signed integer

uint64_t Uint8

8-byte (64-bit) unsigned integer

#define NCBI_AS_STRING(value)

Convert some value to string even if this value is macro itself.

char * Allocate(CTempString::size_type len)

static EEncoding StringToEncoding(const CTempString &encoding_name)

Convert encoding name into EEncoding enum, taking into account synonyms as per http://www....

static list< string > & SplitByPattern(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)

Variation of Split() with fSplit_ByPattern flag applied by default.

static bool IsWhiteSpace(TUnicodeSymbol sym)

Determines if a symbol is whitespace per http://unicode.org/charts/uca/chart_Whitespace....

static bool StringToBool(const CTempString str)

Convert string to bool.

CTempStringEx m_InternalDelim

static string HtmlDecode(const CTempString str, EEncoding encoding=eEncoding_Unknown, THtmlDecode *result_flags=NULL)

Decode HTML entities and character references.

static void x_Validate(const CTempString &str)

NCBI_NS_STD::string::size_type SIZE_TYPE

static bool x_EvalFirst(char ch, SIZE_TYPE &more)

static string SizetToString(size_t value, TNumToStringFlags flags=0, int base=10)

Convert size_t to string.

virtual string Encode(const CTempString src, EStringType stype) const

const_iterator end() const

Return an iterator to the string's ending position (one past the end of the represented sequence)

static string Int8ToString(Int8 value, TNumToStringFlags flags=0, int base=10)

Convert Int8 to string.

static string PrintableString(const CTempString str, TPrintableMode mode=fNewLine_Quote|fNonAscii_Passthru)

Get a printable version of the specified string.

CStringDecoder_Url(NStr::EUrlDecode flag=NStr::eUrlDec_All)

static CStringUTF8 & x_Append(CStringUTF8 &u8str, const CTempString &src, EEncoding encoding, EValidate validate)

static CTempString TruncateSpaces_Unsafe(const CTempString str, ETrunc where=eTrunc_Both)

Truncate whitespace in a string.

static string DoubleToString(double value, int precision=-1, TNumToStringFlags flags=0)

Convert double to string.

static int StringToNonNegativeInt(const CTempString str, TStringToNumFlags flags=0)

Convert string to non-negative integer value.

~CTempString_Storage(void)

char16_t TCharUCS2

Type for character in UCS-2 encoding.

static CTempString GetField_Unsafe(const CTempString str, size_t field_no, const CTempString delimiters, EMergeDelims merge=eNoMergeDelims)

Search for a field.

static int CompareNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)

Case-insensitive compare of a substring with another string.

EUrlEncode

URL-encode flags.

EMergeDelims

Whether to merge adjacent delimiters.

static string AsSingleByteString(const CTempString &src, EEncoding encoding, const char *substitute_on_error=0, EValidate validate=eNoValidate)

Convert UTF8 string into a single-byte character representation.

static int StringToInt(const CTempString str, TStringToNumFlags flags=0, int base=10)

Convert string to int.

static SIZE_TYPE CommonOverlapSize(const CTempString s1, const CTempString s2)

Determine if the suffix of one string is the prefix of another.

const CTempString & m_Str

static bool x_EvalNext(char ch)

int TPrintableMode

Bitwise OR of EPrintableMode flags.

static bool MatchEncoding(const CTempString &src, EEncoding encoding)

Check the encoding of the C/C++ string.

static Int8 StringToInt8(const CTempString str, TStringToNumFlags flags=0, int base=10)

Convert string to Int8.

int TNumToStringFlags

Bitwise OR of "ENumToStringFlags".

static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)

Split a string using specified delimiters.

static string Base64Encode(const CTempString str, size_t line_len=0)

Base64-encode string.

static string GetField(const CTempString str, size_t field_no, const CTempString delimiters, EMergeDelims merge=eNoMergeDelims)

Search for a field.

EUrlDecode

URL decode flags.

static SIZE_TYPE FindNoCase(const CTempString str, const CTempString pattern, SIZE_TYPE start, SIZE_TYPE end, EOccurrence which=eFirst)

Find the pattern in the specified range of a string using a case insensitive search.

static string Escape(const CTempString str, const CTempString metacharacters, char escape_char='\\')

Escape string (generic version).

static bool IsLower(const CTempString str)

Checks if all letters in the given string have a lower case.

static CTempString TruncateSpaces_Unsafe(const CTempString &str, NStr::ETrunc side=NStr::eTrunc_Both)

Truncate whitespace in the string.

static string HtmlEntity(TUnicodeSymbol uch)

Returns HTML entity name for this symbol if one exists (without leading ampersand and trailing semico...

static bool MatchesMask(CTempString str, CTempString mask, ECase use_case=eCase)

Match "str" against the "mask".

virtual const char * GetErrCodeString(void) const override

Translate from the error code value to its string representation.

static SIZE_TYPE x_BytesNeeded(TUnicodeSymbol ch)

static CStringUTF8 SQLEncode(const CStringUTF8 &str, ESqlEncode flag)

SQL-encode string.

static string LongToString(long value, TNumToStringFlags flags=0, int base=10)

Convert Int to string.

unique_ptr< string > m_Encoded

static bool IsBlank(const CTempString str, SIZE_TYPE pos=0)

Check if a string is blank (has no text).

static double StringToDoubleEx(const char *str, size_t size, TStringToNumFlags flags=0)

This version accepts zero-terminated string.

void x_ExtendInternalDelim()

static double StringToDouble(const CTempStringEx str, TStringToNumFlags flags=0)

Convert string to double.

static string HtmlEncode(const CTempString str, THtmlEncode flags=fHtmlEnc_EncodeAll)

Encode a string for HTML.

static Uint8 StringToUInt8_DataSize(const CTempString str, TStringToNumFlags flags=0)

Convert string that can contain "software" qualifiers to Uint8.

static SIZE_TYPE GetSymbolCount(const CTempString &src)

Get the number of symbols (code points) in UTF8 string.

static int strncasecmp(const char *s1, const char *s2, size_t n)

Case-insensitive comparison of two zero-terminated strings, narrowed to the specified number of chara...

static size_t StringToSizet(const CTempString str, TStringToNumFlags flags=0, int base=10)

Convert string to size_t.

CTempString & assign(const char *src_str, size_type len)

Assign new values to the content of the a string.

static CTempString x_GetErrorFragment(const CTempString &src)

static string URLDecode(const CTempString str, EUrlDecode flag=eUrlDec_All)

URL-decode string.

static CTempString TrimSuffix_Unsafe(const CTempString str, const CTempString suffix, ECase use_case=eCase)

Trim suffix from a string.

static const string BoolToString(bool value)

Convert bool to string.

static void TruncateSpacesInPlace(string &str, ETrunc where=eTrunc_Both)

Truncate whitespace in a string (in-place)

static string IntToString(int value, TNumToStringFlags flags=0, int base=10)

Convert int to string.

static SIZE_TYPE DoubleToStringPosix(double value, unsigned int precision, char *buf, SIZE_TYPE buf_size)

Convert double to string with specified precision and put the result into a character buffer,...

void x_SkipDelims(bool force_skip)

static EEncoding GuessEncoding(const CTempString &src)

Guess the encoding of the C/C++ string.

static string Dedent(const CTempString str, TDedentFlags flags=0)

Dedent multi-line string, removing common whitespace prefix for each line.

virtual string Decode(const CTempString src, EStringType stype) const

static SIZE_TYPE Find(const CTempString str, const CTempString pattern, ECase use_case=eCase, EDirection direction=eForwardSearch, SIZE_TYPE occurrence=0)

Find the pattern in the string.

PNocase_Generic< string > PNocase

static unsigned long StringToULong(const CTempString str, TStringToNumFlags flags=0, int base=10)

Convert string to unsigned long.

const char * const_iterator

static int HexChar(char ch)

Convert character to integer.

size_t GetSize(void) const

static string EncodingToString(EEncoding encoding)

Give Encoding name as string.

int TSplitFlags

Bitwise OR of ESplitFlags.

ETrunc

Which end to truncate a string.

static string ParseEscapes(const CTempString str, EEscSeqRange mode=eEscSeqRange_Standard, char user_char='?')

Parse C-style escape sequences in the specified string.

static void PtrToString(string &out_str, const void *ptr)

Convert pointer to string.

static string Quote(const CTempString str, char quote_char='"', char escape_char = '\\')

Quote string (generic version).

const char * data(void) const

Return a pointer to the array represented.

static string UInt8ToString_DataSize(Uint8 value, TNumToStringFlags flags=0, unsigned int max_digits=3)

Convert UInt8 to string using "software" qualifiers.

basic_string< TUnicodeSymbol > TStringUnicode

Unicode string.

static double StringToDoublePosix(const char *str, char **endptr=0, TStringToNumFlags flags=0)

Convert string to double-precision value (analog of strtod function)

const wchar_t *const kEmptyWCStr

static SIZE_TYPE FindWord(const CTempString str, const CTempString word, ECase use_case=eCase, EDirection direction=eForwardSearch)

Find given word in the string.

char32_t TUnicodeSymbol

Unicode character.

static TUnicodeSymbol DecodeFirst(char ch, SIZE_TYPE &more)

Begin converting first character of UTF8 sequence into Unicode.

bool empty(void) const

Return true if the represented string is empty (i.e., the length is zero)

static CTempString TrimPrefix_Unsafe(const CTempString str, const CTempString prefix, ECase use_case=eCase)

Trim prefix from a string.

TStringUnicode TStringUCS4

static string JsonDecode(const CTempString str, size_t *n_read=NULL)

Decode a string encoded by JsonEncode.

bool AStrEquiv(const Arg1 &x, const Arg2 &y, Pred pr)

Check equivalence of arguments using predicate.

static SIZE_TYPE EvaluateSymbolLength(const CTempString &src)

Check buffer for presence of UTF-8 byte sequence and return length of first symbol.

static string & Replace(const string &src, const string &search, const string &replace, string &dst, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)

Replace occurrences of a substring within a string.

static char SymbolToChar(TUnicodeSymbol sym, EEncoding encoding)

Convert Unicode code point into encoded character.

static CStringUTF8 & x_AppendChar(CStringUTF8 &u8str, TUnicodeSymbol ch)

static long StringToLong(const CTempString str, TStringToNumFlags flags=0, int base=10)

Convert string to long.

static CStringUTF8 AsUTF8(const CTempString &src, EEncoding encoding, EValidate validate=eNoValidate)

Convert into UTF8 from a C/C++ string.

basic_string< TCharUCS2 > TStringUCS2

Type for string in UCS-2 encoding.

static string Unescape(const CTempString str, char escape_char='\\')

Unescape string (generic version).

static list< string > & WrapList(const list< string > &l, SIZE_TYPE width, const string &delim, list< string > &arr, TWrapFlags flags=0, const string *prefix=0, const string *prefix1=0)

Wrap the list using the specified criteria.

static CStringUTF8 & TruncateSpacesInPlace(CStringUTF8 &str, NStr::ETrunc side=NStr::eTrunc_Both)

Truncate whitespace in the string (in-place)

bool Advance(CTempStringList *part_collector)

Return TRUE if it found some text and put it into collector.

static string CParse(const CTempString str, EQuoted quoted=eQuoted)

Discard C-style backslash escapes.

static string XmlEncode(const CTempString str, TXmlEncode flags=eXmlEnc_Contents)

Encode a string for XML.

static string Unquote(const CTempString str, char escape_char='\\')

Unquote string (generic version).

static SIZE_TYPE x_GetValidSymbolCount(const CTempString &src, CTempString::const_iterator &err)

static string UIntToString(unsigned int value, TNumToStringFlags flags=0, int base=10)

Convert UInt to string.

static string JavaScriptEncode(const CTempString str)

Encode a string for JavaScript.

static void WrapIt(const string &str, SIZE_TYPE width, _D &dest, TWrapFlags flags=0, const string *prefix=0, const string *prefix1=0)

Wrap the specified string into lines of a specified width.

static TUnicodeSymbol DecodeNext(TUnicodeSymbol chU, char ch)

Convert next character of UTF8 sequence into Unicode.

void MergeDelims(void)

Assumes that we already have a delimiter on the previous position, so just skip all subsequent,...

static void TrimSuffixInPlace(string &str, const CTempString suffix, ECase use_case=eCase)

Trim suffix from a string (in-place)

static Uint8 StringToUInt8(const CTempString str, TStringToNumFlags flags=0, int base=10)

Convert string to Uint8.

static bool SplitInTwo(const CTempString str, const CTempString delim, string &str1, string &str2, TSplitFlags flags=0)

Split a string into two pieces using the specified delimiters.

size_type length(void) const

Return the length of the represented array.

static bool x_ReportLimitsError(const CTempString str, TStringToNumFlags flags)

static string ULongToString(unsigned long value, TNumToStringFlags flags=0, int base=10)

Convert unsigned long to string.

static unsigned int StringToUInt(const CTempString str, TStringToNumFlags flags=0, int base=10)

Convert string to unsigned int.

int TSS_Flags

Bitwise OR of ESS_Flags.

static TUnicodeSymbol CharToSymbol(char ch, EEncoding encoding)

Convert encoded character into Unicode.

static string Base64Decode(const CTempString str)

Base64-decode string.

static list< string > & Justify(const CTempString str, SIZE_TYPE width, list< string > &par, const CTempString *pfx=0, const CTempString *pfx1=0)

Justify the specified string into a series of lines of the same width.

CTempString_Storage * m_Storage

static const void * StringToPtr(const CTempStringEx str, TStringToNumFlags flags=0)

Convert string to pointer.

void Join(string *s) const

static string Sanitize(CTempString str, TSS_Flags flags=fSS_print)

Sanitize a string, allowing only specified classes of characters.

CTempString substr(size_type pos) const

Obtain a substring from this string, beginning at a given offset.

void Add(const CTempString &s)

static bool NeedsURLEncoding(const CTempString str, EUrlEncode flag=eUrlEnc_SkipMarkChars)

Check if the string needs the requested URL-encoding.

static string JsonEncode(const CTempString str, EJsonEncode encoding=eJsonEnc_UTF8)

Encode a string for JSON.

static bool IsIPAddress(const CTempStringEx str)

Check if the string contains a valid IP address.

static TUnicodeSymbol Decode(const char *&src)

Convert sequence of UTF8 code units into Unicode code point.

size_type find_first_not_of(const CTempString match, size_type pos=0) const

Find the first occurrence of any character not in the matching string within the current string,...

static void TrimPrefixInPlace(string &str, const CTempString prefix, ECase use_case=eCase)

Trim prefix from a string (in-place)

ECase

Which type of string comparison.

TErrCode GetErrCode(void) const

Get error code.

void SetString(const CTempString s, NStr::EUrlEncode flag=NStr::eUrlEnc_SkipMarkChars)

Set new original string.

int TWrapFlags

Bitwise OR of "EWrapFlags".

int TStringToNumFlags

Bitwise OR of "EStringToNumFlags".

CTempString_Storage(void)

static bool IsUpper(const CTempString str)

Checks if all letters in the given string have a upper case.

size_type find_first_of(const CTempString match, size_type pos=0) const

Find the first occurrence of any character in the matching string within the current string,...

static SIZE_TYPE GetValidBytesCount(const CTempString &src)

Get the number of valid UTF-8 bytes (code units) in buffer.

static string FormatVarargs(const char *format, va_list args)

Handle an arbitrary printf-style format string.

static void Wrap(const string &str, SIZE_TYPE width, IWrapDest &dest, TWrapFlags flags, const string *prefix, const string *prefix1)

static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)

Convert numeric value to string.

size_type find(const CTempString match, size_type pos=0) const

Find the first instance of the entire matching string within the current string, beginning at an opti...

static bool Equal(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2, ECase use_case=eCase)

Test for equality of a substring with another string.

static void URLDecodeInPlace(string &str, EUrlDecode flag=eUrlDec_All)

URL-decode string to itself.

static string CEncode(const CTempString str, EQuoted quoted=eQuoted)

Encode a string for C/C++.

static string & ReplaceInPlace(string &src, const string &search, const string &replace, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)

Replace occurrences of a substring within a string.

static string & ToUpper(string &str)

Convert string to upper case – string& version.

void SkipDelims(void)

Skip all delimiters starting from current position.

static string URLEncode(const CTempString str, EUrlEncode flag=eUrlEnc_SkipMarkChars)

URL-encode string.

static enable_if< is_integral< TChar >::value &&(1< sizeof(TChar)), CStringUTF8 & >::type AppendAsUTF8(CStringUTF8 &dest, const basic_string< TChar > &src)

Convert Unicode C++ string into UTF8 and append it to existing string.

static string ShellEncode(const string &str)

Quotes a string in Bourne Again Shell (BASH) syntax, in a way that disallows non-printable characters...

CTempStringEx & assign(const char *str, size_type len)

Assign new values to the content of the a string.

static string TruncateSpaces(const string &str, ETrunc where=eTrunc_Both)

Truncate whitespace in a string.

CTempString_Storage m_DelimStorage

const char *const kEmptyCStr

Empty "C" string (points to a '\0').

CStringEncoder_Url(NStr::EUrlEncode flag=NStr::eUrlEnc_SkipMarkChars)

size_type size(void) const

Return the length of the represented array.

static SIZE_TYPE DoubleToString_Ecvt(double value, unsigned int precision, char *buf, SIZE_TYPE buf_size, int *dec, int *sign)

Convert double to string with specified precision.

static string & ToLower(string &str)

Convert string to lower case – string& version.

static int CompareCase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)

Case-sensitive compare of a substring with another string.

static string UInt8ToString(Uint8 value, TNumToStringFlags flags=0, int base=10)

Convert UInt8 to string.

const_iterator begin() const

Return an iterator to the string's starting position.

static string ParseQuoted(const CTempString str, size_t *n_read=NULL)

Discard C-style backslash escapes and extract a quoted string.

@ eJsonEnc_UTF8

Encode all characters above 0x80 to \uXXXX form.

@ eJsonEnc_Quoted

Quote resulting string.

@ eEncoding_ISO8859_1

Note: From the point of view of the C++.

@ fNonAscii_Passthru

Allow non-ASCII but printable characters.

@ fPrintable_Full

Show all octal digits at all times.

@ fNonAscii_Quote

Octal for all non-ASCII characters.

@ fNewLine_Passthru

Break the line at every "\n" occurrence.

@ fNewLine_Quote

Display "\n" instead of actual linebreak.

@ fDedent_NormalizeEmptyLines

Each line containing only whitespace will be normalized to a single newline character in the output.

@ fDedent_SkipEmptyFirstLine

Ignore first line and skip it from the result, if it is empty only.

@ fDedent_SkipFirstLine

Ignore first line and skip it from the result.

@ fSS_NoMerge

Do not merge adjacent spaces (rejected chars)

@ fSS_print

Check on isprint()

@ fSS_NoTruncate_Begin

Do not truncate leading spaces.

@ fSS_NoTruncate_End

Do not truncate trailing spaces.

@ fSS_cntrl

Check on iscntrl()

@ fSS_Reject

Reject specified characters, allow all other.

@ fSS_punct

Check on ispunct()

@ fSS_alpha

Check on isalpha()

@ fSS_digit

Check on isdigit()

@ fSS_alnum

Check on isalnum()

@ fSS_Remove

Remove (rather than replace) rejected chars.

@ fDecimalPosixFinite

StringToDouble*(): Keep result finite and normalized: if DBL_MAX < result < INF, result becomes DBL_M...

@ fAllowTrailingSpaces

Ignore trailing whitespace characters.

@ fDS_ProhibitFractions

StringToUInt8_DataSize(): Ignore any fraction part of a value, "1.2K" ~ "1K".

@ fConvErr_NoErrMessage

Set errno, but do not set CNcbiError message on error.

@ fConvErr_NoThrow

Do not throw an exception on error.

@ fAllowLeadingSymbols

Ignore leading non-numeric characters.

@ fDS_ForceBinary

StringToUInt8_DataSize(): Use 1024 as a kilobyte factor regardless of suffix, like "KB" or "KiB".

@ fAllowCommas

Allow commas. See 'ENumToStringFlags::fWithCommas'.

@ fAllowTrailingSymbols

Ignore trailing non-numerics characters.

@ fDS_ProhibitSpaceBeforeSuffix

StringToUInt8_DataSize(): Do not allow spaces between value and suffix, like "10 K".

@ fMandatorySign

Check on mandatory sign. See 'ENumToStringFlags::fWithSign'.

@ fAllowLeadingSpaces

Ignore leading whitespace characters in converted string.

@ fDecimalPosix

StringToDouble*(): For decimal point, use C locale.

@ fDecimalPosixOrLocal

StringToDouble*(): For decimal point, try both C and current locale.

@ eSqlEnc_TagNonASCII

Produce N'...' when input's not pure ASCII.

@ fSplit_CanEscape

Allow \... escaping.

@ fSplit_MergeDelimiters

Merge adjacent delimiters.

@ fSplit_CanDoubleQuote

Allow "..." quoting.

@ fSplit_Truncate_Begin

Truncate leading delimiters.

@ fSplit_ByPattern

Require full delimiter strings.

@ fSplit_CanSingleQuote

Allow '...' quoting.

@ fWrap_Hyphenate

Add a hyphen when breaking words?

@ fWrap_HTMLPre

Wrap as pre-formatted HTML?

@ fWrap_FlatFile

Wrap for flat file use.

@ eUrlEnc_ProcessMarkChars

Convert all non-alphanumeric chars, spaces are converted to '+'.

@ eUrlEnc_None

Do not encode.

@ eUrlEnc_URIQueryValue

Encode query part of an URI, arg value.

@ eUrlEnc_PercentOnly

Convert all non-alphanumeric chars including space and '' to %## format.

@ eUrlEnc_URIHost

Encode host part of an URI.

@ eUrlEnc_URIQueryName

Encode query part of an URI, arg name.

@ eUrlEnc_URIPath

Encode path part of an URI.

@ eUrlEnc_Path

Same as ProcessMarkChars but preserves valid path characters ('/', '.')

@ eUrlEnc_URIScheme

Encode scheme part of an URI.

@ eUrlEnc_URIUserinfo

Encode userinfo part of an URI.

@ eUrlEnc_SkipMarkChars

Do not convert chars like '!', '(' etc.

@ eUrlEnc_Cookie

Same as SkipMarkChars with encoded ','.

@ eUrlEnc_URIFragment

Encode fragment part of an URI.

@ eFirst

First occurrence.

@ eUrlDec_All

Decode '+' to space.

@ eReverseSearch

Search in a backward direction.

@ eForwardSearch

Search in a forward direction.

@ eXmlEnc_CommentSafe

Encode double hyphen and ending hyphen, making the result safe to put into XML comments.

@ eXmlEnc_Unsafe_Skip

Check each character to conform XML 1.1 standards, skip any not allowed character or throw an CString...

@ fDoubleScientific

DoubleToString*(): Use scientific format for double conversions.

@ fDoublePosix

DoubleToString*(): Use C locale for double conversions.

@ fWithRadix

Prefix the output value with radix for "well-known" bases like 8 ("0") and 16 ("0x")

@ fDoubleFixed

DoubleToString*(): Use n.nnnn format for double conversions.

@ fDS_PutBSuffixToo

UInt8ToString_DataSize(): Use "B" suffix for small bytes values.

@ fWithCommas

Use commas as thousands separator.

@ fUseLowercase

Use lowercase letters for string representation for bases above 10.

@ fDS_ShortSuffix

UInt8ToString_DataSize(): Use short suffix, like "10.0K".

@ fWithSign

Prefix the output value with a sign ('+'/'-')

@ fDS_PutSpaceBeforeSuffix

UInt8ToString_DataSize(): Add space between value and qualifiers, like "10.0 KB".

@ fDS_Binary

UInt8ToString_DataSize(): Use 1024 as a kilobyte factor, not 1000.

@ fDS_NoDecimalPoint

UInt8ToString_DataSize(): Do not add a decimal point ("10KB" vs "10.0KB")

@ eConvert

Failure to convert string.

@ eFormat

Wrong format for any input to string methods.

@ eBadArgs

Bad arguments to string methods.

@ eTrunc_Both

Truncate whitespace at both begin and end of string.

@ eTrunc_End

Truncate trailing whitespace only.

@ eTrunc_Begin

Truncate leading whitespace only.

@ eQuoted

String is quoted.

@ eNotQuoted

String is not quoted.

@ fHtmlEnc_CheckPreencoded

Print warning if some pre-encoded entity found in the string.

@ fHtmlEnc_SkipLiteralEntities

Skip "&entity;".

@ fHtmlEnc_SkipNumericEntities

Skip "&#NNNN;".

@ fHtmlDec_Encoding_Changed

Character encoding changed.

@ fHtmlDec_CharRef_Entity

Character entity reference(s) was found.

@ fHtmlDec_CharRef_Numeric

Numeric character reference(s) was found.

@ eNocase

Case insensitive compare.

@ eCase

Case sensitive compare.

@ eEscSeqRange_User

Set char to the user value passed in another parameter.

@ eEscSeqRange_Standard

Set char to the last (least significant byte) of the escape sequence (default).

@ eEscSeqRange_Throw

Throw an exception.

@ eEscSeqRange_Errno

Set errno to ERANGE, return empty string.

@ eEscSeqRange_FirstByte

Set char to the first byte of the escape sequence.

unsigned int

A callback function used to compare two keys in a database.

#define NCBI_DEVELOPMENT_VER

Definition of all error codes used in corelib (xncbi.lib).

The blob sat and sat key Both must be positive integers</td > n< td > Non empty string The interpretation of the blob id depends on a processor Cassandra n processor expects the following format

static void hex(unsigned char c)

const struct ncbi::grid::netcache::search::fields::SIZE size

pair< CTempString, CTempString > s_GetField(const string &data, size_t &pos)

const GenericPointer< typename T::ValueType > T2 value

static unsigned int ud(time_t one, time_t two)

#define NCBI_CONST_UINT8(v)

Defines NCBI C++ Toolkit portable error codes.

Floating-point support routines.

static const char * s_kFString

static bool _isspace(unsigned char c)

static const char * s_kYString

static const char s_EncodeURIScheme[256][4]

#define CHECK_ENDPTR_SIZE(to_type)

#define S2N_CONVERT_GUARD_EX(flags)

static const char * s_kOnString

static double s_StringToDouble(const char *str, size_t size, NStr::TStringToNumFlags flags)

static void s_UnsignedOtherBaseToString(string &out_str, T value, NStr::TNumToStringFlags flags, int base)

static const char * s_kNoString

static const char s_EncodeURIPath[256][4]

static const char s_EncodePath[256][4]

static const char s_EncodeMarkChars[256][4]

#define CHECK_SPLIT_TEMPSTRING_FLAGS(where)

const int kMaxDoublePrecision

#define PRINT_INT8_CHUNK_SIZE

static const char kDigitUpper[]

string x_AsSingleByteString(const CTempString &str, const SCharEncoder &enc, const char *substitute_on_error)

static const char s_EncodePercentOnly[256][4]

const char *const kNcbiDevelopmentVersionString

static bool s_IsWordBoundaryChar(char ch)

static const char * s_kFalseString

static const char kDigitLower[]

static const char s_EncodeURIQueryValue[256][4]

static const char * s_kOffString

TStr s_TruncateSpaces(const TStr &str, NStr::ETrunc where, const TStr &empty_str)

static SIZE_TYPE s_DiffPtr(const char *end, const char *start)

#define S2N_CONVERT_ERROR(to_type, msg, errcode, pos)

static const TUnicodeSymbol s_cp1252_table[]

#define S2N_CONVERT_ERROR_RADIX(to_type, msg)

static const char * s_kYesString

static const char * s_kNString

static bool s_IsDecimalPoint(unsigned char ch, NStr::TStringToNumFlags flags)

#define S2N_CONVERT_GUARD(flags)

Regular guard.

static struct tag_HtmlEntities s_HtmlEntities[]

static bool s_IsIPAddress(const char *str, size_t size)

static void s_SkipAllowedSymbols(const CTempString str, SIZE_TYPE &pos, ESkipMode skip_mode, NStr::TStringToNumFlags flags)

static const char s_EncodeURIFragment[256][4]

static Uint8 s_DataSizeConvertQual(const CTempString str, SIZE_TYPE &pos, Uint8 value, NStr::TStringToNumFlags flags)

static bool s_IsGoodCharForRadix(char ch, int base, int *value=0)

static const char * s_kTrueString

static bool s_CheckRadix(const CTempString str, SIZE_TYPE &pos, int &base)

static const char s_EncodeURIQueryName[256][4]

static EMatchesMaskResult s_MatchesMask(CTempString str, CTempString mask, bool ignore_case)

string s_ParseJsonEncodeEscapes(const CTempString str)

static const char s_EncodeURIUserinfo[256][4]

static SIZE_TYPE s_VisibleHtmlWidth(const string &str)

static SIZE_TYPE s_EndOfReference(const string &str, SIZE_TYPE start)

static void s_SignedBase10ToString(string &out_str, unsigned long value, long svalue, NStr::TNumToStringFlags flags, int base)

static char * s_ncbi_append_int2str(char *buffer, unsigned int value, size_t digits, bool zeros)

TContainer & s_Split(const TString &str, const TString &delim, TContainer &arr, NStr::TSplitFlags flags, vector< SIZE_TYPE > *token_pos, CTempString_Storage *storage=NULL)

static string s_PrintableString(const CTempString str, NStr::TPrintableMode mode, ELanguage lang)

static const char s_EncodeURIHost[256][4]

CTempString s_Unquote(const CTempString str, size_t *n_read)

static const char s_Encode[256][4]

const int kMaxDoubleStringSize

static const char s_EncodeCookie[256][4]

static char * s_PrintBase10Uint8(char *pos, Uint8 value, NStr::TNumToStringFlags flags)

static void s_URLDecode(const CTempString src, string &dst, NStr::EUrlDecode flag)

static const char * s_kTString

static SIZE_TYPE s_EndOfTag(const string &str, SIZE_TYPE start)

#define S2N_CONVERT_ERROR_INVAL(to_type)

#define CHECK_ENDPTR(to_type)

#define S2N_CONVERT_ERROR_OVERFLOW(to_type)

Algorithms for string processing.

Int4 delta(size_t dimension_, const Int4 *score_)

void copy(Njn::Matrix< S > *matrix_, const Njn::Matrix< T > &matrix0_)

static const char * locale

static PCRE2_SIZE bufsize

static const streamsize kBufSize

static const char delimiter[]

static SLJIT_INLINE sljit_ins l(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)

static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)

Do nothing target reservation trait.

Do nothing token counter.

Do-nothing token position container.

virtual char ToChar(TUnicodeSymbol sym) const =0

virtual TUnicodeSymbol ToUnicode(char ch) const =0

virtual TUnicodeSymbol ToUnicode(char ch) const

SEncEncoder(EEncoding encoding)

virtual char ToChar(TUnicodeSymbol sym) const

const ctype< wchar_t > & m_Facet

virtual TUnicodeSymbol ToUnicode(char ch) const

virtual char ToChar(TUnicodeSymbol sym) const

SLocaleEncoder(const locale &lcl)


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4