summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfmx/src/pdfdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvipdfmx/src/pdfdev.c')
-rw-r--r--Build/source/texk/dvipdfmx/src/pdfdev.c224
1 files changed, 56 insertions, 168 deletions
diff --git a/Build/source/texk/dvipdfmx/src/pdfdev.c b/Build/source/texk/dvipdfmx/src/pdfdev.c
index 0232f3901b1..21ea4e781a7 100644
--- a/Build/source/texk/dvipdfmx/src/pdfdev.c
+++ b/Build/source/texk/dvipdfmx/src/pdfdev.c
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/dvipdfmx/src/pdfdev.c,v 1.66 2008/06/05 06:27:42 chofchof Exp $
+/* $Header: /home/cvsroot/dvipdfmx/src/pdfdev.c,v 1.70 2008/12/11 16:03:04 matthias Exp $
This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
@@ -142,30 +142,57 @@ p_itoa (long value, char *buf)
static int
p_dtoa (double value, int prec, char *buf)
{
- int n;
- char *p, *q;
-
- n = sprintf(buf, "%.*f", prec, value);
- /* find decimal-point */
- for (p = buf + n - 1; p > buf && *p != '.'; p--);
- if (p > buf) {
- /* chop trailing zeros */
- for (q = buf + n - 1; q > p && *q == '0'; q--) {
- *q = '\0'; n--;
+ const long p[10] = { 1, 10, 100, 1000, 10000,
+ 100000, 1000000, 10000000, 100000000, 1000000000 };
+ long i, f;
+ char *c = buf;
+ int n;
+
+ if (value < 0) {
+ value = -value;
+ *c++ = '-';
+ n = 1;
+ } else
+ n = 0;
+
+ i = (long) value;
+ f = (long) ((value-i)*p[prec] + 0.5);
+
+ if (f == p[prec]) {
+ f = 0;
+ i++;
+ }
+
+ if (i) {
+ int m = p_itoa(i, c);
+ c += m;
+ n += m;
+ } else if (!f) {
+ *(c = buf) = '0';
+ n = 1;
+ }
+
+ if (f) {
+ int j = prec;
+
+ *c++ = '.';
+
+ while (j--) {
+ c[j] = (f % 10) + '0';
+ f /= 10;
}
- /* If a decimal point appears, at least one digit appears
- * before it.
- */
- if (q == p) {
- *q = '\0'; n--;
+ c += prec-1;
+ n += 1+prec;
+
+ while (*c == '0') {
+ c--;
+ n--;
}
}
- /* -0 --> 0 */
- if (n == 2 && buf[0] == '-' && buf[1] == '0') {
- buf[0] = '0'; buf[1] = '\0'; n = 1;
- }
- return n;
+ *(++c) = 0;
+
+ return n;
}
static int
@@ -824,6 +851,7 @@ dev_set_font (int font_id)
/* Access text state parameters.
*/
+#if 0
int
pdf_dev_currentfont (void)
{
@@ -842,6 +870,7 @@ pdf_dev_get_font_ptsize (int font_id)
return 1.0;
}
+#endif
int
pdf_dev_get_font_wmode (int font_id)
@@ -1207,148 +1236,7 @@ pdf_dev_reset_fonts (void)
text_state.is_mb = 0;
}
-void
-pdf_dev_reset_color(void)
-{
- pdf_color *sc, *fc;
-
- if (pdf_dev_get_param(PDF_DEV_PARAM_COLORMODE)) {
- pdf_color_get_current(&sc, &fc);
- pdf_dev_set_strokingcolor(sc);
- pdf_dev_set_nonstrokingcolor(fc);
- }
- return;
-}
-
-static int
-color_to_string (pdf_color *color, char *buffer)
-{
- int i, len = 0;
-
- for (i = 0; i < color->num_components; i++) {
- len += sprintf(format_buffer+len, " %g", ROUND(color->values[i], 0.001));
- }
- return len;
-}
-
-void
-pdf_dev_set_color (pdf_color *color)
-{
- int len;
-
- if (!pdf_dev_get_param(PDF_DEV_PARAM_COLORMODE)) {
- WARN("Ignore color option was set. Just ignore.");
- return;
- } else if (!(color && pdf_color_is_valid(color))) {
- WARN("No valid color is specified. Just ignore.");
- return;
- }
-
- graphics_mode();
- len = color_to_string(color, format_buffer);
- format_buffer[len++] = ' ';
- switch (color->num_components) {
- case 3:
- format_buffer[len++] = 'R';
- format_buffer[len++] = 'G';
- break;
- case 4:
- format_buffer[len++] = 'K';
- break;
- case 1:
- format_buffer[len++] = 'G';
- break;
- default: /* already verified the given color */
- break;
- }
- strncpy(format_buffer+len, format_buffer, len);
- len = len << 1;
- switch (color->num_components) {
- case 3:
- format_buffer[len-2] = 'r';
- format_buffer[len-1] = 'g';
- break;
- case 4:
- format_buffer[len-1] = 'k';
- break;
- case 1:
- format_buffer[len-1] = 'g';
- break;
- default: /* already verified the given color */
- break;
- }
- pdf_doc_add_page_content(format_buffer, len);
- return;
-}
-
-void
-pdf_dev_set_strokingcolor (pdf_color *color)
-{
- int len;
-
- if (!pdf_dev_get_param(PDF_DEV_PARAM_COLORMODE)) {
- WARN("Ignore color option was set. Just ignore.");
- return;
- } else if (!(color && pdf_color_is_valid(color))) {
- WARN("No valid color is specified. Just ignore.");
- return;
- }
-
- graphics_mode();
- len = color_to_string(color, format_buffer);
- format_buffer[len++] = ' ';
- switch (color->num_components) {
- case 3:
- format_buffer[len++] = 'R';
- format_buffer[len++] = 'G';
- break;
- case 4:
- format_buffer[len++] = 'K';
- break;
- case 1:
- format_buffer[len++] = 'G';
- break;
- default: /* already verified the given color */
- break;
- }
- pdf_doc_add_page_content(format_buffer, len);
- return;
-}
-
-void
-pdf_dev_set_nonstrokingcolor (pdf_color *color)
-{
- int len;
-
- if (!pdf_dev_get_param(PDF_DEV_PARAM_COLORMODE)) {
- WARN("Ignore color option was set. Just ignore.");
- return;
- } else if (!(color && pdf_color_is_valid(color))) {
- WARN("No valid color is specified. Just ignore.");
- return;
- }
-
- graphics_mode();
- len = color_to_string(color, format_buffer);
- format_buffer[len++] = ' ';
- switch (color->num_components) {
- case 3:
- format_buffer[len++] = 'r';
- format_buffer[len++] = 'g';
- break;
- case 4:
- format_buffer[len++] = 'k';
- break;
- case 1:
- format_buffer[len++] = 'g';
- break;
- default: /* already verified the given color */
- break;
- }
- pdf_doc_add_page_content(format_buffer, len);
- return;
-}
-
+#if 0
/* Not working */
void
pdf_dev_set_origin (double phys_x, double phys_y)
@@ -1363,6 +1251,7 @@ pdf_dev_set_origin (double phys_x, double phys_y)
pdf_dev_concat(&M1);
}
+#endif
void
pdf_dev_bop (const pdf_tmatrix *M)
@@ -1375,7 +1264,7 @@ pdf_dev_bop (const pdf_tmatrix *M)
pdf_dev_concat(M);
pdf_dev_reset_fonts();
- pdf_dev_reset_color();
+ pdf_dev_reset_color(0);
}
void
@@ -1807,7 +1696,7 @@ pdf_dev_put_image (int id,
double ref_y)
{
char *res_name;
- pdf_tmatrix M;
+ pdf_tmatrix M, M1;
pdf_rect r;
int len = 0;
@@ -1829,9 +1718,8 @@ pdf_dev_put_image (int id,
graphics_mode();
pdf_dev_gsave();
- pdf_dev_concat(&M);
-
- pdf_ximage_scale_image(id, &M, &r, p);
+ pdf_ximage_scale_image(id, &M1, &r, p);
+ pdf_concatmatrix(&M, &M1);
pdf_dev_concat(&M);
/* Clip */