summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/pdf/pdfpage.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/pdf/pdfpage.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfpage.c45
1 files changed, 20 insertions, 25 deletions
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.c b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.c
index 783eabda742..944da4dbfaa 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.c
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.c
@@ -17,8 +17,6 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: pdfpage.c 2046 2009-03-17 20:06:05Z hhenkel $ */
-
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
@@ -27,7 +25,8 @@
#include "ptexlib.h"
static const char __svn_version[] =
- "$Id: pdfpage.c 2046 2009-03-17 20:06:05Z hhenkel $ $URL: http://scm.foundry.supelec.fr/svn/luatex/trunk/src/texk/web2c/luatexdir/pdf/pdfpage.c $";
+ "$Id: pdfpage.c 2264 2009-04-12 17:54:48Z hhenkel $ "
+ "$URL: http://scm.foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfpage.c $";
#define lround(a) (long) floor((a) + 0.5)
#define setpdffloat(a,b,c) {(a).m = (b); (a).e = (c);}
@@ -111,7 +110,7 @@ void pdf_page_init()
#ifdef SYNCH_POS_WITH_CUR
/* some time this will be needed */
-synch_pos_with_cur(scaledpos * pos, scaledpos * cur, scaledpos * box_pos)
+void synch_pos_with_cur(scaledpos * pos, scaledpos * cur, scaledpos * box_pos)
{
switch (dvi_direction) {
case dir_TL_:
@@ -163,7 +162,7 @@ boolean calc_pdfpos(pdfstructure * p, scaledpos * pos)
new.v = lround(pos->v * p->k1);
p->cm[4].m = new.h - p->pdf.h.m; /* cm is concatenated */
p->cm[5].m = new.v - p->pdf.v.m;
- if (abs(p->cm[4].m) >= 1 || abs(p->cm[5].m) >= 1)
+ if (new.h != p->pdf.h.m || new.v != p->pdf.v.m)
move_pdfpos = TRUE;
break;
case PMODE_TEXT:
@@ -171,7 +170,7 @@ boolean calc_pdfpos(pdfstructure * p, scaledpos * pos)
new.v = lround(pos->v * p->k1);
p->tm[4].m = new.h - p->pdf_bt_pos.h.m; /* Tm replaces */
p->tm[5].m = new.v - p->pdf_bt_pos.v.m;
- if (abs(p->tm[4].m) >= 1 || abs(p->tm[5].m) >= 1)
+ if (new.h != p->pdf.h.m || new.v != p->pdf.v.m)
move_pdfpos = TRUE;
break;
case PMODE_CHAR:
@@ -182,17 +181,17 @@ boolean calc_pdfpos(pdfstructure * p, scaledpos * pos)
new.v = lround(pos->v * p->k1);
p->tj_delta.m =
-lround((new.h - p->cw.m) / exp10[p->cw.e - p->tj_delta.e]);
- p->tm[5].m = new.v - p->pdf.v.m; /* p->tm[4] is meaningless */
- if (abs(p->tj_delta.m) >= 1 || abs(p->tm[5].m) >= 1)
+ p->tm[5].m = new.v - p->pdf_bt_pos.v.m; /* p->tm[4] is meaningless */
+ if (p->tj_delta.m != 0 || new.v != p->pdf.v.m)
move_pdfpos = TRUE;
break;
case WMODE_V:
new.h = lround(pos->h * p->k1);
new.v = lround((p->pdf_tj_pos.v.m - pos->v * p->k1) * p->k2);
- p->tm[4].m = new.h - p->pdf.h.m; /* p->tm[5] is meaningless */
+ p->tm[4].m = new.h - p->pdf_bt_pos.h.m; /* p->tm[5] is meaningless */
p->tj_delta.m =
-lround((new.v - p->cw.m) / exp10[p->cw.e - p->tj_delta.e]);
- if (abs(p->tj_delta.m) >= 1 || abs(p->tm[4].m) >= 1)
+ if (p->tj_delta.m != 0 || new.h != p->pdf.h.m)
move_pdfpos = TRUE;
break;
default:
@@ -283,14 +282,6 @@ void pdf_set_pos(scaled h, scaled v)
set_pos(pstruct, &pos);
}
-void pdf_set_pos_temp(scaled h, scaled v)
-{
- scaledpos pos;
- pos.h = h;
- pos.v = v;
- set_pos_temp(pstruct, &pos);
-}
-
/**********************************************************************/
static long pdf_char_width(pdfstructure * p, internal_font_number f, int i)
@@ -489,7 +480,7 @@ static void set_textmatrix(pdfstructure * p, scaledpos * pos)
static void set_font(pdfstructure * p)
{
- pdf_printf("/F%d", p->f_pdf);
+ pdf_printf("/F%d", (int) p->f_pdf);
pdf_print_resname_prefix();
pdf_printf(" ");
print_pdffloat(&(p->fs));
@@ -514,20 +505,24 @@ place_glyph(pdfstructure * p, scaledpos * pos, internal_font_number f,
assert(is_charmode(p) || is_chararraymode(p));
move = calc_pdfpos(p, pos);
if (move == TRUE) {
- if ((p->wmode == WMODE_H && abs(p->tm[5].m) >= 1)
- || (p->wmode == WMODE_V && abs(p->tm[4].m) >= 1)
+ if ((p->wmode == WMODE_H
+ && (p->pdf_bt_pos.v.m + p->tm[5].m) != p->pdf.v.m)
+ || (p->wmode == WMODE_V
+ && (p->pdf_bt_pos.h.m + p->tm[4].m) != p->pdf.h.m)
|| abs(p->tj_delta.m) >= 1000000) {
goto_textmode(p);
set_textmatrix(p, pos);
begin_chararray(p);
move = calc_pdfpos(p, pos);
}
- assert((p->wmode == WMODE_H && p->tm[5].m == 0)
- || (p->wmode == WMODE_V && p->tm[4].m == 0));
if (move == TRUE) {
+ assert((p->wmode == WMODE_H
+ && (p->pdf_bt_pos.v.m + p->tm[5].m) == p->pdf.v.m)
+ || (p->wmode == WMODE_V
+ && (p->pdf_bt_pos.h.m + p->tm[4].m) == p->pdf.h.m));
if (is_charmode(p))
end_charmode(p);
- assert(abs(p->tj_delta.m) >= 1);
+ assert(p->tj_delta.m != 0);
print_pdffloat(&(p->tj_delta));
p->cw.m -= p->tj_delta.m * exp10[p->cw.e - p->tj_delta.e];
}
@@ -551,7 +546,7 @@ static void place_form(pdfstructure * p, scaledpos * pos, integer i)
goto_pagemode(p);
pdf_printf("q\n");
set_pos_temp(p, pos);
- pdf_printf("/Fm%d", i);
+ pdf_printf("/Fm%d", (int) i);
pdf_print_resname_prefix();
pdf_printf(" Do\nQ\n");
}