projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge remote-tracking branch 'origin/sheet'
[pspp]
/
src
/
libpspp
/
str.c
diff --git
a/src/libpspp/str.c
b/src/libpspp/str.c
index cde0db9ae091a6493f8f8cb2238f9fec0c308b0e..5aa7e41594e9ab989ac7a77dcafe6d8802e49fa8 100644
(file)
--- a/
src/libpspp/str.c
+++ b/
src/libpspp/str.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011, 2012
, 2014
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-189,7
+189,7
@@
buf_copy_rpad (char *dst, size_t dst_size,
void
str_copy_rpad (char *dst, size_t dst_size, const char *src)
{
void
str_copy_rpad (char *dst, size_t dst_size, const char *src)
{
- if (dst_size > 0)
+ if (dst_size > 0)
{
size_t src_len = strlen (src);
if (src_len < dst_size - 1)
{
size_t src_len = strlen (src);
if (src_len < dst_size - 1)
@@
-257,9
+257,10
@@
str_lowercase (char *s)
}
/* Converts NUMBER into a string in 26-adic notation in BUFFER,
}
/* Converts NUMBER into a string in 26-adic notation in BUFFER,
- which has room for SIZE bytes. Returns true if successful,
- false if NUMBER, plus a trailing null, is too large to fit in
- the available space.
+ which has room for SIZE bytes. Uses uppercase if UPPERCASE is
+ true, otherwise lowercase, Returns true if successful, false
+ if NUMBER, plus a trailing null, is too large to fit in the
+ available space.
26-adic notation is "spreadsheet column numbering": 1 = A, 2 =
B, 3 = C, ... 26 = Z, 27 = AA, 28 = AB, 29 = AC, ...
26-adic notation is "spreadsheet column numbering": 1 = A, 2 =
B, 3 = C, ... 26 = Z, 27 = AA, 28 = AB, 29 = AC, ...
@@
-271,15
+272,18
@@
str_lowercase (char *s)
For more information, see
http://en.wikipedia.org/wiki/Bijective_numeration. */
bool
For more information, see
http://en.wikipedia.org/wiki/Bijective_numeration. */
bool
-str_format_26adic (unsigned long int number, char buffer[], size_t size)
+str_format_26adic (unsigned long int number, bool uppercase,
+ char buffer[], size_t size)
{
{
+ const char *alphabet
+ = uppercase ? "ABCDEFGHIJKLMNOPQRSTUVWXYZ" : "abcdefghijklmnopqrstuvwxyz";
size_t length = 0;
while (number-- > 0)
{
if (length >= size)
goto overflow;
size_t length = 0;
while (number-- > 0)
{
if (length >= size)
goto overflow;
- buffer[length++] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
[number % 26];
+ buffer[length++] =
alphabet
[number % 26];
number /= 26;
}
number /= 26;
}
@@
-1519,7
+1523,7
@@
ds_put_c_format (struct string *st, const char *format, ...)
}
}
-/* Formats FORMAT as a printf string, using fmt_func (a snprintf like function)
+/* Formats FORMAT as a printf string, using fmt_func (a snprintf like function)
and appends the result to ST. */
static void
ds_put_vformat_int (struct string *st, const char *format, va_list args_,
and appends the result to ST. */
static void
ds_put_vformat_int (struct string *st, const char *format, va_list args_,
@@
-1571,7
+1575,7
@@
ds_put_vformat (struct string *st, const char *format, va_list args_)
ds_put_vformat_int (st, format, args_, vsnprintf);
}
ds_put_vformat_int (st, format, args_, vsnprintf);
}
-/* Formats FORMAT as a printf string, as if in the C locale,
+/* Formats FORMAT as a printf string, as if in the C locale,
and appends the result to ST. */
void
ds_put_c_vformat (struct string *st, const char *format, va_list args_)
and appends the result to ST. */
void
ds_put_c_vformat (struct string *st, const char *format, va_list args_)
@@
-1593,6
+1597,13
@@
ds_put_byte_multiple (struct string *st, int ch, size_t cnt)
memset (ds_put_uninit (st, cnt), ch, cnt);
}
memset (ds_put_uninit (st, cnt), ch, cnt);
}
+/* Appends Unicode code point UC to ST in UTF-8 encoding. */
+void
+ds_put_unichar (struct string *st, ucs4_t uc)
+{
+ ds_extend (st, ds_length (st) + 6);
+ st->ss.length += u8_uctomb (CHAR_CAST (uint8_t *, ds_end (st)), uc, 6);
+}
/* If relocation has been enabled, replace ST,
with its relocated version */
/* If relocation has been enabled, replace ST,
with its relocated version */