summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'devices/vector/gdevtxtw.c')
-rw-r--r--devices/vector/gdevtxtw.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/devices/vector/gdevtxtw.c b/devices/vector/gdevtxtw.c
index 5c885f5f..71be58b6 100644
--- a/devices/vector/gdevtxtw.c
+++ b/devices/vector/gdevtxtw.c
@@ -1167,7 +1167,7 @@ txtwrite_put_params(gx_device * dev, gs_param_list * plist)
if (code < 0)
return code;
- if (ofs.data != 0) { /* Close the file if it's open. */
+ if (ofs.data != 0 && (ofs.size != strlen(tdev->fname) || strncmp((const char *)ofs.data, tdev->fname, ofs.size)) != 0) { /* Close the file if it's open. */
if (tdev->file != 0) {
gp_fclose(tdev->file);
tdev->file = 0;
@@ -1185,10 +1185,10 @@ txtwrite_put_params(gx_device * dev, gs_param_list * plist)
dev->is_open = false;
code = gx_default_put_params(dev, plist);
+ dev->is_open = open;
if (code < 0)
return code;
- dev->is_open = open;
dev->interpolate_control = 0;
@@ -1875,10 +1875,14 @@ textw_text_process(gs_text_enum_t *pte)
if (!penum->SpanDeltaX)
return gs_note_error(gs_error_VMerror);
}
+retry:
{
switch (font->FontType) {
case ft_CID_encrypted:
case ft_CID_TrueType:
+ errprintf(pte->memory, "\n\n*** The txtwrite device does not currently support the use of CID-Keyed fonts. ***\n\n");
+ return_error(gs_error_typecheck);
+ break;
case ft_composite:
code = txtwrite_process_cmap_text(pte);
break;
@@ -1886,13 +1890,14 @@ textw_text_process(gs_text_enum_t *pte)
case ft_encrypted2:
case ft_TrueType:
case ft_user_defined:
+ case ft_PDF_user_defined:
case ft_PCL_user_defined:
case ft_GL2_stick_user_defined:
case ft_GL2_531:
code = txtwrite_process_plain_text(pte);
break;
default:
- return_error(gs_error_rangecheck);
+ return_error(gs_error_rangecheck);
break;
}
if (code == 0) {
@@ -1935,6 +1940,9 @@ textw_text_process(gs_text_enum_t *pte)
penum->pte_fallback = pte_fallback;
gs_text_enum_copy_dynamic(pte_fallback, pte, false);
+ if (font->FontType == ft_PDF_user_defined && pte->text.size != 1)
+ pte_fallback->text.size = pte->index + 1;
+
code = gs_text_process(pte_fallback);
if (code != 0) {
penum->returned.current_char = pte_fallback->returned.current_char;
@@ -1943,6 +1951,8 @@ textw_text_process(gs_text_enum_t *pte)
}
gs_text_release(NULL, pte_fallback, "txtwrite_text_process");
penum->pte_fallback = 0;
+ if (font->FontType == ft_PDF_user_defined)
+ goto retry;
}
}
return code;
@@ -1954,7 +1964,11 @@ textw_text_process(gs_text_enum_t *pte)
static int
textw_text_resync(gs_text_enum_t *pte, const gs_text_enum_t *pfrom)
{
- return gs_text_resync(pte, pfrom);
+ if ((pte->text.operation ^ pfrom->text.operation) & ~TEXT_FROM_ANY)
+ return_error(gs_error_rangecheck);
+ pte->text = pfrom->text;
+ gs_text_enum_copy_dynamic(pte, pfrom, false);
+ return 0;
}
static bool
textw_text_is_width_only(const gs_text_enum_t *pte)