
Go to the source code of this file.
Data Structures | |
| struct | lineptr |
Functions | |
| unsigned char * | mbvalidate (unsigned char *pwcs, int encoding) |
| int | pg_wcswidth (const char *pwcs, size_t len, int encoding) |
| void | pg_wcsformat (const unsigned char *pwcs, size_t len, int encoding, struct lineptr *lines, int count) |
| void | pg_wcssize (const unsigned char *pwcs, size_t len, int encoding, int *width, int *height, int *format_size) |
| unsigned char* mbvalidate | ( | unsigned char * | pwcs, | |
| int | encoding | |||
| ) |
Definition at line 385 of file mbprint.c.
References mb_utf_validate(), and PG_UTF8.
Referenced by printTableAddCell(), and printTableAddHeader().
{
if (encoding == PG_UTF8)
mb_utf_validate(pwcs);
else
{
/*
* other encodings needing validation should add their own routines
* here
*/
}
return pwcs;
}
| void pg_wcsformat | ( | const unsigned char * | pwcs, | |
| size_t | len, | |||
| int | encoding, | |||
| struct lineptr * | lines, | |||
| int | count | |||
| ) |
Definition at line 293 of file mbprint.c.
References i, NULL, PG_UTF8, PQdsplen(), PQmblen(), lineptr::ptr, utf8_to_unicode(), and lineptr::width.
Referenced by print_aligned_text(), and print_aligned_vertical().
{
int w,
chlen = 0;
int linewidth = 0;
unsigned char *ptr = lines->ptr; /* Pointer to data area */
for (; *pwcs && len > 0; pwcs += chlen)
{
chlen = PQmblen((const char *) pwcs, encoding);
if (len < (size_t) chlen)
break;
w = PQdsplen((const char *) pwcs, encoding);
if (chlen == 1) /* single-byte char */
{
if (*pwcs == '\n') /* Newline */
{
*ptr++ = '\0';
lines->width = linewidth;
linewidth = 0;
lines++;
count--;
if (count <= 0)
exit(1); /* Screwup */
/* make next line point to remaining memory */
lines->ptr = ptr;
}
else if (*pwcs == '\r') /* Linefeed */
{
strcpy((char *) ptr, "\\r");
linewidth += 2;
ptr += 2;
}
else if (*pwcs == '\t') /* Tab */
{
do
{
*ptr++ = ' ';
linewidth++;
} while (linewidth % 8 != 0);
}
else if (w < 0) /* Other control char */
{
sprintf((char *) ptr, "\\x%02X", *pwcs);
linewidth += 4;
ptr += 4;
}
else /* Output it as-is */
{
linewidth += w;
*ptr++ = *pwcs;
}
}
else if (w < 0) /* Non-ascii control char */
{
if (encoding == PG_UTF8)
sprintf((char *) ptr, "\\u%04X", utf8_to_unicode(pwcs));
else
{
/*
* This case cannot happen in the current code because only
* UTF-8 signals multibyte control characters. But we may need
* to support it at some stage
*/
sprintf((char *) ptr, "\\u????");
}
ptr += 6;
linewidth += 6;
}
else /* All other chars */
{
int i;
for (i = 0; i < chlen; i++)
*ptr++ = pwcs[i];
linewidth += w;
}
len -= chlen;
}
lines->width = linewidth;
*ptr++ = '\0'; /* Terminate formatted string */
if (count <= 0)
exit(1); /* Screwup */
(lines + 1)->ptr = NULL; /* terminate line array */
}
| void pg_wcssize | ( | const unsigned char * | pwcs, | |
| size_t | len, | |||
| int | encoding, | |||
| int * | width, | |||
| int * | height, | |||
| int * | format_size | |||
| ) |
Definition at line 210 of file mbprint.c.
References PQdsplen(), and PQmblen().
Referenced by print_aligned_text(), and print_aligned_vertical().
{
int w,
chlen = 0,
linewidth = 0;
int width = 0;
int height = 1;
int format_size = 0;
for (; *pwcs && len > 0; pwcs += chlen)
{
chlen = PQmblen((const char *) pwcs, encoding);
if (len < (size_t) chlen)
break;
w = PQdsplen((const char *) pwcs, encoding);
if (chlen == 1) /* single-byte char */
{
if (*pwcs == '\n') /* Newline */
{
if (linewidth > width)
width = linewidth;
linewidth = 0;
height += 1;
format_size += 1; /* For NUL char */
}
else if (*pwcs == '\r') /* Linefeed */
{
linewidth += 2;
format_size += 2;
}
else if (*pwcs == '\t') /* Tab */
{
do
{
linewidth++;
format_size++;
} while (linewidth % 8 != 0);
}
else if (w < 0) /* Other control char */
{
linewidth += 4;
format_size += 4;
}
else /* Output it as-is */
{
linewidth += w;
format_size += 1;
}
}
else if (w < 0) /* Non-ascii control char */
{
linewidth += 6; /* \u0000 */
format_size += 6;
}
else /* All other chars */
{
linewidth += w;
format_size += chlen;
}
len -= chlen;
}
if (linewidth > width)
width = linewidth;
format_size += 1; /* For NUL char */
/* Set results */
if (result_width)
*result_width = width;
if (result_height)
*result_height = height;
if (result_format_size)
*result_format_size = format_size;
}
| int pg_wcswidth | ( | const char * | pwcs, | |
| size_t | len, | |||
| int | encoding | |||
| ) |
Definition at line 176 of file mbprint.c.
References PQdsplen(), and PQmblen().
Referenced by describeOneTableDetails().
1.7.1