diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/pdf/pdfrule.w')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdfrule.w | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfrule.w b/Build/source/texk/web2c/luatexdir/pdf/pdfrule.w new file mode 100644 index 00000000000..fc13da2c32e --- /dev/null +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfrule.w @@ -0,0 +1,70 @@ +% pdfrule.w +% +% Copyright 2010 Taco Hoekwater <taco@@luatex.org> + +% This file is part of LuaTeX. + +% LuaTeX is free software; you can redistribute it and/or modify it under +% the terms of the GNU General Public License as published by the Free +% Software Foundation; either version 2 of the License, or (at your +% option) any later version. + +% LuaTeX is distributed in the hope that it will be useful, but WITHOUT +% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +% FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +% License for more details. + +% You should have received a copy of the GNU General Public License along +% with LuaTeX; if not, see <http://www.gnu.org/licenses/>. + +@ @c +static const char _svn_version[] = + "$Id: pdfrule.w 3584 2010-04-02 17:45:55Z hhenkel $" + "$URL: http://foundry.supelec.fr/svn/luatex/tags/beta-0.60.0/source/texk/web2c/luatexdir/pdf/pdfrule.w $"; + +#include "ptexlib.h" + +@ @c +#include "pdf/pdfpage.h" + +#define lround(a) (long) floor((a) + 0.5) + +@ @c +void pdf_place_rule(PDF pdf, halfword q, scaledpos size) +{ + pdfpos dim; + pdfstructure *p = pdf->pstruct; + scaledpos pos = pdf->posstruct->pos; + (void) q; + pdf_goto_pagemode(pdf); + dim.h.m = lround(size.h * p->k1); + dim.h.e = p->pdf.h.e; + dim.v.m = lround(size.v * p->k1); + dim.v.e = p->pdf.v.e; + pdf_printf(pdf, "q\n"); + if (size.v <= one_bp) { + pos.v += (int) lround(0.5 * size.v); + pdf_set_pos_temp(pdf, pos); + pdf_printf(pdf, "[]0 d 0 J "); + print_pdffloat(pdf, dim.v); + pdf_printf(pdf, " w 0 0 m "); + print_pdffloat(pdf, dim.h); + pdf_printf(pdf, " 0 l S\n"); + } else if (size.h <= one_bp) { + pos.h += (int) lround(0.5 * size.h); + pdf_set_pos_temp(pdf, pos); + pdf_printf(pdf, "[]0 d 0 J "); + print_pdffloat(pdf, dim.h); + pdf_printf(pdf, " w 0 0 m 0 "); + print_pdffloat(pdf, dim.v); + pdf_printf(pdf, " l S\n"); + } else { + pdf_set_pos_temp(pdf, pos); + pdf_printf(pdf, "0 0 "); + print_pdffloat(pdf, dim.h); + pdf_printf(pdf, " "); + print_pdffloat(pdf, dim.v); + pdf_printf(pdf, " re f\n"); + } + pdf_printf(pdf, "Q\n"); +} |