diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-11-10 10:29:43 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-11-10 10:29:43 +0000 |
commit | 5fc8d99062f93c1d823ef44569549781d4a8e36b (patch) | |
tree | 9f47b0e74eb2ea982c8a888cab596eac38b2fc1b /Build/source/texk/dvipng/dvipng-1.12/papersiz.c | |
parent | f61bbe1e960052731889ff87ac1885f85b786f51 (diff) |
towards TL2010: texk/dvipng
git-svn-id: svn://tug.org/texlive/trunk@15970 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipng/dvipng-1.12/papersiz.c')
-rw-r--r-- | Build/source/texk/dvipng/dvipng-1.12/papersiz.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/Build/source/texk/dvipng/dvipng-1.12/papersiz.c b/Build/source/texk/dvipng/dvipng-1.12/papersiz.c new file mode 100644 index 00000000000..2b46e97de16 --- /dev/null +++ b/Build/source/texk/dvipng/dvipng-1.12/papersiz.c @@ -0,0 +1,73 @@ +/* papersiz.c */ + +/************************************************************************ + + Part of the dvipng distribution + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program 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 Lesser General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/>. + + Copyright (C) 2002-2008 Jan-Åke Larsson + +************************************************************************/ + +#include "dvipng.h" + +const char *lengthnames[]={ "sp", "pt", "bp", + "dd", "mm", "pc", + "cc", "cm", "in" }; +const int32_t lengthsp[]={ 1L, 65536L, 65782L, + 70124L, 186468L, 786432L, + 841489L, 1864680L, 4736286L }; + +/* + * Convert a double[unit], e.g., "3.2cm" or "1.0in" into length in pixels. + * Advance the passed pointer as well. + */ + +static int32_t myatodim(const char ** p) +{ + double tmp; /* double accuracy is enough, I think */ + int i=0; + char *q; + + tmp = strtod(*p,&q); + while (*q == ' ') + q++; + while (i<8 && (q[0]!=lengthnames[i][0] || q[1]!=lengthnames[i][1])) + i++; + if (i==8 && (q[0]!=lengthnames[i][0] || q[1]!=lengthnames[i][1])) + Warning("unrecognized length unit \"%.2s\", assuming inches",q); + while (*q != ',' && *q !='\0') + q++; + tmp = tmp*lengthsp[i]*dpi/4736286L; /* sp * dots/in / (sp/in), convert sp to pixels */ + return((int32_t) tmp); +} + + +/* + * The routine where we handle the paper size special. We need to pass in + * the string after the `papersize=' specification. + */ + +void handlepapersize(const char * p, int32_t * x, int32_t * y) +{ + while (*p == ' ') + p++ ; + *x = myatodim(&p) ; + while (*p == ' ' || *p == ',') + p++ ; + *y = myatodim(&p) ; +} + |