mirror of
https://github.com/michaelrsweet/pdfio.git
synced 2025-02-20 19:02:50 +01:00
Save work on text tests.
This commit is contained in:
parent
82e62ae852
commit
05df5919cd
@ -741,7 +741,7 @@ pdfioContentTextShow(
|
|||||||
|
|
||||||
// Draw it...
|
// Draw it...
|
||||||
if (newline)
|
if (newline)
|
||||||
return (pdfioStreamPuts(st, "\'\n"));
|
return (pdfioStreamPuts(st, "Tj T*\n"));
|
||||||
else
|
else
|
||||||
return (pdfioStreamPuts(st, "Tj\n"));
|
return (pdfioStreamPuts(st, "Tj\n"));
|
||||||
}
|
}
|
||||||
@ -773,7 +773,7 @@ pdfioContentTextShowf(
|
|||||||
|
|
||||||
// Draw it...
|
// Draw it...
|
||||||
if (newline)
|
if (newline)
|
||||||
return (pdfioStreamPuts(st, "\'\n"));
|
return (pdfioStreamPuts(st, "Tj T*\n"));
|
||||||
else
|
else
|
||||||
return (pdfioStreamPuts(st, "Tj\n"));
|
return (pdfioStreamPuts(st, "Tj\n"));
|
||||||
}
|
}
|
||||||
@ -1403,7 +1403,16 @@ write_string(pdfio_stream_t *st, // I - Stream
|
|||||||
for (ptr = s; *ptr; ptr ++)
|
for (ptr = s; *ptr; ptr ++)
|
||||||
{
|
{
|
||||||
if (*ptr & 0x80)
|
if (*ptr & 0x80)
|
||||||
|
{
|
||||||
|
// UTF-8, allow Unicode up to 255...
|
||||||
|
if ((*ptr & 0xe0) == 0xc0 && (*ptr & 0x3f) <= 3 && (ptr[1] & 0xc0) == 0x80)
|
||||||
|
{
|
||||||
|
ptr ++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*ptr)
|
if (*ptr)
|
||||||
@ -1460,7 +1469,38 @@ write_string(pdfio_stream_t *st, // I - Stream
|
|||||||
|
|
||||||
for (ptr = start; *ptr; ptr ++)
|
for (ptr = start; *ptr; ptr ++)
|
||||||
{
|
{
|
||||||
if (*ptr == '\\' || (*ptr == ')' && level == 0) || *ptr < ' ')
|
if (*ptr == '\n' && newline)
|
||||||
|
{
|
||||||
|
if (ptr > start)
|
||||||
|
{
|
||||||
|
if (!pdfioStreamWrite(st, start, (size_t)(ptr - start)))
|
||||||
|
return (false);
|
||||||
|
|
||||||
|
start = ptr + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*newline = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if ((*ptr & 0xe0) == 0xc0)
|
||||||
|
{
|
||||||
|
// Two-byte UTF-8
|
||||||
|
unsigned char ch = (unsigned char)(((ptr[0] & 0x1f) << 6) | (ptr[1] & 0x3f));
|
||||||
|
// Unicode character
|
||||||
|
|
||||||
|
if (ptr > start)
|
||||||
|
{
|
||||||
|
if (!pdfioStreamWrite(st, start, (size_t)(ptr - start)))
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pdfioStreamWrite(st, &ch, 1))
|
||||||
|
return (false);
|
||||||
|
|
||||||
|
ptr ++;
|
||||||
|
start = ptr + 1;
|
||||||
|
}
|
||||||
|
else if (*ptr == '\\' || (*ptr == ')' && level == 0) || *ptr < ' ')
|
||||||
{
|
{
|
||||||
if (ptr > start)
|
if (ptr > start)
|
||||||
{
|
{
|
||||||
@ -1482,19 +1522,6 @@ write_string(pdfio_stream_t *st, // I - Stream
|
|||||||
level ++;
|
level ++;
|
||||||
else if (*ptr == ')')
|
else if (*ptr == ')')
|
||||||
level --;
|
level --;
|
||||||
else if (*ptr == '\n' && newline)
|
|
||||||
{
|
|
||||||
if (ptr > start)
|
|
||||||
{
|
|
||||||
if (!pdfioStreamWrite(st, start, (size_t)(ptr - start)))
|
|
||||||
return (false);
|
|
||||||
|
|
||||||
start = ptr + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
*newline = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ptr > start)
|
if (ptr > start)
|
||||||
|
@ -392,7 +392,9 @@ pdfioFileCreatePage(pdfio_file_t *pdf, // I - PDF file
|
|||||||
|
|
||||||
// Create a contents object to hold the contents of the page...
|
// Create a contents object to hold the contents of the page...
|
||||||
contents_dict = pdfioDictCreate(pdf);
|
contents_dict = pdfioDictCreate(pdf);
|
||||||
|
#ifndef DEBUG
|
||||||
pdfioDictSetName(contents_dict, "Filter", "FlateDecode");
|
pdfioDictSetName(contents_dict, "Filter", "FlateDecode");
|
||||||
|
#endif // !DEBUG
|
||||||
|
|
||||||
contents = pdfioFileCreateObject(pdf, contents_dict);
|
contents = pdfioFileCreateObject(pdf, contents_dict);
|
||||||
|
|
||||||
@ -405,7 +407,11 @@ pdfioFileCreatePage(pdfio_file_t *pdf, // I - PDF file
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
// Create the contents stream...
|
// Create the contents stream...
|
||||||
|
#ifdef DEBUG
|
||||||
|
return (pdfioObjCreateStream(contents, PDFIO_FILTER_NONE));
|
||||||
|
#else
|
||||||
return (pdfioObjCreateStream(contents, PDFIO_FILTER_FLATE));
|
return (pdfioObjCreateStream(contents, PDFIO_FILTER_FLATE));
|
||||||
|
#endif // DEBUG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
199
testpdfio.c
199
testpdfio.c
@ -28,6 +28,7 @@ static ssize_t token_peek_cb(const char **s, char *buffer, size_t bytes);
|
|||||||
static int write_color_patch(pdfio_stream_t *st, bool device);
|
static int write_color_patch(pdfio_stream_t *st, bool device);
|
||||||
static int write_color_test(pdfio_file_t *pdf, int number, pdfio_obj_t *font);
|
static int write_color_test(pdfio_file_t *pdf, int number, pdfio_obj_t *font);
|
||||||
static int write_page(pdfio_file_t *pdf, int number, pdfio_obj_t *font, pdfio_obj_t *image);
|
static int write_page(pdfio_file_t *pdf, int number, pdfio_obj_t *font, pdfio_obj_t *image);
|
||||||
|
static int write_text(pdfio_file_t *pdf, int first_page, pdfio_obj_t *font, const char *filename);
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -263,6 +264,10 @@ do_unit_tests(void)
|
|||||||
if (write_color_test(outpdf, 5, helvetica))
|
if (write_color_test(outpdf, 5, helvetica))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
|
// Print this text file...
|
||||||
|
if (write_text(outpdf, 6, helvetica, "README.md"))
|
||||||
|
return (1);
|
||||||
|
|
||||||
// Close the test PDF file...
|
// Close the test PDF file...
|
||||||
fputs("pdfioFileClose(\"testfiles/testpdfio.pdf\": ", stdout);
|
fputs("pdfioFileClose(\"testfiles/testpdfio.pdf\": ", stdout);
|
||||||
if (pdfioFileClose(pdf))
|
if (pdfioFileClose(pdf))
|
||||||
@ -389,9 +394,7 @@ write_color_patch(pdfio_stream_t *st, // I - Content stream
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((sat = fabs(x)) < fabs(y))
|
sat = pow(r, 1.5);
|
||||||
sat = fabs(y);
|
|
||||||
sat = pow(sat, 1.5);
|
|
||||||
|
|
||||||
x /= r;
|
x /= r;
|
||||||
y /= r;
|
y /= r;
|
||||||
@ -541,8 +544,8 @@ write_color_test(pdfio_file_t *pdf, // I - PDF file
|
|||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
fputs("pdfioContentSetStrokeColorDeviceGray(0.0): ", stdout);
|
fputs("pdfioContentSetFillColorDeviceGray(0.0): ", stdout);
|
||||||
if (pdfioContentSetStrokeColorDeviceGray(st, 0.0))
|
if (pdfioContentSetFillColorDeviceGray(st, 0.0))
|
||||||
puts("PASS");
|
puts("PASS");
|
||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
@ -765,7 +768,6 @@ write_page(pdfio_file_t *pdf, // I - PDF file
|
|||||||
pdfio_obj_t *font, // I - Text font
|
pdfio_obj_t *font, // I - Text font
|
||||||
pdfio_obj_t *image) // I - Image to draw
|
pdfio_obj_t *image) // I - Image to draw
|
||||||
{
|
{
|
||||||
// TODO: Add font object support...
|
|
||||||
pdfio_dict_t *dict; // Page dictionary
|
pdfio_dict_t *dict; // Page dictionary
|
||||||
pdfio_stream_t *st; // Page contents stream
|
pdfio_stream_t *st; // Page contents stream
|
||||||
double width, // Width of image
|
double width, // Width of image
|
||||||
@ -776,8 +778,6 @@ write_page(pdfio_file_t *pdf, // I - PDF file
|
|||||||
ty; // Y offset
|
ty; // Y offset
|
||||||
|
|
||||||
|
|
||||||
(void)font;
|
|
||||||
|
|
||||||
fputs("pdfioDictCreate: ", stdout);
|
fputs("pdfioDictCreate: ", stdout);
|
||||||
if ((dict = pdfioDictCreate(pdf)) != NULL)
|
if ((dict = pdfioDictCreate(pdf)) != NULL)
|
||||||
puts("PASS");
|
puts("PASS");
|
||||||
@ -811,8 +811,8 @@ write_page(pdfio_file_t *pdf, // I - PDF file
|
|||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
fputs("pdfioContentSetStrokeColorDeviceGray(0.0): ", stdout);
|
fputs("pdfioContentSetFillColorDeviceGray(0.0): ", stdout);
|
||||||
if (pdfioContentSetStrokeColorDeviceGray(st, 0.0))
|
if (pdfioContentSetFillColorDeviceGray(st, 0.0))
|
||||||
puts("PASS");
|
puts("PASS");
|
||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
@ -896,3 +896,182 @@ write_page(pdfio_file_t *pdf, // I - PDF file
|
|||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// 'write_text()' - Print a plain text file.
|
||||||
|
//
|
||||||
|
|
||||||
|
static int // O - 0 on success, 1 on failure
|
||||||
|
write_text(pdfio_file_t *pdf, // I - PDF file
|
||||||
|
int first_page, // I - First page number
|
||||||
|
pdfio_obj_t *font, // I - Page number font
|
||||||
|
const char *filename) // I - File to print
|
||||||
|
{
|
||||||
|
pdfio_obj_t *courier; // Courier font
|
||||||
|
pdfio_dict_t *dict; // Page dictionary
|
||||||
|
FILE *fp; // Print file
|
||||||
|
char line[1024]; // Line from file
|
||||||
|
int page, // Current page number
|
||||||
|
plinenum, // Current line number on page
|
||||||
|
flinenum; // Current line number in file
|
||||||
|
pdfio_stream_t *st = NULL; // Page contents stream
|
||||||
|
|
||||||
|
|
||||||
|
// Create text font...
|
||||||
|
fputs("pdfioFileCreateBaseFontObject(\"Courier\"): ", stdout);
|
||||||
|
if ((courier = pdfioFileCreateBaseFontObject(pdf, "Courier")) != NULL)
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
// Create the page dictionary...
|
||||||
|
fputs("pdfioDictCreate: ", stdout);
|
||||||
|
if ((dict = pdfioDictCreate(pdf)) != NULL)
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioPageDictAddFont(F1): ", stdout);
|
||||||
|
if (pdfioPageDictAddFont(dict, "F1", font))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioPageDictAddFont(F2): ", stdout);
|
||||||
|
if (pdfioPageDictAddFont(dict, "F2", courier))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
// Open the print file...
|
||||||
|
if ((fp = fopen(filename, "r")) == NULL)
|
||||||
|
{
|
||||||
|
printf("Unable to open \"%s\": %s\n", filename, strerror(errno));
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
page = first_page;
|
||||||
|
plinenum = 0;
|
||||||
|
flinenum = 0;
|
||||||
|
|
||||||
|
while (fgets(line, sizeof(line), fp))
|
||||||
|
{
|
||||||
|
flinenum ++;
|
||||||
|
|
||||||
|
if (plinenum == 0)
|
||||||
|
{
|
||||||
|
printf("pdfioFileCreatePage(%d): ", page);
|
||||||
|
|
||||||
|
if ((st = pdfioFileCreatePage(pdf, dict)) != NULL)
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
// Show the page number
|
||||||
|
fputs("pdfioContentSetFillColorDeviceGray(0.0): ", stdout);
|
||||||
|
if (pdfioContentSetFillColorDeviceGray(st, 0.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextBegin(): ", stdout);
|
||||||
|
if (pdfioContentTextBegin(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentSetTextFont(\"F1\", 12.0): ", stdout);
|
||||||
|
if (pdfioContentSetTextFont(st, "F1", 12.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextMoveTo(550.0, 36.0): ", stdout);
|
||||||
|
if (pdfioContentTextMoveTo(st, 550.0, 36.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
printf("pdfioContentTextShowf(\"%d\"): ", page);
|
||||||
|
if (pdfioContentTextShowf(st, "%d", page))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextEnd(): ", stdout);
|
||||||
|
if (pdfioContentTextEnd(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
page ++;
|
||||||
|
plinenum ++;
|
||||||
|
|
||||||
|
fputs("pdfioContentTextBegin(): ", stdout);
|
||||||
|
if (pdfioContentTextBegin(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentSetTextFont(\"F2\", 10.0): ", stdout);
|
||||||
|
if (pdfioContentSetTextFont(st, "F2", 10.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentSetTextLeading(12.0): ", stdout);
|
||||||
|
if (pdfioContentSetTextLeading(st, 12.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextMoveTo(36.0, 746.0): ", stdout);
|
||||||
|
if (pdfioContentTextMoveTo(st, 36.0, 746.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
pdfioContentSetFillColorDeviceGray(st, 0.75);
|
||||||
|
pdfioContentTextShowf(st, "%4d ", flinenum);
|
||||||
|
pdfioContentSetFillColorDeviceGray(st, 0.0);
|
||||||
|
pdfioContentTextShow(st, line);
|
||||||
|
|
||||||
|
plinenum ++;
|
||||||
|
if (plinenum >= 60)
|
||||||
|
{
|
||||||
|
fputs("pdfioContentTextEnd(): ", stdout);
|
||||||
|
if (pdfioContentTextEnd(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioStreamClose: ", stdout);
|
||||||
|
if (pdfioStreamClose(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
st = NULL;
|
||||||
|
plinenum = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (plinenum > 0)
|
||||||
|
{
|
||||||
|
fputs("pdfioContentTextEnd(): ", stdout);
|
||||||
|
if (pdfioContentTextEnd(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioStreamClose: ", stdout);
|
||||||
|
if (pdfioStreamClose(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user